【问题标题】:How to detect area of change between two images in openCV?如何检测openCV中两个图像之间的变化区域?
【发布时间】:2019-12-15 23:24:03
【问题描述】:

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

然后我在两张图片上调整并计算 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特征值,逐块比较距离,但效率低下。

如果有更好的方法呢?

【问题讨论】:

    标签: java opencv image-processing


    【解决方案1】:

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

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

    【讨论】:

    • 您能详细说明为什么 SIFT 有帮助吗?
    猜你喜欢
    • 2017-10-05
    • 2023-03-03
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-14
    • 2012-06-07
    相关资源
    最近更新 更多