2013-05-18 4 views
1

이진 이미지에서 원 모양의 질량 중심을 얻고 싶지만, 출력은 더 많은 질량 중심을 제공합니다. 나는 이미지 모멘트에 대해 opencv 웹 튜토리얼 문서의 코드를 사용하고있다. 참고로 저는 C++ API OpenCV를 사용하고 있습니다.하나의 다음 중점이 이미지에서 물체의 중심이됩니까?

그리고 출력은 다음과 같습니다

내가 기대 AQ38S.jpg

이 텍스트 출력은 어쩌면 3 중심 윤곽 3에서를 줄 것이다, 그러나 현실은 7 윤곽 (윤곽 [0], ..., 윤곽 [입니다 6] 참조).

중력은 어느 것입니까? 또는 원 모양의 윤곽선 영역은 어느 것입니까?

그런 다음 코드를 수정하고 일부 윤곽선을 제거합니다 (실제 그림은 노이즈가 많아서 일부 윤곽선, 원 모양을 얻으므로 선과 문자와 같은 다른 윤곽선을 제거해야합니다).

contours.erase() 

는 난 단지 .. (500)

그러나, 이상한 될 출력까지 (100) 사이의 영역의 형상으로부터 중심을 얻으려면

xnDlZ.jpg

도심은 등고선에서 어느 곳으로나 날아가는 것과 같습니다.
그렇다면 여전히 5 개의 윤곽 (윤곽 [0], ..., 윤곽 [4])에서 5 개의 중심이 있습니다.

어떻게해야합니까? 나는 원 모양의 중심을 얻고 싶습니다 (숫자 3 이상). 정말 조언이 필요합니다. 정말 고맙습니다! : D

.. 내 나쁜 영어에 대한 * 죄송합니다

+0

안녕하세요, 아주 단순한 한 모양의 이진 이미지를 만들고 코드를 사용해보세요. 또한, 이것은 쉬운 문제인 것처럼 보이지만 코드를 보지 않고 당신을 도울 수 없습니다 ... 1) 원형 인 모양을 찾고 2) 질량 중심을 찾고 싶습니까? –

+0

@QuentinGeissmann 귀하의 의견을 보내 주셔서 감사합니다 : D 첫 번째 사진은이 [code] (http://docs.opencv.org/doc/tutorials/imgproc/shapedescriptors/moments/moments.html)를 사용하고 있습니다. 두 번째 그림의 경우 코드를 으로 수정했습니다. if (contours [i], false) <100 || contourArea (contours [i], false)> 500) {contours.erase (contours.begin() + i); }'. – lulu

+0

솔직히 말해서, 저는 원 모양의 매스 센터를 찾고 싶습니다. 조언 있니? : D – lulu

답변

0

내가 어떻게 할 것인지 :

  1. 은 (cv::findContours)
  2. 모든 윤곽을 찾기 (및 지점의 벡터에 저장) 사용자 정의 입자 필터를 적용하십시오. 즉, 윤곽선이 유효한지 여부를 알려주는 함수입니다. 당신은

    등의 형태 학적 기능에 대한 결정을 기반으로해야하는 것을해야 할 일
    • 진원도
    • 볼록
    • 화면 비율

시각적 인 증거를 가지고 뭔가 like that에서보세요 : 영역 (cv::contourArea)과 둘레 (cv::arcLength)에서 진원도를 계산할 수 있지만 convexity에는 c 볼록 선체 (cv::convexHull)를 추측. 이 단계는 유효 (예 : 원형 등고선) 만 포함하는 새 벡터가됩니다.

contourArea(contours[i], false) < 100은 좋은 시작이지만 윤곽선이 원인지 여부는 알려주지 않습니다.

그런 다음 새 벡터의 각 요소의 무게 중심을 계산하고 표시 할 수 있습니다. 이해가 되니?

마지막으로 큰 벡터에는 contours.erase()을 사용하지 않습니다. 나는 반복적으로 지우는 것이 CPU에 상당히 부담 스럽다고 생각한다. 대신, 새로운 미리 할당 된 벡터에 좋은 윤곽을 저장합니다. 그러나 이것은 단지 성능에 대한 세부 사항입니다.

+0

늦게 답장을 드려 죄송합니다. 지식을 공유해 주셔서 감사합니다. 정말 유용하고 도움이됩니다. 왜냐하면 제 문제를 실제로 해결하기 때문입니다. 나는 이것을 내 코드에서 테스트했으며 작동한다! 죄송 합니다만 저는 이미지 처리에서 정말로 새로운 것 같습니다. 나는 정말 행복하다! 그래서 고맙습니다. :) – lulu

+0

문제 없습니다, 즐길 :) –