直方图匹配-Opencv种cvCalcBackProject的理解

OpenCV每日函数 直方图相关(1) 直方图均衡化是一种简单有效的图像增强技术,通过改变图像的直方图来改变图像中各像素的灰度,主要用于增强动态范围偏小的图像的对比度。原始图像由于其灰度分布可能集中在较窄的区间,造成图像不够清晰。...... 阅读详情
 

转自:http://blog.163.com/chenliangren@126/blog/static/168305659201071711434658/

示例可看本博客:http://blog.163.com/chenliangren@126/blog/static/168305659201072761518425/

另外,可看http://wenku.baidu.com/view/ff8503da50e2524de5187e99.html([译]Learning OpenCV——TemplateMatching )了解更详细的资料。

直方图的对比


    OpenCv提供了5种对比直方图的方式:CORREL(相关)、CHISQR(卡方)、INTERSECT(相交)、BHATTACHARYYA、EMD(最小工作距离),其中CHISQR速度最快,EMD速度最慢且有诸多限制,但是EMD的效果最好。世界总是充满了矛盾,而我们的工作就是化解矛盾(  需要注意的是:EMD方式要求先将直方图转换成矩阵:)

对比方法:对于直方图的相关和相交对比,结果值越大(即亮度较高)的地方表示匹配程度越高;
对于直方图的卡方、Bhattacharyya、EMD对比,结果值越小(即越黑暗)的地方表示匹配程度越高。

 

直方图的反向投影

CalcBackProject

计算反向投影

void cvCalcBackProject( IplImage** image, CvArr* back_project, const CvHistogram* hist );

image

输入图像 (也可以传递 CvMat** ).

back_project

反向投影图像,与输入图像具有同样类型.

hist

直方图

函数 cvCalcBackProject 计算直方图的反向投影. 对于所有输入的单通道图像同一位置的象素数组,该函数根据相应的象素数组(RGB),放置其对应的直方块的值到输出图像中。用统计学术语,输出图像象素点的值是观测数组在某个分布(直方图)下的概率。 例如,为了发现图像中的红色目标,可以这么做:

1 对红色物体计算色调直方图,假设图像仅仅包含该物体。则直方图有可能有极值,对应着红颜色。

2 对将要搜索目标的输入图像,使用直方图计算其色调平面的反向投影,然后对图像做阈值操作。

3 在产生的图像中发现连通部分,然后使用某种附加准则选择正确的部分,比如最大的连通部分。

这是 Camshift 彩色目标跟踪器中的一个逼进算法,除了第三步,CAMSHIFT 算法使用了上一次目标位置来定位反向投影中的目标。

(注:对cvCalcBackProject的说明引用自http://www.opencv.org.cn/index.php/Cv%E5%9B%BE%E5%83%8F%E5%A4%84%E7%90%86#CompareHist

)


1.反向投影的作用是什么?
    反向投影用于在输入图像(通常较大)中查找特定图像(通常较小或者仅1个像素,以下将其称为模板图像)最匹配的点或者区域,也就是定位模板图像出现在输入图像的位置。
2.反向投影如何查找(工作)?
    查找的方式就是不断的在输入图像中切割跟模板图像大小一致的图像块,并用直方图对比的方式与模板图像进行比较。

假设我们有一张100x100的输入图像,有一张10x10的模板图像,查找的过程是这样的:
(1)从输入图像的左上角(0,0)开始,切割一块(0,0)至(10,10)的临时图像;
(2)生成临时图像的直方图;
(3)用临时图像的直方图和模板图像的直方图对比,对比结果记为c;
(4)直方图对比结果c,就是结果图像(0,0)处的像素值;
(5)切割输入图像从(0,1)至(10,11)的临时图像,对比直方图,并记录到结果图像;
(6)重复(1)~(5)步直到输入图像的右下角。

3.反向投影的结果是什么?
    反向投影的结果包含了:以每个输入图像像素点为起点的直方图对比结果。可以把它看成是一个二维的浮点型数组,二维矩阵,或者单通道的浮点型图像。
4.特殊情况怎么样?
    如果输入图像和模板图像一样大,那么反向投影相当于直方图对比。如果输入图像比模板图像还小,直接罢工~~。
