2014-09-06 4 views
0

다양한 OpenCV 필터를 사용하여 흑백 마스크를 만들었습니다. 이 명확하게 내가 HoughCircles를 사용하여 이러한 원을 간략하게 설명하려고 black and white maskPython OpenCV가 흑백 마스크에서 원을 감지합니다.

볼 수 있습니다 네 개의 원이 있지만, 그것은 많은 거짓 긍정과 일반적으로 나쁜 결과를 제공합니다

circles = cv2.HoughCircles(combined, cv.CV_HOUGH_GRADIENT, 1, 300, np.array([]), 10, 30, 60, 300)

circle outlines

어떻게을 흑백 이미지에서 원형 모양을 올바르게 감지합니까? 여기

은 흑백 이미지와 함께 사용할 수있는 실행 가능한 코드입니다 : 내가 잘못 아니에요 경우 모든

import numpy as np 
import cv2 
import cv 

image = cv2.imread("image.png") 
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 

circles = cv2.HoughCircles(gray, cv.CV_HOUGH_GRADIENT, 1, 300, np.array([]), 10, 30, 60, 300) 
if circles is not None: 
    circles = np.uint16(np.around(circles)) 
    for i in circles[0,:]: 
     cv2.circle(image, (i[0], i[1]), i[2], (0, 255, 0), 1) 
     cv2.circle(image, (i[0], i[1]), 2, (0, 0, 255), 3) 

cv2.imshow("thing", image) 

cv2.waitKey(0) 
cv2.destroyAllWindows() 
+1

실행 가능한 코드를 제공하여 이미지를로드하고 원을 그려 보는 사람이있을 수 있습니다. – Bull

+0

감사합니다 @B ... 실행 가능한 코드가 추가되었습니다. – fruitcup

답변

0

첫째, 호우가 원 대한 변환하는 것은 중공 원형이 아닌 전체를 기대 . 즉, Hough Transform을 적용하기 전에 원의 경계/둘레 만 추출해야합니다. OpenCV의 findContoursarcLength 기능은 주변을 찾는 데 도움이됩니다.

둘째, 불행하게도 Hough Transform은 원형 모양의 변형에 매우 민감합니다. 즉, 모양을 감지하려고하면 모양이 거의 원형으로 나타나면 감지 할 수 없을 수도 있습니다. 그것.

제 조언은 디스크 모양의 구조 요소와 함께 이진 이미지에 Closing morphological operation을 적용하여 개체가 "둥글게"만들도록 노력해야한다는 것입니다. 그런 다음 이미지에서 객체의 둘레를 추출한 다음 Hough Transform을 적용하십시오. 다행히도, 이것은 당신에게 충분한 결과를 줄 것입니다.


또는 RANSAC 알고리즘을 사용하여 원을 감지 할 수 있습니다. Here은 선을 감지하기위한 구현이지만 원에 맞게 조정할 수 있습니다. 2 점 대신 임의로 3 점을 선택하고 그 점을 통과하는 원을 정의합니다. 다음으로 그 원 근처에있는 모든 점을 찾습니다 (이 점들을 인라이어 포인트라고합니다). (x,y)는 점이다 enter image description here

, (x0,y0)r는 반경이며, margin 당신이 조정해야하는 파라미터, 원의 중심입니다 : 이러한 불평등을 만족하는 포인트가 될 것입니다. 나머지 알고리즘은 같습니다.

행운을 빈다.