4

openCV에서 표준 HoughCircles 명령을 사용하여 원을 감지하는 매우 기본적인 코드가 있습니다. 그러나 내 문제는 내 데이터 (이미지) (데이터 시뮬레이션 목적으로) 알고리즘을 사용하여 생성 된 -15 % (임의로이 범위에서) r의 범위에서 지점을 그릴 수 있습니다. 여기서 r은 반경 원의 방정식을 사용하여 360도에서 5 ~ 10 (실수) 사이의 무작위로 생성 된 원의 수를 계산합니다. (샘플 이미지 첨부). http://imgur.com/a/iIZ1N Hough circle 명령을 사용하여 수동으로 매개 변수를 사용하여 같은 반경의 원을 감지 할 수있었습니다 (동일한 특성의 github 코드에서 영감을 얻은 설정에 의해 트랙바 위로 설정).하지만 자동화하려고합니다 이 과정을 제가 1000 장 이상의 이미지를 가지고 반복해서 반복하고 싶습니다. 그렇게 할 수있는 더 좋은 방법이 있습니까? 누구나 제안 사항이 있으면 이미지 처리 분야의 초보자이며 CS보다는 물리 배경을 가지고 있으므로 고맙게 생각합니다. 내 코드의 거친 샘플 (trackbars 등없이 아래입니다) :Hough Circle Transform을 개선하여 분산 점으로 구성된 원을 감지하십시오.

Mat img = imread("C:\\Users\\walee\\Documents\\MATLAB\\plot_2 .jpeg", 0); 
Mat cimg,copy; 
copy = img; 
medianBlur(img, img, 5); 
GaussianBlur(img, img, Size(1, 5), 1.1, 0); 

cvtColor(img, cimg, COLOR_GRAY2BGR); 
vector<Vec3f> circles; 
HoughCircles(img, circles, HOUGH_GRADIENT,1, 10, 94, 57, 120, 250); 
for (size_t i = 0; i < circles.size(); i++) 
{ 
    Vec3i c = circles[i]; 
    circle(cimg, Point(c[0], c[1]), c[2], Scalar(0, 0, 255), 1, LINE_AA); 
    circle(cimg, Point(c[0], c[1]), 2, Scalar(0, 255, 0), 1, LINE_AA); 
} 
imshow("detected circles", cimg); 
waitKey(); 
return 0; 

답변

0

모든 이미지는 동일한 특성을 (원 같은 검은 색 축 점)이있는 경우 나 다음을 수행 제안 :

1) 검은 배경을 가지고

2) 반전 색상을 검은 색 요소를 찾아 축을 제거하고 배경으로 대체

3) 더 단단한 점

을 원을 작성하여 만들 수있는 형태 폐쇄을 수행

4 점의 밀도가 높은 경우 다른 형태 학적 연산, 데이터 원 얇은

5) 내가 원을 채울 것입니다

+0

호우 원 적용 할 수 있도록, 즉 팽창을 적용하려고 할 수 있습니다) (옵션) 그렇게하는 것이 가능한 한 빨리 여러분에게 돌아옵니다. (시뮬레이션이기 때문에 프로그램에 제공하는 데이터를 제어 할 수 있습니다. 채워지지 않은 원은 데이터 생성 중에 게으르다.). 색상을 반전하는 경우 이미지를 흑백으로 만 만든 느낌을 받고있었습니다. 그 가정에 잘못입니까? – user2918711

+0

맞습니다 - 이진화는 이미지를 흑백으로 만듭니다. 나는 배경이 검은 색이고 전경색이 흰색임을 확신하고 싶다. 그렇지 않으면 형태 학적 조작은 반대의 작용을합니다. – MateuszB

+0

나는 그 모든 것을 시도해 보았고 처음 몇 장의 사진에 대한 결과를 개선했지만 프로그램은 더 많은 이미지를 위해 그것을 수행하지 못했습니다. 또한 최고의 단일 원을 감지하기위한 누적 기 어레이의 완벽한 가치에 대한 일종의 검색 알고리즘을 구현하는 방법을 생각했지만 프로그램에서 의도 한 것보다 조금 작은 원을 감지하기 시작했습니다. – user2918711