我正在使用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特征值,逐块比较距离,但效率低下。
如果有更好的方法来做到这一点?