关于我正在做什么的一点介绍...... 出于学术目的,我使用opencv在c ++中创建一个应用程序,用于检测场景中的静态对象。 该应用程序基于背景减法和跟踪的组合方法,并且与放弃对象相关的事件的检测工作正常。 但此刻我遇到了一个无法解决的问题;我必须实现一个有限状态机来检测对象移除事件,包括在后台输入对象之前和之后。 为此,我的上司命令我使用物体的边缘。
现在问题。 在检测到非法停放在道路上的车辆之后,我需要比较各种图像的边缘(在警报时捕获的背景,当前背景,当前帧)以了解车辆的行为(拾取机芯,在后台停留或拾取运动)。 我在有车辆的场景区域(车辆通常具有不同的大小)上进行这些比较,我使用canny算法通过获得二值化的CV_8UC1 cv :: Mat来拉边缘。 在这一点上,我必须比较它们。 我尝试用findContours检测轮廓并将它们与matchShapes进行比较,但它看起来不正确,我将第一个图像的每个轮廓与第二个轮廓的每个轮廓进行比较,此外通常两个图像到campare有不同轮廓的数量(例如原始背景和当前背景,因为当前背景的边缘随着车辆在后台的进入而增加。)
我还尝试创建一个新图像,其中每个像素对应于其他两个像素的绝对差值,然后我计算差异图像的白色像素(wPx),我用这个数字进行比较:如果wPxthr2 * perim图像不同,我设置两个阈值(thr1和thr2),并计算车辆的边界矩形(perim)的像素。 (我设置了百分比阈值,并将其与边界框的周长进行摩擦,以使阈值适应车辆尺寸。) 然而,这个解决方案似乎很不稳定。
你有什么简单的建议吗? 非常感谢,无论如何,StackOverflow用户不止一次帮助过我!
PS:THIS是我要比较的图像的一个例子
第一个是没有车辆静止的背景,包含街道的边缘;
第二个是原始背景,即检测到静止车辆时拍摄的背景;
第三个是当前背景(在这种情况下等于原来是同一帧,但随后改变);
第四个是视频的当前帧;
答案 0 :(得分:2)
您可能需要查看一下这篇文章:A Novel SIFT-Like-Based Approach
for FIR-VS Images Registration。 Aguilera等。提出 面向边缘的直方图描述符(EOH-SIFT) 。
本文旨在将多光谱图像,可见光和红外图像相互记录。由于图像的不同特征,作者首先在两幅图像中提取边缘/轮廓,从而产生与您相似的图像。
因此,您可以使用此描述符描述您的图像补丁,如下图所示(摘自上面的论文):
因此,您要比较的每个图像(在您的情况下为4)都由其80维特征向量描述。您可以通过计算和评估它们之间的欧氏距离来比较它们。
注意:建议使用尺寸为80x80或100x100(NxN)像素的色块。您可能需要根据图像尺寸调整尺寸。