Line Segment Detector (LSD)
1 개요
선분을 검출하는 알고리즘입니다. 이산화된 픽셀 값만을 얻을 수 있는 Filter 계열 Edge Detection과 비교하여 정확하게 계산된 직선 위치를 얻을 수 있으며, 직선만을 검출할 수 있는 Hough Line과 비교하여 임의 각을 가지는 선분의 검출을 보다 정확하게 할 수 있습니다.
2 알고리즘 상세 설명
- 픽셀 값으로부터 기울기 방향을 계산하여 방향이 비슷한 점끼리 묶은 후, 해당 영역을 포함하는 직사각형 영역에서 한 방향으로 얼마나 정렬되었는지를 계산합니다. 이 계산값이 확률적으로 얼마나 나타나기 어려운지를 통해 선분인지를 판단하는 방법입니다.
입력 이미지 | 결과 이미지 |
---|---|
![]() |
![]() |
3 파라미터 설정 및 사용 방법
-
SetScale(double f64Scale)
- 그래디언트 계산 시의 계단 현상을 완화하기 위한, Scaling 전처리 과정의 배율을 설정합니다.
- Default Value :
0.8
- Recommended Value :
0.8, 0.75, 0.7, 0.66
-
SetAngleThreshold(double f64AngleThreshold, EAngleUnit eAngleUnit = EAngleUnit_Degree)
- 비슷한 방향의 픽셀을 묶기 위해 허용할 각도 차이의 임계치를 설정합니다.
- Default Value :
22.5
- Recommended Value :
25, 22.5, 20, 18
-
SetMagnitudeThreshold(double f64MagnitudeThreshold)
- 기울기 임계치를 설정합니다. 기울기벡터의 크기 값이 이 값보다 작은 경우 해당 위치의 방향은 없는 것으로 간주합니다.
- 0 설정 시 모든 결과를 반환합니다.
- Default Value :
2
- Recommended Value :
1, 2
-
SetNFAThreshold(double f64NFAThreshold)
- 선분으로 간주할 직사각형 중 가짜 선분이 있을 확률의 허용 임계치를 설정합니다.
- Default Value :
0.1
- Recommended Value :
0.1, 0.01, 1e-6
- 유사 함수:
SetLogNFAThreshold(double f64LogNFAThreshold)
-
EnableAngleReduction(bool bEnable)
- 선분 지지 영역을 개선하는 시도 방법 중 각도를 좁히는 방식을 활성화 또는 비활성화합니다.
- Default Value :
true
-
EnableRadiusReduction(bool bEnable)
- 선분 지지 영역을 개선하는 시도 방법 중 반경을 재설정하는 방식을 활성화 또는 비활성화합니다.
- Default Value :
true
-
EnableFilterFailedSegments(bool bEnable)
- 그루핑 후의 존재 확률 통과에 실패한 선분들을 확인하기 위한 옵션입니다.
false
설정 후 실행 시, NFA 임계치에 관계 없이 모든 선분 후보를 반환합니다. - Default Value :
true
- 그루핑 후의 존재 확률 통과에 실패한 선분들을 확인하기 위한 옵션입니다.
4 결과 취득 방법
-
GetResultLineSegments(CFLFigureArray &flfaLine)
- 결과 선분들을 가져옵니다.
-
GetResultLineSegmentsWithinBoundary(CFLFigureArray &flfaLine)
- 알고리즘 특성상 결과 선분이 이미지 경계 혹은 ROI 경계를 벗어나는 것이 가능합니다. 이 경우의 선분을 Trim하여 반환하는 값입니다.
-
GetResultRectangleWidths(CFLArray<double> &flaWidth)
- 선분으로 탐지된 직사각형의 너비들을 가져옵니다.
-
GetResultAlignAngles(CFLArray<double> &flaAngle, EAngleUnit eAngleUnit = EAngleUnit_Degree)
- 선분으로 탐지된 직사각형에서 기울기벡터의 각도 범위를 가져옵니다.
-
GetResultScores(CFLArray<double> &flaScore)
- 선분으로 탐지된 각 직사각형의 점수를 가져옵니다. 이 점수는 NFA 값과는 다르게 후보 정사각형들의 개수를 고려하지 않으므로, 이 점수를 사용해 필터링할 경우 ROI에 무관하게 같은 값을 얻을 수 있습니다.
5 예제 코드
이미지 및 ROI 설정 방법(ImageProcessing_Common 항목 참고)
CLineSegmentDetector lsd;
CFLImage fliSourceImage;
lsd.SetSourceImage(fliSourceImage);
lsd.Execute();
CFLFigureArray flfaResultPoints;
lsd.GetResultLineSegments(flfaResultPoints);