5.使用时有什么要注意的地方?
    需要注意的地方比较多,我们对照反向投影函数来说:
    (void cvCalcBackProjectPatch
        IplImage** image,   /*输入图像:是一个单通道图像数组,而非实际图像*/
        CvArr* dst,         /*输出结果:是一个单通道32位浮点图像,它的宽度为W-w+1,高度为H-h+1,这里的W和H是输入图像的宽度和高度,w和h是模板图像的宽度和高度*/
        CvSize patch_size,  /*模板图像的大小:宽度和高度*/
        CvHistogram* hist,  /*模板图像的直方图:直方图的维数和输入图像的个数相同,并且次序要一致;例如:输入图像包含色调和饱和度,那么直方图的第0维是色调,第1维是饱和度*/
        int method,         /*对比方式:跟直方图对比中的方式类似,可以是:CORREL(相关)、CHISQR(卡方)、INTERSECT(相交)、BHATTACHARYYA*/
        float factor        /*归一化因子,一般都设置成1,否则很可能会出错;中文、英文以及各路转载的文档都错了,这个参数的实际类型是double,而非float,我看了源代码才搞定这个地方*/
    );
    还有最需要注意的地方:这个函数的执行效率非常的低,在使用之前尤其需要注意图像的大小,直方图的维数,对比方式。如果说对比单个直方图对现在的电脑来说是清风拂面,那么反向投影是狂风海啸。对于1010x1010的RGB输入图像,10x10的模板图像,需要生成1百万次3维直方图,对比1百万次3维直方图。

