컴퓨터비전 - 9(선분 검출)

박승현·2023년 10월 11일
0

컴퓨터비전

목록 보기
9/15
post-thumbnail

선분 검출


에지의 연결과 표현

  • 에지를 끝점, 분기점, 통과점으로 분류
    • 엣지를 끝점과 분기점으로 나누어 엣지 토막으로 나눔
    • 추가로 체인코드로 시작점만을 가지고 중간의 통과점을 방향만 나타내면 전체 영상에서 엣지를 효과적으로 표현 가능
  • 선분근사
    • h가 임계값 이내가 될 떄까지 선분 분할을 반복해 직선으로 만드는 것

허프 변환

  • 위의 에지의 연결 과정을 생략하고 선분을 검출
  • 엣지의 정보를 직선의 방정식으로 표현하는 것
  • 영상의 x,y(special domain)를 기울기와 y절편으로 변환

  • 기울기가 y좌표와 수평일떄 문제가 생겨 극좌표계(삼각함수)로 표현
  • 1의 직선의 방정식을 8로 변환
  • 3개의 좌표가 만나는 지점이 직선의 방정식을 의미함
  • 극좌표계를 사용하여 차원을 줄이고, 엣지가 끊어져 있는 경우에도 검출 가능함

  • 위의 식에서 x,y는 엣지의 좌표값, 세타값을 변화시켜 직선을 찾는것임

  • 위의 3점을 나타내는 직선을 찾는 문제가 허프 변환
  • 이 식을 동일하게 사용
  • 파란색점부터
    • y=4,x=1를 식에 대입하면 4cosθ + sinθ = r
    • = -4
    • θ를 -90부터 대입해서 나오는 값에 1을 추가해줌
  • 3점을 모든 각에서 하고
    • 3점이 모두 만나는 지점에서의 세타와 r이 직선의식
    • ycos30 + xsin30 = 3인 지점

영상에서의 여러 점을 극좌표계로 표현해 모든 점이 모이는 좌표에서의 θ,r값을 사용해 직선의 방정식으로 표현


허프변환 알고리즘

  • ρ,θ를 어느 단위로 나누는지에 따라시간과 정확도가 달라짐
  • 각각의 엣지에 대해서 0부터180까지 세타값을 대입해 ρ값을 구하고 이를 해당하는 극좌표계의 좌표에서 1을 더함
  • 극좌표계 배열에서 모든 점이 위치하는 곳의 ρ,θ를 사용해 직선의 방정식으로 표현
  • 각각의 끊어진 점을 가지고도 직선의 방정식을 구할 수 있고 2차원의 배열로 표현해 차원을 줄이는 장점이 있음
  • 도형의 표현
    • 정사각형의 경우 직선이 4개가 필요
      • 같은 기울기가 2개씩 나타남
    • 원의 경우 직선이 없어 모이는 점이 없음
    • 가장 밝은 점은 가장 긴 직선을 나타냄
    • 여러개의 직선

  • 약간의 오차가 있는 경우(주변에 모이기는 하지만 한점에서는 모이지 않을떄)
    • 특정 수치 이상을 뽑아 그 좌표들의 평균을 사용하기도 함
  • 점들이 완전히 랜덤일때는 특정할 직선을 찾을 수 없음
    • 특정 범위 이상으로는 점들이 모여 있어야 사용가능함

  • 허프 변환으로 원의 반지름 찾기
  • 엣지를 검출하는것 까지는 동일
  • 직선에서의 세타 대신 r을 사용 r은 a와b사이의 값이 라고 가정하고 a~b를 대입함
  • 엣지를 기준으로 양쪽으로 r만큼 떨어진 직교하는 2점을 보팅
  • 모든 엣지에서 모든 r값으로 진행 했을때 가장 많은 점이 보팅되는 지점이 원의 중심

  • 어떤 물체의 중심점을 찾는데 사용가능
  • 물체에 어떤 특징점을 기준으로 여러 방향으로 보팅시키고 공통적으로 모이는 점을 물체의 중심으로 생각할 수 있음
  • 자동차의 앞,뒷바퀴에서 동일한 방향으로 보팅할때 앞,뒤중 만나는 점이 자동차의 중심
  • 여러 부품에서 중앙을 찾늘수 있음
  • 부품들을 가지고 전체적인 자동차를 인식하는 방법 -> bottom - up은 자동차의 일부분이 가려져도 그 물체를 자동차로 인식시킬 수 있음

허프 변환 장, 단점

  • 장점
    • 물체가 부분적으로 가려져도 처리 가능
    • 차원을 줄임(허프 배열으 통해)
  • 단점
    • 시간이 오래걸림
    • 적절한 그리드 크기 선택이 어렵고 의미 없는 점이 발생할 수도 있음 ///

RANSAC

  • 직선의 방정식을 찾을때 잡음을 처리할 수 있게 만들어 주는 알고리즘
  • 아웃라이어를 고려하면 서로 다른 많은 직선이 나올 수도 있음
    • 모든 점을 고려한 직선(아웃라이어도 고려함)
  • 먼저 랜덤한 점 2개를 고르고 2개로 직선을 만듦
  • 그리고 직선에서 마진을 주고 그 안에 다른 점이 몇개가 들어오는지 구함
  • 마진 안에 들어오는 점의 개수가 원하는 수를 넘을때까지 2점을 뽑고 직선을 구하고 마진안에 들어노는 점의 수를 구하기를 반복함
  • 우연히 고른 두점의 직선에서 마진안에 원하는 수 이상의 점이 들어온 경우임
profile
KMU SW

0개의 댓글