一:基本原理

NCC是一种基于统计学计算两组样本数据相关性的算法,其取值范围为[-1, 1]之间,而对图像来说,每个像素点都可以看出是RGB数值,这样整幅图像就可以看成是一个样本数据的集合,如果它有一个子集与另外一个样本数据相互匹配则它的ncc值为1,表示相关性很高,如果是-1则表示完全不相关,基于这个原理,实现图像基于模板匹配识别算法。

图像匹配指在已知目标基准图的子图集合中,寻找与实时图像最相似的子图,以达到目标识别与定位目的的图像技术。主要方法有:基于图像灰度相关方法、基于图像特征方法、基于神经网络相关的人工智能方法(还在完善中)。

基于图像灰度的匹配算法简单,匹配准确度高,主要用空间域的一维或二维滑动模版进行图像匹配,不同的算法区别主要体现在模版及相关准则的选择方面,但计算量大,不利于实时处理,对灰度变化、旋转、形变以及遮挡等比较敏感;

基于图像特征的方法计算量相对较小,对灰度变化、形变及遮挡有较好的适应性,通过在原始图中提取点、线、区域等显著特征作为匹配基元,进而用于特征匹配,但是匹配精度不高。
通常又把基于灰度的匹配算法,称作相关匹配算法。相关匹配算法又分为两类:一类强调景物之间的差别程度如平法差法(SD)和平均绝对差值法(MAD)等;另一类强调景物之间的相似程度,主要算法又分成两类,一是积相关匹配法,二是相关系数法。

今天我们就来说说归一化互相关系数法(NCC)。

g的灰度均值
图像Sx,y的灰度均值

相关系数满足:

在[-1,1]绝对尺度范围之间衡量两者的相似性。相关系数刻画了两者之间的近似程度的线性描述。一般说来,越接近于1,两者越近似的有线性关系。

2. C++代码实现

(1)      获取模板像素并计算均值与标准方差、像素与均值diff数据样本

(2)      根据模板大小,在目标图像上从左到右,从上到下移动窗口,计

算每移动一个像素之后窗口内像素与模板像素的ncc值,与阈值比较,大于

阈值则记录位置

(3)      根据得到位置信息,使用红色矩形标记出模板匹配识别结果。

(4)      UI显示结果

int main() {Mat image2 = imread("C:\\Users\\Administrator\\Desktop\\t2\\temp.png", IMREAD_GRAYSCALE);Mat image1 = imread("C:\\Users\\Administrator\\Desktop\\t2\\temp.png", IMREAD_GRAYSCALE);int overlap = image2.cols;float pearsonCorrelationCoefficientMax = 0;int overlapMaxCorrelationCoefficient = 0;//for (int overlap = 350; overlap < image2.cols; overlap += 10){//****************************************//Mat imageTemp = image2;//(Rect(0, 0, overlap, image1.rows));long double tempTotalcount = 0;long double tempTotalPixel = 0;for (int i = 0; i < overlap; i++){for (int j = 0; j < image1.rows; j++){tempTotalcount += 1;//cout << i<<","<<j<<":"<<int(imageTemp.at<uchar>(j,i)) << ",";tempTotalPixel += float(imageTemp.at<uchar>(j, i));}cout << endl;}float tempAvg = tempTotalPixel / tempTotalcount;//灰度平均值//**************************************//   long double tempSubstract = 0;for (int i = 0; i < overlap; i++){for (int j = 0; j < image1.rows; j++){long double tempSquare = (long double(imageTemp.at<uchar>(j, i)) - tempAvg)* (long double(imageTemp.at<uchar>(j, i)) - tempAvg);tempSubstract = tempSubstract + tempSquare;}cout << endl;}float tempVariance = sqrt(tempSubstract / tempTotalcount);//灰度标准差//***********************************************//Mat imageBase = image1(Rect(image1.cols - overlap, 0, overlap, image1.rows));int baseTotalcount = 0;int baseTotalPixel = 0;for (int i = 0; i < overlap; i++){for (int j = 0; j < image1.rows; j++){baseTotalcount += 1;//cout << i<<","<<j<<":"<<int(imageTemp.at<uchar>(j,i)) << ",";baseTotalPixel += float(imageBase.at<uchar>(j, i));}cout << endl;}float baseAvg = baseTotalPixel / baseTotalcount;//*****************************************// long double baseSubstract = 0;for (int i = 0; i < overlap; i++){for (int j = 0; j < image1.rows; j++){long double baseSquare = (long double(imageBase.at<uchar>(j, i)) - baseAvg)* (long double(imageBase.at<uchar>(j, i)) - baseAvg);baseSubstract = baseSubstract + baseSquare;}cout << endl;}float baseVariance = sqrt(baseSubstract / baseTotalcount);//***************************************//long double dotMul = 0;for (int i = 0; i < overlap; i++){for (int j = 0; j < image1.rows; j++){dotMul += abs((long double(imageBase.at<uchar>(j, i)) - baseAvg)*(long double(imageTemp.at<uchar>(j, i)) - tempAvg));}cout << endl;}float dotMulAvg = dotMul / (baseTotalcount);float pearsonCorrelationCoefficient = dotMulAvg / (baseVariance*tempVariance);if (pearsonCorrelationCoefficientMax < pearsonCorrelationCoefficient){pearsonCorrelationCoefficientMax = pearsonCorrelationCoefficient;overlapMaxCorrelationCoefficient = overlap;}}cout << "最大相关系数" << pearsonCorrelationCoefficientMax << endl;cout << "最大相关系数时重叠区域" << overlapMaxCorrelationCoefficient << endl;imshow("", image1);waitKey(0);
}

