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