您现在的位置:首页 > 教案格式 > 正文

OPENCV直方图计算原理及反向投影检测原理(2)

2019-07-13 08:07 网络整理 教案网

sig2=cvCreateMat(numrows,3,CV_32FC1);

for(inth=0;h<h_bins;h++)

{

for(ints=0;s<s_bins;s++)

直方图匹配原理_opencv 直方图匹配_匹配滤波原理

{

floatbin_val=cvQueryHistValue_2D(hist1,h,s);

cvSet2D(sig1,h*s_bins+s,0,cvScalar(bin_val));

cvSet2D(sig1,h*s_bins+s,1,cvScalar(h));

cvSet2D(sig1,h*s_bins+s,2,cvScalar(s));

bin_val=cvQueryHistValue_2D(hist2,h,s);

cvSet2D(sig2,h*s_bins+s,0,cvScalar(bin_val));

cvSet2D(sig2,h*s_bins+s,1,cvScalar(h));

cvSet2D(sig2,h*s_bins+s,2,cvScalar(s));

}

}

floatemd=cvCalcEMD2(sig1,sig2,CV_DIST_L2);

2 基于局部精确直方图匹配的无人机景象匹配导航色彩恒常算法 2 基于局部精确直方图匹配的无人机景象匹配导航色彩恒常算法 虽然 ehm 算法能够快速、精确地进行直方图匹配,使原始图像具有与目标图像几乎完全一样的直方图,但是在景象匹配色彩恒常处理过程中,由于基准图和实时图之间不但具有色彩差异,还不可避免地存在着平移、尺度、旋转等差异,直接采用该方法将会严重影响色彩恒常处理的效果并限制景象匹配系统的定位精度。 基于局部精确直方图匹配的色彩恒常算法,将实时图分成一系列子块图像,利用导航系统预测的位姿信息得到实时图与基准图的粗略对应关系,考虑平移、尺度、旋转等补偿,选取基准图中与实时图子块对应的基准图子块,对每一对实时图子块和基准图子块分别计算其红(r)、绿(g)、蓝(b)色彩直方图,求解其色彩直方图的颜色映射关系,并根据每对图像子块三个颜色通道的直方图颜色映射关系,对实时图子块的三种颜色进行变换。对一幅灰度图像进行灰度变换,使变换后的图像的直方图与另外给定的一幅图像的直方图相匹配(近似相同)。

cvWaitKey(0);

return0;

}

直方图的反向投影

我对于反向投影的理解是通过颜色直方图,检测图片中的某个像素点的颜色是否位于直方图中,若位于则将其加亮(阀值化?),通过对图像的检测,得出结果图像。如果照着我这个理解的话,那么对同一物体的颜色的取样点越多,那么越能更好的找出目标图形(当然,这很可能也会带来一些不需要的点,那么这个方法应该对于对比度较大的图像比较有效……)

换个说法就是在反向投影中,直方图的作用在于提供一个比较标准,即对于要检测的图像来说,需要给它提供一个用于识别出它需要被识别出的部分的直方图。

1.反向投影的作用是什么?

反向投影用于在输入图像(通常较大)中查找特定图像(通常较小或者仅1个像素,以下将其称为模板图像)最匹配的点或者区域直方图匹配原理,也就是定位模板图像出现在输入图像的位置。

2.反向投影如何查找(工作)?

直方图匹配原理_匹配滤波原理_opencv 直方图匹配

查找的方式就是不断的在输入图像中切割跟模板图像大小一致的图像块,并用直方图对比的方式与模板图像进行比较。

假设我们有一张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*/

湄潭茶诗茶词茶赋茶联 本文档由【中文word文档库】提供,转载分发敬请保留此信息。本文档由【中文word文档库】wordwendang 提供,转载分发敬请保留信息。本文档由【中文word文档库】wordwendang 提供,转载分发敬请保留本信息。

);

还有最需要注意的地方:这个函数的执行效率非常的低,在使用之前尤其需要注意图像的大小,直方图的维数,对比方式。如果说对比单个直方图对现在的电脑来说是清风拂面,那么反向投影是狂风海啸。对于1010x1010的RGB输入图像,10x10的模板图像,需要生成1百万次3维直方图,对比1百万次3维直方图。

下面为具体代码: