영상처리

<C++>OpenCV Find imperfect Circle

park__ 2022. 4. 15. 17:28

 

이미지에서 불안전한 원을 찾는 방법

 

 위와 같은 이미지에서 불안전한 원을 찾을 때 단순히 OpenCV에서 재공해 주는 HoughCircles 사용하여 찾는 것은 매우 어렵다. 그 이유는 HoughCircles 함수에서 Canny 함수를 사용하는데 이미지가 뚜렷하지 못하여 제대로 된 원을 찾기 어렵기 때문이다. 

 

 해결 방법 

경계를 뚜렷하게 하기 위해 GaussianBlur, Sharpening, threshold 를 모두 적용하여 경계가 뚜렷해 지는 이미지를 찾아 원을 찾아낸다.

 

 내가 사용한 값

 //가우시안 필터 경계를 완만하게 해줌. 노이즈가 많이 줄어듬
GaussianBlur(img, img_blur, Size(11, 11), 0); //size 값을 변화 시켜 적당한 값을 찾음

 //sharpening 경계를 뚜렷하게 해줌 
float data[9] = { -1,-1,-1,-1,3,-1,-1,-1,-1 };
	Mat kernel(3, 3, CV_32FC1, data);

	Mat sharp;
	filter2D(img, sharp, -1, kernel, Point(-1, -1), 0);
	Mat dst;
	addWeighted(img, 0.75, sharp, 0.25, 0, dst);     
    
    // 이치화
    threshold(sharp_img, binary_img, 27, 255, THRESH_BINARY); // 가장 잘보였던 수치

위와 같은 값들을 적용하여 원을 찾음