영상처리
<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); // 가장 잘보였던 수치
위와 같은 값들을 적용하여 원을 찾음