Edge Detection, Line Detection

김민혁·2025년 1월 30일
0

컴퓨터 비전

목록 보기
11/19

Minhyeok의 Notion - 노션에서 옮기는 중

어떻게 detect?

  • Edge pixels: intensity 가 급격하게 변하는 곳의 pixels
  • Edges: sets of Edge pixels
  • 1D 일때: 1차 도함수의 크기 이용
  • 2D 일때: image gradient 이용

Sobel operators

  • 아래의 수평필터, 수직 필터를 적용해서 각 픽셀의 gx, gy 계산

Canny Edge Detector

  • 엣지 찾기
    // 190: Thresh_low, 200: Thresh_high, 3: kernel_size
    Canny(image, canny, 190, 200, 3);
  • 알고리즘
    1. Gaussian Filter 로 이미지 smooth

    2. sobel edge mask 로 gradient magnitude 와 angle images 를 계산

      // x, y, kernel size = 1, 0, 3 / 0, 1, 3
      Sobel(blur, grad_x, CV16S, 1, 0, 3);
      Sobel(blur, grad_y, CV16S, 0, 1, 3);
    3. Non-Maxima Suppression을 통해 불필요 픽셀 제거 및 가장 강한 엣지만 남김

    4. Double Thresholding

      • M(x,y) ≥ TH : 강한 엣지
      • M(x,y) < TL : 엣지 아님
      • TL ≤ M(x,y) <TH: 약한 엣지, 강한 엣지와 연결되어 있으면 남김

Hough Tranform

  • 연관선 찾기 (직선, 원)
  • 알고리즘
    1. binary edge image 준비 (From Canny)
    2. 𝜌𝜃-plane 에 Subdivision (각 엣지 픽셀에 대한 𝜌, 𝜃 계산
    3. accumulator cells 에서 높은 값을 갖는 셀 찾기
  • 원 검출
    • 원의 중심 좌표, 반지름 ⇒ x,y,r 3D 매개변수 공간 이용
    • 동일한 중심과 반지름을 가지는 경우 찾기
    • (𝑥 − 𝑐1)^2+(𝑦 − 𝑐2)^2= 𝑐3
    • HoughLines 는 각 좌표에 대해서 계산, HoughLinesP는 확률적 좌표에 대해서 계산 함, 따라서, HoughLinesP는 직선의 시작점, 끝점을 계산
      // canny, output, 해상도, theta, thresh, 최소 각, 최대 각)
      HoughLines(edge, lines, 1, CV_PI/180, 150, 0, CV_PI);
      // canny, output, 해상도, theta, thresh, 최소라인길이, 최대라인길이
      HoughLinesP(edge, lines, 1, CV_PI/180, 50, 10, 300);
profile
해야한다면, 다 하게 되더라.

0개의 댓글