허프 변환을 응용하여 원을 검출할 수 있다.
허프 직선 변환처럼 원의 방정식 ( x - a )^2 + (y - b)^2 = c^2 을 사용하여 파라메타 공간으로 변환하여
a , b , c 를 사용하여 원을 검출할 수는 있다.
하지만 위 3개의 파라메타를 이용하여 공간변환을 하는 것은 시간이 오래걸리기때문에
위와같은 방법으로는 사용하지 않는다.
그래서 속도 향상을 위해 Hough Gradient Method 방법을 사용한다.
- 입력 영상과 동일한 2차원 평면 공간에서 축적 영상을 생성
- 에지 픽셀에서 그래디언트 계싼
- 에지 방향에 따라 직선을 그리면서 값을 누적
- 원의 중심을 먼저 찾고, 적절한 반지름을 검출
- 단점 : 여러개의 동심원을 검출 못함 - 가장 작은 원 하나만 검출됨
아래와 같이 원의 에지로 판단되는 곳에 수직인 직선을 긋고 모든 에지의 직선들이 만나는 곳을
원의 중심이라고 판단한다.
원의 중심에서부터 원을 그려나가며 에지들과 가장 많이 만나는 곳을 판단하여 반지름으로 계산한다.
cv2.HoughCircles ( image, method, dp, minDist, circles, param1, param2, minRadius, maxRadius )
image : 입력영상. ( 직선변환과는 달게 에지영상이 아닌 일반 GrayScale 영상 )
* Gradient 방향 검출을 해야하는데 에지영상에는 방향성분이 없기 때문
method : OpenCV 4.2 이하에서는 cv2.HOUGH_GRADIENT 만 지정 가능
dp : 입력 영상과 축적 배열의 크기 비율. 1이면 동일크기. 2이면 축적배열의 가로,세로크기가 입력 영상의 반
* 2를 사용해서 축적 배열의 크기를 줄이면 속도는 빨라지지만 아주 정교한 원은 찾지 못함
minDist : 검출된 원 중심점들의 최소 거리
circles : ( cx, cy, r) 정보를 담은 np.ndarray.shape = ( 1,N,3) , dtype = np.float32
params1 : Canny 에지 검출기의 높은 임계값
params2 : 축적 배열에서 원 검출을 위한 임계값
minRadius, maxRadius : 검출할 원의 최소, 최대 반지름
Gaussian Blur 를 사용하여 디테일을 죽여주는것이 원 검출에 더 유리하다.
실제로 코딩을 하여 실행해보면 위와같이 원이 아닌것도 모두 원으로 잡아버리기때문에
곤란한 경우가 생긴다.
그럴때 위에서 언급한
HOUGH_GRADIENT_ALT 인자를 사용할 수 있다.
ALT는 기존 GRADIENT 보다는 더 정확하게 원에 가까운 것을 측정하여 추출할 수 있다.
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
'Program > OPEN_CV' 카테고리의 다른 글
[Open CV] 이진 영상 처리 _ 영상의 이진화 (0) | 2022.06.04 |
---|---|
[Open CV] 영상의 특징 추출 _ 실전코딩 ( 동전 카운터 ) (0) | 2022.06.03 |
[Open CV] 영상의 특징 추출 _ 허프변환 _ 직선 검출 (0) | 2022.06.01 |
[Open CV] 영상의 특징 추출 _ 캐니 엣지 검출 (0) | 2022.05.31 |
[Open CV] 영상의 특징 추출 _ 그래디언트와 엣지 검출 (0) | 2022.05.30 |