2011-06-12 6 views
15

모양 감지를위한 작은 응용 프로그램을 작성하고 있습니다. 첫 번째로해야 할 일은 이미지에서 가장 중요한 모양을 찾는 것입니다. 나는 그레이 스케일, thresholding 및 가장자리 감지로 이미지를 변환하는 것을 포함하여 몇몇 전처리에서 시작했다. 당신은 주요 형태가 보이는 볼 수 전에 이러한 작업 후 이미지가 그래서형상 감지 - OpenCV를 사용한 등고선 근사법

enter image description here

enter image description here

전에

아래에 제시된다 (그러나 그것은 흩어져 조금이다) 그리고 약간의 소음 (작은 나무 등)도있다. 내가해야 할 일은 어떻게 든 가장 중요한 모양 (가장 큰 것) 만 추출하는 것입니다.이 경우에는 타워입니다. 내가하고 싶은 것은 opencv에서 등고선 찾기 기능을 사용하고 어떻게 든 다각형과 관련된 근접한 부분을 발견하는 것입니다. 그렇다면 나는 어떻게 든 countours의 면적을 계산하고 가장 큰 것을 선택합니다. 지금까지 내가 (단지)를 사용하여 윤곽을 찾기 위해 manged했던

cvFindContours(crated,g_storage,&contours); 

내가 그러나 나는이 함수의 결과에 대한 모든 유용한 정보를 얻을 수없는 생각하는

cvApproxPoly 

기능이 있음을 알고 . 컨투어 영역을 계산하거나 컨투어를 다각형으로 근사 할 수 있는지 누군가가 말해 줄 수 있습니까? 어쩌면 가장 중요한 모양 만 추출하는 것이 더 좋은 생각일까요?

답변

5

주요 문제는 타워의 등고선이 흩어져 있다는 것입니다. 그 작은 조각들로부터 전체 윤곽을 재현하는 것은 어려울 것입니다. 당신의 에지 검출 단계 (cvAdaptiveThreshold 시도를) 최적화, 또는 당신은 당신의 윤곽이 후 한 조각에 다른 접근 방식 (object segmentation 같은 아마 뭔가)

를 사용하여, 당신은 같은 면적을 확인할 수 있습니다

CvSeq* convex_hull=cvConvexHull2(contour, storage, CV_CLOCKWISE, 2); 
CvSeq* quad=cvApproxPoly(convex_hull, sizeof(CvContour), storage, CV_POLY_APPROX_DP, cvContourPerimeter(contour)*0.02, 0); 
float size=fabs(cvContourArea(quad,CV_WHOLE_SEQ,0)); 

당신 것 매개 변수를 조정해야합니다. 직사각형을 탐지하는 데 사용되었습니다.

8

여기서 가장자리 감지를 수행 할 필요가 없습니다. 바이너리 이미지에 대한 임계 값을 설정 한 다음 blob (cvFindContours)을 찾습니다. 반환 된 각 CvSeq에 대해 cvContourArea를 사용하여 해당 영역을 찾을 수 있습니다.

2

"윤곽 노이즈"(경우에 따라 확장)를 억제하기 위해 형태 학적 작업을 사용할 수 있습니다. 그러나 형태학 작업의 유용성은 현재 작업에 달려 있음을 기억해야합니다. 예를 들어 서로 가깝게 배치 된 두 개의 객체가있는 경우 확장은 객체에서 하나의 객체를 수행 할 수 있습니다.

6

당신은 항상 제어 배경이있는 경우 (@damian으로도 제안), I는 다음과 같이 갈 것이다 :

  1. 이진화, 즉, 같은 배경 = 0과 같은 이미지를 생성 오브젝트 영역 = 1 (또는 255). 그 후에 이미지에 여러 개의 흰색 영역이 생깁니다. 이를 수행하는 방법은 여러 가지가 있지만 배경이 제어되는 경우 고정 임계 값을 사용할 수 있습니다. 여기서는 객체 내부의 노이즈를 제거했습니다.이진 이미지에서는 객체를 부드럽게하기 위해 항상 형태학적인 열기/닫기를 사용할 수 있습니다.
  2. cvFindContours을 사용하면 모든 객체를 쉽게 찾을 수 있습니다.
  3. cvFloodFill을 사용하여 작은 윤곽선을 배경색으로 채 웁니다.
+0

이진화 과정의 약어. 좋은 임계 값을 찾는 것은 항상 어렵습니다. 저는 항상 히스토그램을 계산하고 "낮은 점수"를 찾습니다. 여기에는 일반적으로 기본 임계 값이 있습니다. JPEG를 사용하는 경우이 방법이 효과가 없을 수 있습니다. –