2013-10-28 2 views
2

opencv 용 파이썬 래퍼를 사용하여 이미지의 모든 서클 개체를 찾으려고합니다. 와 비슷한 것 this.모든 서클 개체 찾기

cv2.HoughCircles을 사용하지만 최적의 매개 변수를 찾을 수 없습니다. 전혀 가능합니까?

내 코드 :

import cv, cv2 
import numpy as np 

im = cv2.imread("C:/1.jpg") 

grey = cv2.cvtColor(im, cv.CV_RGB2GRAY) 
blur= grey 
#blur = cv2.GaussianBlur(grey, (0,0), 10) 
circles = cv2.HoughCircles(blur, cv2.cv.CV_HOUGH_GRADIENT, 2, 5, np.array([]), 40, 80, 5, 50)#params? 
if circles is not None: 
     for c in circles[0]: 
       cv2.circle(im, (c[0],c[1]), c[2], (0,255,0),2) 
edges = cv2.Canny(blur, 40, 80) 

cv2.imwrite("C:/circle.jpg",im) 
cv2.imwrite("C:/canny.jpg",edges) 

enter image description here

enter image description here

+2

은 [] ('= cv2.HoughCircles 원 (흐림 cv2.cv.CV_HOUGH_GRADIENT, 1, 16, np.array 시도) 15, 36, 9, 35)', CircularHough_Grd (빨간색, [3 35], 20, 15, 1)에 대한 matlab 결과는 여기에있다. (http://i.stack.imgur.com/bw5HL.jpg) . 그것은 여전히 ​​더 많은 거품을 잡는 것처럼 보인다. MATLAB 버전은'adapthisteq'을 사용합니다.이 함수는 opencv에서'createCLAHE'입니다. 나는 그것을 시도했지만 결과는 크게 다르지 않다. 이는 circularhough 구현 간의 차이 일 수 있음을 의미한다. 나는 더 작은 radaii 범위가 더 많은 것들을 잡는다는 것을 알아 차렸을 것이다. 그래서 아마도 여러개의 다른 범위를 시도하고 함께 결합 할 것이다. –

답변

1

이것은 당신이 제공하는 이미지에 대한 쉬운 일이 아니다.

반경에 맞는 좋은 범위를 찾으십시오 (minRadius, maxRadius : 크지 않은 경우 작은 원을 큰 원으로 볼 수 있음) 결과도 향상됩니다. (예 watershedding)

그렇지 나 다른 방식의 개체 오토넷 제안