2013-10-16 45 views
0

我正在使用HOG功能来检测两个图像的相似性,并找出图像的哪个部分发生了变化。测试场景是我首先以表格的图片作为参考,然后在表格的角落添加一个对象,然后在相同的位置再次拍摄图片。如何检测opencv中两个图像之间的变化?

然后我使用resize和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特征值,逐块比较距离,但这并不是很有效。

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

回答

0

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

除了在描述符本身上逐个块,您可以使用k-means簇,然后对簇编号进行块比较。

相关问题