0

我正在使用HOG(定向梯度直方图)特征来检测两个图像之间的相似性,并找出图像的哪一部分发生了变化。测试场景是我先拍一张桌子的照片作为参考,然后在桌子上添加一个物体,在同一个位置再拍一张。

然后我调整并计算两张图片上的 HOG 特征数组:

Imgproc.resize(mGray, mGray, new Size(128,256));
hog.compute(mGray, des);

然后我计算距离:

double distance=0;
for (int i = 0; i < ref.length; i++) {
    distance += Math.abs( ref[i] - a[i]);
}
if (distance < Threshold) {
    Log.i(TAG,"has difference    " + distance);
} else {
    Log.i(TAG,"has no  difference    " + distance);
}

现在我可以检测到两张图片有变化,但是如何快速确定变化在哪里呢?最初,我想把图片分成很多小块,计算这些小块的HOG特征值,逐块比较距离,但效率低下。

如果有更好的方法来做到这一点?

4

1 回答 1

0

猪描述符只告诉你发生了变化,而不是告诉你变化的地方。您可以使用筛选特征和描述符并确定匹配的所有特征并绘制包含所有匹配特征的边界框。

您可以使用 k-means 集群而不是描述符本身的逐块比较,然后对集群编号进行逐块比较。

于 2013-10-16T21:25:51.423 回答