강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

임재범님의 프로필 이미지
임재범

작성한 질문수

OpenCV에서 원찾기

작성

·

486

0

아래 사진에서 화살표 되어 있는 원의 중심값과 반지름을 구하려고 하는데 도움 요청 드립니다.

( C# OpenCV 컴퓨터비전 입문 강좌 )

 

Canny Edge, Laplace Edge, BinarizerMethod 등을 적용해서 해보고

바닥 조명을 녹색으로도 변경해 보고 했는데 잘 안 되네요.

1) 노이즈 제거가 제대로 안 되었을까요?

2) 이미지에 맞게 설정값을 최적화하지 못한 것일까요?

 

( 참고로, C# 에서 OpenCVSharp 2.0 사용 )

CvMemStorage a_Storage = new CvMemStorage();

CvSeq<CvCircleSegment> circles = Cv.HoughCircles(a_gray, a_Storage, HoughCirclesMethod.Gradient, 1, 100, 100, 200, 0, 0);

 

circle.jpgDia_G.jpg

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

임재범님, OpenCV를 사용하여 원의 중심값과 반지름을 찾는 문제에 도움을 요청하셨네요. OpenCV에서 HoughCircles 메소드를 사용하여 원을 찾는 과정은 여러 단계의 최적화가 필요합니다.

  1. 노이즈 제거가 제대로 안 되었다면, 이미지 전처리 과정에서 블러(blur)를 적용하거나 임계값(thresholding) 처리를 조정해 보세요. GaussianBlur 또는 MedianBlur 함수를 사용하여 노이즈를 줄일 수 있습니다.

  2. HoughCircles 함수의 매개변수들을 이미지에 맞게 최적화하는 것이 중요합니다. dp, minDist, param1, param2 등의 값을 조정하면서 결과가 개선되는 지 확인하실 필요가 있습니다. 주로 param1은 캐니 엣지 검출기(Canny edge detector)의 높은 임계값을 의미하고, param2는 원을 검출하기 위한 투표(vote)의 임계값입니다.

  3. 조명을 녹색으로 바꾼 것이 잘 작동하지 않는다면, 다른 색상 공간으로의 변환을 시도해 볼 수 있습니다. 예를 들어, HSV 색상 공간으로 변환하여 특정 색상 범위에 해당하는 픽셀만을 가지고 원을 찾는 방법 등이 있습니다.

또한, OpenCVSharp 2.0 버전을 사용 중이시라면, 라이브러리의 최신 버전에 있는 함수들과 매개변수가 다를 수도 있으니 해당 버전의 문서를 참조하시는 것이 좋습니다.

아래에는 원을 찾는 과정에서 참고할 수 있는 OpenCV 문서 링크와 함께, 원 감지를 위한 전처리와 HoughCircles 함수 사용 예를 드립니다.

이미지 전처리 및 HoughCircles 사용 예:

// 이미지 전처리 예
Cv2.GaussianBlur(a_gray, a_gray, new Size(9, 9), 2, 2);

// 원 찾기
CvSeq<CvCircleSegment> circles = Cv.HoughCircles(
    a_gray, 
    a_Storage, 
    HoughCirclesMethod.Gradient, 
    1.0, // dp - Inverse ratio of the accumulator resolution to the image resolution
    100, // minDist - Minimum distance between the centers of the detected circles
    100, // param1 - Higher threshold of the two passed to the Canny edge detector
    200, // param2 - Accumulator threshold for the circle centers at the detection stage
    0,   // minRadius - Minimum circle radius
    0    // maxRadius - Maximum circle radius
);

// 원 중심과 반지름 출력
foreach(CvCircleSegment circle in circles)
{
    Console.WriteLine($"Center: {circle.Center}, Radius: {circle.Radius}");
}

OpenCV 문서: HoughCircles

정확한 문제 해결을 위해 사용 중인 코드와 이미지의 내용, 그리고 최적화 과정에서 겪는 어려움을 더 자세히 알려주시면, 더 구체적인 도움을 드릴 수 있을 것 같습니다.

참고로 이미지에 대한 설명을 보면 바늘과 실, 보빈이 있는 재봉틀 부분으로 추정되는데, 이 경우 다양한 물리적 요소로 인해 감지가 어려울 수 있으니, 가능한 한 간단한 배경에서 객체를 분리하여 인식하려고 시도하는 것이 좋습니다.

임재범님의 프로필 이미지
임재범

작성한 질문수

질문하기