2012-04-27 3 views
2

나는 스캔 한 부품의 모든 가능성을 디렉토리의 이미지로 가져 오는 C 부분 스캐너를 만들고 있습니다. 내 코드는 현재 해당 디렉토리의 모든 이미지를 가져 와서 벡터로 덤프합니다. 그런 다음 모든 이미지에 대한 윤곽 그룹을 생성합니다. 그런 다음 프로그램은 웹캠에서 이미지를 지속적으로 가져 오는 while 루프에 빠지며 해당 이미지도 윤곽을 만듭니다. 나는 부품을 고정하기위한 지그를 설정했기 때문에 방향과 크기는 문제가되지 않지만 기계를 보정하고 싶지 않으므로 템플릿 이미지와 찍은 부품 이미지 사이에 움직임이있을 수 있습니다.이진 패턴 이미지의 두 윤곽을 비교하는 방법은 무엇입니까?

윤곽선을 비교하는 가장 좋은 방법은 무엇입니까? 윤곽선이없는 matchTemplate를 비롯한 여러 메서드를 시도했지만 아래 두 부분을 살펴보면이 두 요소가 서로 매우 가깝다는 것을 알 수 있습니다. 따라서 matchShapes 및 matchTemplate에서 사용하는 방법을 구분할 수 없습니다 그들. 또한 cvMatchShapes를 사용하는 방법을 잘 모르겠습니다. 이미지를 일치하는 모양으로 직접로드하는 것으로 작동하지만 결과가 결정적이지는 않습니다. 윤곽선이가는 길이라고 생각합니다. 비교 단계를 구현하는 방법에 대해서는 확신 할 수 없습니다. 어떤 도움이라도 좋을 것입니다.

현재 템플릿을 볼 수 있습니다 http://www.cryogendesign.com/partDetection.html 거리 이미지 "(윤곽에 모든 픽셀을 최소 유클리드 거리를 할당"

+0

가능한 [OpenCV matching images] (http://stackoverflow.com/questions/8893539/opencv-matching-images) – karlphillip

+0

또는이 http://stackoverflow.com/questions/9444142/comparing-images-for -similarity – karlphillip

답변

1

당신이 준비하는 경우 - 그것 - 스스로 하나의 방법은을 계산 될 수있다 ") 기준으로한다. 참조 http://en.wikipedia.org/wiki/Distance_transform.

이 거리의 이미지를 사용하면 신속하게 모든 윤곽 픽셀에 대한 기준 하나에 새 형상의 평균 거리 (계산할 수, 거리 이미지에서 거리를 얻을). 평균 distance는 적합도를 표시하며 참조 템플릿 집합과 가장 잘 일치하는 것을 찾을 수있게합니다.

부품에 약간의 자유가있는 경우 상황이 조금 더 어려워집니다. 평균 거리를 계산하기 전에 새 윤곽을 참조 용으로 맞춰야합니다. 당신은 적당한 변환 (번역, 회전, 아마도 스케일링)을 적용하고 평균 거리를 최소화 할 매개 변수를 찾아야합니다.

+0

이것이 분명하지 않다면, 저에게 더 많이 물어보십시오 ... –

0

당신은 두 개의 윤곽 사이의 모따기 거리를 계산할 수 있습니다

chamfer

TE 템플릿과 이미지와 x의 가장자리의 집합입니다 것은 비교할 시작 참조의 포인트입니다 두 세트의 가장자리. 따라서 각 x에 대해 다른 값을 얻습니다.

DT는 이미지의 거리 변환입니다. Matlab은 here 알고리즘을 제공합니다.

모따기 거리를 계산하는 방법에 대한 자세한 내용은 here을 참조하십시오.

관련 문제