728x90
반응형

목표

이미지 개체를 찾으려면 Template matching을 사용한다

 

 

  • 사용되는 함수 cv.match Template()
더보기
void matchTemplate 
(
	InputArray image,
	InputArray templ,
	OutputArray result,
	int method,
	InputArray mask = noArray() 
)		

겹친 이미지 영역과 템플릿을 비교한다. 이 함수는 image를 슬라이드하고 지정된 방법을 사용하여 w×h 크기의 겹친 패치를 templ과 비교하고 비교 결과를 결과에 저장한다.

TemplateMatchModes는 사용 가능한 비교 방법에 대한 공식을 설명한다 (I는 이미지, T 템플릿, R 결과, M은 선택적 마스크). 합산(summation)은 템플릿 또는 이미지 패치  (x ′ = 0 ... w−1, y ′ = 0 ... h−1)에 대해 수행된다. 

 

함수가 비교를 마친 후 가장 일치하는 항목은 minMaxLoc 함수를 사용하여 전역 최소값 (TM_SQDIFF 사용시) 또는 최대 값 (TM_CCORR 또는 TM_CCOEFF 사용시)으로 찾을 수 있다. 컬러 이미지의 경우 분자의 템플릿 합산과 분모의 각 합이 모든 채널에 대해 수행되고 각 채널에 대해 별도의 평균 값이 사용된다. 즉, 함수는 컬러 템플릿과 컬러 이미지를 취할 수 있습니다. 결과는 분석하기 더 쉬운 단일 채널 이미지가 된다.

 

image 검색이 실행되는 이미지이기 때문에 8bit 또는 32bit 부동 소수점이어야한다.
templ 검색된 템플릿. 소스 이미지보다 크지 않아야하며 데이터 유형이 동일해야한다.
result Map of comparison results. 단일 채널 32bit 부동 소수점이어야한다.
영상이 W×H이고 templ이 w×h이면 결과는 (W-w + 1) × (H-h + 1)입니다.
method 비교 방법을 지정하는 매개 변수, TemplateMatchModes 내용 참조
mask 선택적 마스크. templ과 크기가 같아야한다. 템플릿과 동일한 수의 채널이 있거나 하나의 채널 만 있어야 모든 템플릿 및 이미지 채널에 사용된다. 데이터 유형이 CV_8U 인 경우 마스크는 이진 마스크로 해석된다.
즉, 마스크가 0이 아닌 요소 만 사용되며 실제 마스크 값과 관계없이 변경되지 않고 유지(
가중치=1)된다.
데이터 파일 CV_32F의 경우 마스크 값이 가중치로 사용된다.

 

 

  • 사용되는 함수cv.minMaxLoc()
더보기
void minMaxLoc
(
	InputArray src,
	double * minVal,
	double * maxVal = 0,
	Point * minLoc = 0,
	Point * maxLoc = 0,
	InputArray mask = noArray() 
)

배열에서 전역 최소값과 최대 값을 찾습니다. minMaxLoc 함수는 최소 및 최대 요소 값과 해당 위치를 찾습니다. 극한값은 전체 array 또는 마스크가 텅빈 array가 아닌 경우 지정된 array 영역에서 검색된다.

이 기능은 다중 채널 배열에서 작동하지 않는다. 모든 채널에서 최소 또는 최대 요소를 찾아야하는 경우 먼저 Mat :: reshape를 사용하여 배열을 단일 채널로 재 해석해야한다. 또는 extractImageCOI, mixChannels 또는 split을 사용하여 특정 채널을 추출 할 수 있다.

 

src 입력 단일 채널 배열.
minVal 반환 된 최소값에 대한 포인터; 필요하지 않은 경우 NULL이 사용됩니다.
maxVal 반환 된 최대값에 대한 포인터; 필요하지 않은 경우 NULL이 사용됩니다.
minLoc 반환 된 최소 위치에 대한 포인터 (2D 경우) 필요하지 않은 경우 NULL이 사용됩니다.
maxLoc 반환 된 최대 위치에 대한 포인터 (2D 경우) 필요하지 않은 경우 NULL이 사용됩니다.
mask 하위 배열을 선택하는 데 사용되는 선택적 마스크입니다.

 

void minMaxLoc
(
	const SparseMat & a,
	double * minVal,
	double * maxVal,
	int * minIdx = 0,
	int * maxIdx = 0 
)	

편의를 위해 제공되는 오버로드 된 멤버 함수이다. 위의 함수와는 어떤 인수를 허용하는지 만 다르다.

a 입력 단일 채널 배열.
minVal 반환 된 최소값에 대한 포인터; 필요하지 않은 경우 NULL이 사용된다.
maxVal 반환 된 최대 값에 대한 포인터; 필요하지 않은 경우 NULL이 사용된다.
minIdx 반환 된 최소 위치에 대한 포인터 (nD 경우) 필요하지 않은 경우 NULL이 사용된다. 
그렇지 않으면 src.dims 요소의 배열을 가리켜 야하며 각 차원에서 최소 요소의 좌표가 순차적으로 저장된다.
maxIdx 반환 된 최대 위치에 대한 포인터 (nD 경우). 필요하지 않은 경우 NULL이 사용된다.

 

 

  • TemplateMatchModes

CV_TM_SQDIFF (각 픽셀의 제곱의 차이)


CV_TM_SQDIFF_NORMED  (CV_TM_SQDIFF / sqrt(각 픽셀의 제곱의 곱))


CV_TM_CCORR (각 픽셀의 곱의 합 (교차 상관))


CV_TM_CCORR_NORMED (CV_TM_CCORR / sqrt(각 픽셀의 제곱의 곱))


CV_TM_CCOEFF (상관계수)


CV_TM_CCOEFF_NORMED (CV_TM_CCOEFF / sqrt(각 픽셀의 제곱의 곱))

728x90
반응형

+ Recent posts