Hough Transformation은 이미지 처리에서 기능 추출 기술입니다. 매개 변수 공간 에서이 프로세스는 누적 된 결과의 로컬 최대 값을 Hough 변환 결과로 특정 모양을 준수하는 세트로 계산합니다.
개발의 역사 :
1962 년 Paul Hough가 직선과 곡선을 감지하기 위해 처음 제안했습니다.
1972 년 Richard Duda & Peter Hart가 홍보 한이 건물은 모든 모양의 물체 인식으로 확장되었습니다.
원칙:
직선은 직사각형 좌표계에서 y = k*x+b로 표시되고, 극지방 좌표계로 r = x*cos (theta)+y*sin (theta)으로 표시됩니다. 허프 변환에 대한 아이디어는 직사각형 좌표계의 점이 극 좌표계 하의 직선에 해당하고, 유사하게, 극성 좌표계의 점은 직사각형 좌표계 아래 직선에 해당한다는 것이다. 직사각형 좌표계의 직선으로, 기울기와 절편은 확실 하므로이 직선의 모든 점은 극지 좌표계의 한 지점에 초점을 맞추고, 이러한 초점 지점은 직사각형 좌표계의 직선을 나타냅니다.
직선 x = C의 경우 실제 응용 분야에서 파라미터 방정식 p = x*cos (theta)+y*sin (theta)이 사용됩니다. 이런 식으로, 이미지 평면의 점은 매개 변수 r-theta 평면의 곡선에 해당하고 나머지는 동일합니다.
표준 허프 변환 :
imgproc.houghlines (매트 이미지, 매트 라인, 이중 Rho, 이중 세타, int 임계 값, 이중 SRN, 이중 STN, Double Min_theta, Double Max_theta)
매개 변수 설명 :
이미지 : 소스 이미지
선 : 감지 된 라인의 출력 벡터는 허프 변환 후에 저장됩니다.
Rho : 픽셀의 거리 정확도
세타 : 라디안의 각도 정확도
임계 값 : 부품이 직선 일 때 도달 해야하는 값
SRN : 기본값이 0 인 Rho 매개 변수의 제수 거리
STN : THETA 매개 변수의 제수 거리, 기본값 0
Min_theta : 감지 된 선의 최소 각도
max_theta : 감지 된 선의 최대 각도
샘플 코드 :
public static void main (String [] args) {System.LoadLibrary (core.native_library_name); mat srcimage = imgcodecs.imread ( "f : //659721050414479394.jpg"); mat dstimage = srcimage.clone (); imgproc.canny (srcimage, dstimage, 400, 500, 5, false); 매트 저장소 = 새로운 매트 (); imgproc.houghlines (dstimage, Storage, 1, math.pi / 180, 200, 0, 0, 0, 10); for (int x = 0; x <Storage.rows (); x ++) {double [] vec = storage.get (x, 0); 이중 rho = vec [0]; 이중 세타 = Vec [1]; 포인트 pt1 = new Point (); 포인트 pt2 = new Point (); 이중 A = Math.Cos (theta); Double B = Math.sin (Theta); 이중 x0 = a * rho; 이중 y0 = b * rho; pt1.x = math.round (x0 + 1000 * (-b)); pt1.y = math.round (y0 + 1000 * (a)); pt2.x = math.round (x0-1000 * (-B)); pt2.y = math.round (y0-1000 * (a)); if (theta> = 0) {imgproc.line (srcimage, pt1, pt2, new scalar (255, 255, 255, 255), 1, imgproc.line_4, 0); }} imgcodecs.imwrite ( "f : //dst2.jpg", srcimage); } 누적 확률 hough 변환 :
imgproc.houghlinesp (매트 이미지, 매트 라인, 더블 rho, 더블 세타, int 임계 값, 이중 minlinelenger, double maxlinegap)
매개 변수 설명 :
이미지 : 소스 이미지
선 : 감지 된 라인의 출력 벡터는 허프 변환 후에 저장됩니다.
Rho : 픽셀의 거리 정확도
세타 : 라디안의 각도 정확도
임계 값 : 부품이 직선 일 때 도달 해야하는 값
MinlineLength : 가장 낮은 선 세그먼트의 길이, 기본값은 0입니다.
MAXLINEGAP : 허용되는 최대 거리는 같은 줄의 점에 포인트를 연결하고 기본값은 0입니다.
샘플 코드 :
public static void main (String [] args) {System.LoadLibrary (core.native_library_name); mat srcimage = imgcodecs.imread ( "f : //659721050414479394.jpg"); mat dstimage = srcimage.clone (); imgproc.canny (srcimage, dstimage, 400, 500, 5, false); 매트 저장소 = 새로운 매트 (); imgproc.houghlinesp (dstimage, storage, 1, math.pi / 180, 50, 0, 0); for (int x = 0; x <Storage.rows (); x ++) {double [] vec = storage.get (x, 0); double x1 = vec [0], y1 = vec [1], x2 = vec [2], y2 = vec [3]; 포인트 시작 = 새로운 포인트 (x1, y1); 포인트 엔드 = 새로운 포인트 (x2, y2); imgproc.line (srcimage, start, end, new scalar (255, 255, 255, 255), 1, imgproc.line_4, 0); } imgcodecs.imwrite ( "f : //dst2.jpg", srcimage); } 소스 이미지 :
표준 허프 변환 결과 :
누적 확률 Hough 변환 결과 :
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.