视觉图像:模板匹配二

绪:
模板匹配是在一幅图像中寻找与另一幅模板图像最匹配(相似)部分的技术;
最常见的模板匹配方法:
(1)平方差匹配法 method=TM_SQDIFF
(2)归一化平方差匹配法 method=TM_SQDIFF_NORMED
(3)相关匹配法 method=TM_CCORR
(4)归一化相关匹配法 method=TM_CCORR_NORMED
(5)系数匹配法 method=TM_CCOEFF
(6)归一化相关系数匹配法 method=TM_CCOEFF_NORMED
本经验以归一化相关系数匹配方法为例,进行编写程序;

操作方法

  • 01

    相似性度量:归一化相关系数匹配法: 其公式如下所示: 进行变换得; 其中,I为待匹配图像;M为匹配图像; m和n分别为匹配图像的宽度和长度; N=m×n; r的值域范围在[-1,1],值为1.0表示待匹配图像和匹配图像完全匹配

  • 02

    代码编写: 先把公式中各分量的计算公式写成函数,总共有5个; //∑∑M(i,j) double MFun(Mat _mask_img) { int _width = _mask_img.cols; int _height = _mask_img.rows; double m_sum = 0.f; unsigned char* p_data = (unsigned char*)_mask_img.data; for (int j=0;j<_width;j++)//lie { for (int i=0;i<_height;i++)//hang { m_sum = p_data[i*_width+j]; } } return m_sum; }

  • 03

    //∑∑M(i,j)^2 double M2Fun(Mat _mask_img) { int _width = _mask_img.cols; int _height = _mask_img.rows; double m_sum = 0.f; unsigned char* p_data = (unsigned char*)_mask_img.data; for (int j=0;j<_width;j++) { for (int i=0;i<_height;i++) { double p_data_1 = p_data[i*_width+j]; m_sum = p_data_1 * p_data_1; } } return m_sum; }

  • 04

    //∑∑I(i,j) double IFun(Mat _raw_img,Mat _mask_img,int _u,int _v) { double m_sum; unsigned char* p_data = (unsigned char*)_raw_img.data; int _height = _mask_img.rows; int _width = _mask_img.cols; for (int j=0;j<_width;j++) { for (int i=0;i<_height;i++) { m_sum = p_data[(_u+i)*_width+(j+_v)]; } } return m_sum; }

  • 05

    //∑∑I(i,j)^2 double I2Fun(Mat _raw_img,Mat _mask_img,int _u,int _v) { double m_sum; unsigned char* p_data = (unsigned char*)_raw_img.data; int _height = _mask_img.rows; int _width = _mask_img.cols; for (int j=0;j<_width;j++) { for (int i=0;i<_height;i++) { double temp_data = p_data[(i+_u)*_width+(j+_v)]; m_sum = temp_data * temp_data; } } return m_sum; }

  • 06

    //∑∑IM double IMFun(Mat _raw_img,Mat _mask_img,int _u,int _v) { double m_sum; unsigned char* p_data_1 = (unsigned char*)_raw_img.data; unsigned char* p_data_2 = (unsigned char*)_mask_img.data; int _height = _mask_img.rows; int _width = _mask_img.cols; for (int j=0;j<_width;j++) { for (int i=0;i<_height;i++) { m_sum = p_data_1[(i+_u)*_width+(j+_v)] * p_data_2[i*_width+j]; } } return m_sum; }

  • 07

    匹配结果值进行保存, 程序如下: Mat MaskMatchFun(Mat _raw_img,Mat _mask_img) { int mask_width = _mask_img.cols; int mask_height = _mask_img.rows; int mask_big = mask_width * mask_height;//m*n int raw_width = _raw_img.cols; int raw_height = _raw_img.rows; int real_height = raw_height - mask_height + 1;//l-m+1 int real_width = raw_width - mask_height + 1; double M_Value =  MFun(_mask_img);//m double M2_Value = M2Fun(_mask_img);//m^2 Mat dist_img(real_height,real_width,CV_32FC1); float* p_data = (float*) dist_img.data; for (int j=0;j<real_width;j++) { for (int i=0;i<real_height;i++) { double temp1 = IMFun(_raw_img,_mask_img,i,j); double temp2 = IFun(_raw_img,_mask_img,i,j); double fenzi = mask_big*temp1-temp2*M_Value; double temp3 = I2Fun(_raw_img,_mask_img,i,j); double temp4 = (mask_big*temp3-temp2*temp2)*(mask_big*M2_Value-M_Value*M_Value); double fenmu = sqrt(temp4); p_data[i*real_width+j] = fenzi/fenmu; } } return dist_img; }

(0)

相关推荐

  • 视觉图像:模板匹配一

    绪: 模板匹配是一项在一幅图像中寻找与另一幅模板图像最匹配(相似)部分的技术,模板匹配不是基于直方图的,而是通过在输入图像上滑动图像块,对实际的图像块和输入图像进行匹配的一种匹配方法. 操作方法 01 ...

  • 视觉图像:卷积运算及代码实现

    绪: 图像卷积操作即: 原图像f(x),模板图像g(x), 首先,将模板g(x)在原图像f(x)中移动; 然后,每到一个位置,将f(x)与g(x)的定义域相交的元素进行乘积且求和,得出新的图像点: 遍 ...

  • 视觉图像:高斯模糊一

    绪: 高斯模糊:功能是使图像产生模糊的效果. 高斯模糊Gaussian Blur是图像模糊算法的一种,将正太分布即高斯分布用于图像处理, 本质是一种数据平滑技术. 操作方法 01 高斯模糊的原理: 所 ...

  • ps匹配颜色怎么用?ps匹配颜色在哪里?

    ps匹配颜色怎么用? ps匹配颜色在哪里?ps的这个功能比较简单,但是也比较实用.注意选择照片的时候要选择相近的,不然匹配出来也很难看哦. ps匹配颜色怎么用 01 分别打开两张照片,照片1是你希望能 ...

  • Ecshop系统二次开发教程及流程演示

    一、Ecshop简介: ECShop是Comsenz公司推出的一款B2C独立网店系统,适合企业及个人快速构建个性化网上商店。系统是基于PHP语言及MYSQL数据库构架开发的跨平台开源程序。 ECSho ...

  • 综合布线系统中采用双绞线的原因以及双绞线传输图像的优点

    众所周知,在综合布线工程中双绞线能在很多地方应用来传输信号信息等,比如在工业控制需要中和干扰较大的场所以及远距离传输中都有使用,应用广泛的局域网也是使用了双绞线。之所以能在那么多的地方应用是因为其具有 ...

  • IE浏览器图像大小自动调整怎么启动

    日常使用浏览器中,难免会遇到图像太大或者太小的问题,这样给我们浏览网页时带来一些困扰.其实ie浏览器自带了图像大小匹配调整,我们只需要启动该功能,就可以轻松解决图片大小带来的困扰.下面就跟着小编一起来 ...

  • MindManager2016思维导图怎么从文件插入图像?

    在MindManager2016思维导图中,图像的用途很广泛,可以附加到主题.添加作为新主题(相关文章请参考MindManager2016通过粘贴文本或图像创建主题),也可以作为可自由移动的浮动图像. ...

  • 设计文章:UI视觉设计师突破和独立

    大家好我是雨成,很荣幸本次能在乌鱼说和大家聊聊设计,聊聊艺术.很多人都知道我是一枚专科生且有过些大厂经历,借此机会和大家聊聊在设计艺术上的一些思考,涉及到动效逻辑和目标驱动立.自我规划等一些问题分享, ...