Matlab:如何检查两个图像是否彼此相似

时间:2016-02-05 22:14:23

标签: matlab image-processing correlation

我的彩色图像大小为20,目标是:

基于查询,我需要检查哪个调用的图像与查询最匹配。例如,让10张图像成为被召回的图像。在10个调用的图像中,我需要找到与查询最接近的匹配。

我在考虑使用图像之间的相关性。可以使用相关系数 - 值越高,像素值之间的相关性越大。 (请纠正错误的地方)。

R = corr2(A,B1)将计算A和B之间的相关系数,其中A是查询,B1是相同大小的第一个调用的图像图像。我将上面的命令用于彩色图像,但我得到了结果R = NaN。如何解决有色和灰度的问题。谢谢。

这是QUERY IMAGE Query Image

另一张图片(召回/检索B1) Recal

更新:用于测试图像与自身的相关性的代码,称为patches.mat(补丁是数据库。它由59500个20x20补丁组成,重新整形为400维列向量, 取自一堆摩托车图像;我使用第50个例子作为查询图像)

img_query = imagesc(reshape(patches(:,50),20,20));
colormap gray;axis image;

R = corr2(img_query,img_query)

答案= NaN

2 个答案:

答案 0 :(得分:3)

这是因为其中一个图像是黑色或包含单一颜色,这意味着矩阵的所有值都相似。请查看以下示例:

I = imread('pout.tif');
J = I*0;                     % create a black image
R = corr2(I,J);

R = 
   NaN


I = imread('pout.tif');
J = 255*ones(size(I));         % create a white image
R = corr2(I,J);

R = 
   NaN

<强>更新

它应该适用于您的情况,正如您在下面的示例中所看到的,它可以完美地运行:

I1 = abs(255*(rand(10,10));
I2 = abs(255*(rand(10,10));
corr2(I1,I2)

ans =

   0.0713

enter image description here

即使您分享了这些图片,它也适合我。要找出问题所在,您必须共享部分代码,或按原样发布图像,而不是保存的图像(尺寸为420x560x3)。

注意:您不能拥有超过1层的图片。

  

您的代码显示您正在使用图片的句柄而不是图片本身。

测试一下:

I = reshape(patches(:,50),20,20);
corr2(I,I)

答案 1 :(得分:0)

我会尝试Wang的通用质量指数,如果两个图像相等则给出1.0,而在其他情况下,如果它们不同,则考虑一个图像作为参考,另一个作为退化的相对图像到第一个。见http://www.cns.nyu.edu/~zwang/files/research/quality_index/demo.html