图像相关度描述 - 归一化互相关(NCC)相关推荐

  1. 归一化互相关(NCC)计算视差图

    文章目录 一.NCC 1.1 NCC原理 1.2 实现步骤 二.代码实现 2.1 相关代码 2.2 运行结果 2.2.1 修改窗口大小的影响 2.2.1.1 窗口大小win=3时 2.2.1.2 窗口 ...

  2. NCC归一化互相关(详解)

    NCC归一化互相关(详解) NCC是什么 NCC(Normalized cross-correlation)是模板匹配中较为常见的互相关计算方法. 来描述两个同维向量,窗口或样本之间的相关性.其取值范 ...

  3. 图像匹配—NCC算法,即归一化互相关匹配

    一.NCC的基础概念 NCC(normalized cross correlation)算法,归一化互相关匹配法,是基于图像灰度信息的匹配方法. 二.NCC算法定义为: 三.代码(利用NCC的密集匹配 ...

  4. 图像配准中的归一化互相关匹配算法

    原文地址:http://blog.csdn.net/fengbingchun/article/details/5857810 在用Harris算子对图像进行角点提取后,两幅图像得到的角点个数不一定相等 ...

  5. 归一化互相关(NCC)及其部分应用场景

    1,如何理解归一化互相关(NCC) 2,部分应用场景 基于灰度的匹配一般被称为模版匹配,直接以灰度进行匹配效果不好,对光照很敏感ÿ

  6. 归一化相关系数NCC

    文章目录 1.原理 2.实验 2.1 图像源 2.2 实现 2.2.1 代码 2.2.2 运行结果 2.3 参数wid改变时 3.小结(只分析NCC法) 4.问题及解决方法 1.原理 左图为图像I1{ ...

  7. 零均值归一化互相关(Zero Mean Normalized Cross-Correlation)

    零均值归一化互相关( ZNCC) 是比较两个灰度图像时得到的差异的度量. 假设在固定位置有一个固定的监控摄像头,它一直在拍照,但大多数时候房间是空的,所以相当多的图像是没有意义的,他们只会浪费空间.所 ...

  8. 图像特征检测描述(一):SIFT、SURF、ORB、HOG、LBP特征的原理概述及OpenCV代码实现

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 什么叫特征检测?就是检测图像中目标的特征呗,所谓 ...

  9. 【深度学习】实验6布置:图像自然语言描述生成(让计算机“看图说话”)

    DL_class 学堂在线<深度学习>实验课代码+报告(其中实验1和实验6有配套PPT),授课老师为胡晓林老师.课程链接:https://www.xuetangx.com/training ...

最新文章

  1. nginx 配置两个域名
  2. 演练 动态数组存储学生对象 并且实现遍历 0119
  3. 日本python教材_自学python:完整入门python书单!
  4. Oracle轻量级客户端下载,Oracle轻量级客户端使用,Oracle轻量级客户端配置,本地同时安装服务器端和客户端,并实现plsql developer连接
  5. 腾达ap设置说明_腾达路由器怎么设置AP模式?
  6. 4.35V锂电充电IC
  7. 自动驾驶轨迹规划--算法综述
  8. python中argument什么意思_Python中parameters与argument区别
  9. ppt如何替换其他mo ban_吴军老师《P荆斩棘, P沙捡金,T纲挈领 :职场PPT制作与呈现技巧》课程大纲...
  10. 分子生物学总结完整版
  11. Scrapy框架爬虫项目:京东商城笔记本电脑信息爬取
  12. 神了!用Python预测世界杯决赛,发现准确率还挺高!
  13. (二)DDL操作数据库
  14. linux多进程的日志记录实现,Linux守护进程的日志实现
  15. SpringMVC的相关知识
  16. 分省增值税和营业税数据(2009-2019年)
  17. [LAMPP] 低成本搭建一个个人PHP经营性网站 (StepByStep)
  18. 推荐系列论文九-Deep Image Ctr Model
  19. 鸿蒙系统应用安装包,鸿蒙os2.0系统安装包
  20. youknowiwill用计算机数字,高考英语作文高级表达

热门文章

  1. 猎豹浏览器发布2.0版,性能大幅提升
  2. 天河计算机系统内存条,天河一号竟名不副实?
  3. 科海思吸附铜树脂的简介
  4. 什么是配线架?为啥数据中心要使用配线架?
  5. u-boot for tiny210 ver1.0(by liukun321咕唧咕唧)
  6. php报表控件,可以在任何客户端生成报表的PHP报表控件Stimulsoft Reports.Fx
  7. 酶联免疫斑点分析仪,免费试用!
  8. 游戏装备强化java机制,游戏装备强化类问题的数学期望
  9. 中海达ihand30手簿使用说明_中海达Hi-RTK软件(iHand手簿)说明书
  10. 科技风PPT模板百度网盘下载