实用实用模板匹配金字塔
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
1、Opencv模板匹配原理--没有金字塔 (2)
2、模板匹配—使用金字塔 (3)
1)主要函数简介 (3)
2)程序流程 (3)
3、验证和结果 (3)
1)实验环境 (3)
2)实验结果 (3)
Opencv模板匹配
1、Opencv模板匹配原理--没有金字塔
函数:cvMatchTemplate( Source, Target, result, method);
说明:
Source:源图像,一般我们使用灰度图像;
如果source为RGB图像,使用函数cvCvtColor(source,dst,CV_RGB2GRAY)
这里,dst为转换后的灰度图像。
Target:模板图像。
Result:匹配后的矩阵,width = S_width – T_taget + 1 ,height = S_height – T_height +1 使用函数IplImage* result = cvCreateImage( resultSize, IPL_DEPTH_32F, 1 )获得。
Method:
CV_TM_SQDIFF:
CV_TM_SQDIFF_NORMED
CV_TM_CCORR
CV_TM_CCORR_NORMED
CV_TM_CCOEFF
CV_TM_CCOEFF_NORMED
一般的,使用CV_TM_CCORR_NORMED,存在的问题是没有使用去均值,可能对亮度变化比较敏感。
程序流程:
读入模板和源图像→建立result图像→模板匹配→使用cvMinMaxLoc找到最大(最小)值→输出结果
2、模板匹配—使用金字塔
1)主要函数简介
cvPyrDown( src,dst,filter )
src:源图像,尺寸为width×height
dst:经过一次下采样得到的图像,尺寸为width/2 ×height/2
filter:卷积滤波器,目前仅支持CV_GAUSSIAN_5×5
cvSetImageROI( image,rect )
image:源图像,经过这个函数后,图像大小变为rect(长方形)
rect:(x,y,width,height)(x,y)为长方形的左上角坐标,width,height为长方形的宽和高。
2)程序流程
读入模板和源图像→cypyrdown(假设只有一次)得到源图像和模板下采样图像→设置这里的匹配result图像→模板匹配→使用cvMinMaxLoc找到最大值→以这个最大值为中心(x1,y1),将源图像裁剪为width = W_template +7 ,height = H_template+7图像,rect左上角坐标为X2=x1 - W_template/2 -3 Y2=y1 - H_template/2 -3→再次建立result1图像→模板匹配→使用cvMinMaxLoc找到最大值
3、验证和结果
1)实验环境
Core i5 2410M thinkpad x220主机
Ubuntu10.04 –gcc
源图像大小360×360,模板大小140×140
采用一级金字塔
验证方法:源图像S、模板T,分别采用加噪声和更改亮度
2
模板匹配程序耗时约10ms。