(注:对void cvCalcBackProjectPatch的使用引用自http://www.cnblogs.com/xrwang/archive/2010/02/04/HowToUseHistogram.html)

【opencv学习笔记 14 直方图的反向投影】calcBackProject()函数的使用 直方图的反向投影 """ 直方图的反向投影 我的理解就是给一个sample 然后获取它的图像直方图 然后使用这个直方图在target里面寻找相似的特征 """ import cv2 as cv from matplotlib import pyplot as plt def back_projection_demo(): # 读取图片 sample = cv.imread("imgsample.jpg") target = cv.imread("img.jpg") # 转换为HSV格式 roi_hsv = cv.cvtColor(sample, cv.C 立即下载

相关推荐

[特殊字符] 智能补货(AI-driven Replenishment)完整实施方案

补货量=预测需求+安全库存−当前库存补货量 = 预测需求 + 安全库存 - 当前库存补货量=预测需求+安全库存−当前库存。:基于 LSTM/Transformer 预测未来 30/60/90 天的销量。

nbsaas-boot基于Request-Response的企业级快速开发框架 967

【45】【OpenCv】直方图操作 反向投影之基础的反向投影 cv::calcBackProject()

直方图操作之反向投影操作 cv::calcBackProject()

sinat_41752325的博客 810

代码生成 | 安时积分法模型搭建

安时积分法是电池电量计量最基础的方法,今天我们用simulink建模的方式做一个安时积分模型,从而更好地理解安时积分的思想也掌握建模的基础操 ​新建文件 打开MATLAB启动simulink新建一个模型文件 定义变量 和手写代码一样,先定义几个后面要用到的变量,在simulink建模时新建变量用Data Store Memory模块。双击填入要定义的变量名,然后在signal attributes赋初值 如此方法新建四个变量current(电流)初值1000mA、tatol_cap(总容量

ningvay的博客 1万+

OpenCV3学习(8.2)直方图相似度比较compareHist函数与EMD距离

对输入的两张图像进行直方图均衡化及直方图计算步骤后,可以对两个图像的直方图进行对比,两张图像的直方图反映了该图像像素的分布情况,可以利用图像的直方图,来分析两张图像的关系。 如果我们有两张图像,并且这两张图像的直方图一样,或者有极高的相似度,那么在一定程度上,我们可以认为这两幅图是一样的,这就是直方图比较的应用之一。 直方图比较原理 要比较两个...

知识搬运工的博客 1万+

浙政钉H5应用上架实战:从环境配置到发布避坑指南

本文详细解析浙政钉H5应用上架全流程,从环境配置到发布避坑指南。重点介绍Vue 2.6 + Node 14.21.3的稳定开发环境搭建、项目结构规范及常见报错解决方案,帮助开发者高效完成浙政钉H5应用上架流程。

weixin_27943395的博客 285

铭飞MCMS源码部署

文章目录前言一、下载铭飞源码二、部署源码1.使用IDEA打开源码2.配置tomcat环境2.1下载tomcat并测试是否可以成功启动(此处不赘述)2.2在IDEA中安装tomcat环境并配置3.添加数据库,并配置3.1新建数据库3.2 导入sql配置三、启动测试 前言 铭飞MCMS基于IDEA、tomcat和mysql的环境搭建。 提示:以下是本篇文章正文内容,下面案例可供参考 一、下载铭飞源码 gitee:https://gitee.com/mingSoft/MCMS/releases(各种版本按需下

MARS_ZORO的博客 4062

Opencv中calcBackProject使用介绍

opencv使用手册

ssw09141324的专栏 526

深入解析Lora SX1268:从基础配置到高级应用

本文深入解析了LoRa SX1268芯片从基础配置到高级应用的全过程。详细介绍了LoRa与FSK模式选择、核心参数(BW、SF、CR、LDRO)的配置策略、数据帧结构、缓冲区管理以及CAD模式等关键概念,旨在帮助开发者充分发挥SX1268在远距离、低功耗物联网通信中的潜力,并提供实用的调试技巧。

weixin_29168393的博客 116

如何使用 OpenCV 函数cv::calcBackProject计算反向投影

对于稍微复杂一点的东西(使用 HS 直方图和 FloodFill 来定义皮肤区域的蒙版),你可以查看。“{@input |Back_Projection_Theory0.jpg|输入图像}”混合通道(&hsv, 1,&hue, 1,ch, 1 );(), hist, 1, &histSize, 范围,(), hist, 1, &histSize, 范围,色相范围[] = { 0, 180 };色相范围[] = { 0, 180 };* 范围[] = { 色调范围 };* 范围[] = { 色调范围 };

ljygood2的博客 309

基于Python的FAO农业数据高效爬取与分析实战:从Scrapy到异步爬虫的进阶之路

本文将详细介绍如何使用Python最新技术爬取联合国粮农组织(FAO)的农业数据,涵盖从基础爬虫到高级异步爬虫的完整实现过程。文章包含5000余字的技术解析,提供完整的代码示例,并探讨数据处理与存储的最佳实践。

2201_76125261的博客 240

安卓手机老版本微信无法登录?无需root 一招教你如何搞定!旧版本照样登录,微信7.0亲测有效

微信我试了清缓存、用不同的版本、甚至关网登录都不行。于是我研究了一下背后的原理,发现这不仅是个技巧,还是微信设计的一点“疏忽”——**只要有方法,旧版本照样能用**。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1万+

直方图匹配和 cvCalcBackProject理解(转)

OpenCv提供了5种对比直方图的方式:CORREL(相关)、CHISQR(卡方)、INTERSECT(相交)、BHATTACHARYYA、EMD(最小工作距离),其中CHISQR速度最快,EMD速度最慢且有诸多限制,但是EMD的效果最好。世界总是充满了矛盾,而我们的工作就是化解矛盾(  需要注意的是:EMD方式要求先将直方图转换成矩阵:) 对比方法:对于直方图的相关和相交对比,结果值越大(

xiaoliu1204的专栏 656

开源项目-智能算法中台管理系统

智能算法中台管理系统,系统主要有样本中心,算法中心,模型中心等模块

u010479989的博客 2997

CamShift算法,OpenCV实现1--Back Projection

转载地址:http://blog.youkuaiyun.com/houdy/article/details/175739 CamShift算法,即"Continuously Apative Mean-Shift"算法,是一种运动跟踪算法。它主要通过视频图像中运动物体的颜色信息来达到跟踪的目的。我把这个算法分解成三个部分,便于理解: 1) Back Projection计算 2) Mean Shift算法

机器视觉之家 986

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

OpenCV学习(二十二) :反向投影:calcBackProject(),mixChannels()

OpenCV学习(二十二) :反向投影:calcHist(),minMaxLoc(),compareHist() 参考博客: 反向投影backproject的直观理解 opencv 反向投影 颜色直方图的计算、显示、处理、对比及反向投影 一、概述 1、官方解释:反向投影是一种记录给定图像中的像素点如何适应直方图模型像素分布的方式。简单的讲, 1)就是首先计算某一特征的直方图模型;(特征可以为色调+...

Leon_Chen的博客 1099

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

深入理解calcBackProject

图像的反向投影图是用输入图像的某一位置上像素值(多维或灰度)对应在直方图的一个bin上的值来代替该像素值,所以得到的反向投影图是单通的。用统计学术语,输出图像象素点的值是观测数组在某个分布(直方图)下的概率。还是以例子说明 (1)例如灰度图像如下 Image=0 1 2 34 5 6 78 9 10 118 9 14 15(2)该灰

jieyan_lu的博客 1507

python版opencv函数学习笔记-cv.calcBackProject()直方图反向投影粗糙的直观理解

python版opencv函数学习笔记-cv.calcBackProject()直方图反向投影粗糙的直观理解

weixin_54998572的博客 873

【opencv学习笔记】027之直方图反向投影 - calcBackProject函数详解

一、前言 在学习直方图反向投影之前,如果你对直方图的概念,直方图均衡化,直方图计算等直方图相关的概念比较模糊,建议先了解一下 1.直方图概念及直方图均衡化 https://blog.youkuaiyun.com/shuiyixin/article/details/80001756 2.直方图计算 https://blog.youkuaiyun.com/shuiyixi...

水亦心的博客 9905

cvCalcBackProject() 直方图反向投影匹配

具体原理不太懂,就是在一张图转换为直方图在另一张图上进行匹配? 测试图:              程序: #include #include #include #include using namespace std; int main() { IplImage *img_in = cvLoadImage("test01.jpg"); IplImage

小狗爱晴天 709

Opencv中的直方图(1)计算反向投影直方图函数calcBackProject()的使用

计算直方图的反向投影。

jndingxin的专栏 1475

Opencv学习笔记(十)直方图反向投影calcBackProject()

原理: 一般地,我们把图像的灰度图分成若干个等级区间,计算图像像素的灰度值所在各个区间对应的像素值,就能够得到我们的图像直方图。 而图像直方图的反向投影矩阵正是根据这些像素值所构成的矩阵。 具体可参考:反向投影矩阵计算方法 加入我们得到的反向投影矩阵如下: back_Projection= 4    4    4    4 4 &nbsp...

Rosen的博客 5176

OpenCV学习二十五:calcBackProject 直方图反射函数

如果一幅图像的区域中显示的是一种结构纹理或者一个独特的物体,那么这个区域的直方图可以看作一个概率函数,他给的是某个像素属于该纹理或物体的概率。所谓反向投影就是首先计算某一特征的直方图模型,然后使用模型去寻找测试图像中存在的该特征。 void cv::calcBackProject  ( const Mat * images,  int nimages, const int * channels...

Thomas会写字 1752

直方图的反向投影的原理详解及OpenCV下的示例源码

直方图的反向投影的原理详解及OpenCV下的示例源码

昊虹AI笔记 2126

【opencv450 Image Processing】Back Projection反向投影

反向投影(BackProjection) - 阳光守望者 - 博客园 (cnblogs.com) Goal 在本教程中,您将学习: 什么是反投影以及它为什么有用 如何使用 OpenCV 函数 cv::calcBackProject 计算反投影 如何使用 OpenCV 函数 cv::mixChannels 混合图像的不同通道 Theory What is Back Projection? 反向投影Back Projection是一种记录给定图像的像素与直方图模型中像素分布的匹配程度的方法。

cxyhjl的博客 1620

《opencv实用探索·十七》calcBackProject直方图反向投影

反向投影中的“反向”指的是从直方图值到反向投影矩阵映射的过程。通过反向投影,原始的图像被简化了,而这个简化的过程实际上就是提取出图像的某个特征。所以我们就可以用这个特征来对比两幅图,如果两幅图的反向投影矩阵相似或相同,那么我们就可以判定这两幅图这个特征是相同的。像素值范围是0-15,在直方图中如果把bin(像素值范围)划分为4份,那第一份到第四份对应的像素值范围为[0, 3],[4, 7],[8, 11],[12, 15]。这个反向投影图像的每个像素值表示输入图像该位置的像素值与目标对象直方图的相似程度。

cs1395293598的博客 840
上一篇: 数字图像处理理论课件(清华大学计算机科学与技术系)
下一篇: 关于图像拼接论文资料
SevenColorFish
博客等级 码龄22年 53粉丝 8原创
评论 13
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值