广告合作
  • 今日头条

    今日头条

  • 百度一下

    百度一下,你就知道

  • 新浪网

    新浪网 - 提供新闻线索,重大新闻爆料

  • 搜狐

    搜狐

  • 豆瓣

    豆瓣

  • 百度贴吧

    百度贴吧——全球领先的中文社区

  • 首页 尚未审核订阅工具 订阅

    视觉图像:模板匹配二

    来源:网络收集  点击:  时间:2024-05-22
    【导读】:
    绪:模板匹配是在一幅图像中寻找与另一幅模板图像最匹配(相似)部分的技术;最常见的模板匹配方法:(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本经验以归一化相关系数匹配方法为例,进行编写程序;方法/步骤1/7分步阅读

    相似性度量:归一化相关系数匹配法:

    其公式如下所示:

    进行变换得;

    其中,I为待匹配图像;M为匹配图像;

    m和n分别为匹配图像的宽度和长度;

    N=m×n;

    r的值域范围在,值为1.0表示待匹配图像和匹配图像完全匹配

    2/7

    代码编写:

    先把公式中各分量的计算公式写成函数,总共有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;

    }

    }

    return m_sum;

    }

    3/7

    //∑∑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;

    m_sum = p_data_1 * p_data_1;

    }

    }

    return m_sum;

    }

    4/7

    //∑∑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;

    }

    }

    return m_sum;

    }

    5/7

    //∑∑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;

    m_sum = temp_data * temp_data;

    }

    }

    return m_sum;

    }

    6/7

    //∑∑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 * p_data_2;

    }

    }

    return m_sum;

    }

    7/7

    匹配结果值进行保存,

    程序如下:

    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;jreal_width;j++)

    {

    for (int i=0;ireal_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 = fenzi/fenmu;

    }

    }

    return dist_img;

    }

    模板匹配归一化相关系数相似度测量匹配编程
    本文关键词:

    版权声明:

    1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。

    2、本站仅提供信息发布平台,不承担相关法律责任。

    3、若侵犯您的版权或隐私,请联系本站管理员删除。

    4、文章链接:http://www.1haoku.cn/art_827574.html

    相关资讯

    ©2019-2020 http://www.1haoku.cn/ 国ICP备20009186号05-05 12:50:23  耗时:0.025
    0.025s