我的彩色图像大小为20,目标是:
基于查询,我需要检查哪个调用的图像与查询最匹配。例如,让10张图像成为被召回的图像。在10个调用的图像中,我需要找到与查询最接近的匹配。
我在考虑使用图像之间的相关性。可以使用相关系数 - 值越高,像素值之间的相关性越大。 (请纠正错误的地方)。
R = corr2(A,B1)
将计算A和B之间的相关系数,其中A是查询,B1是相同大小的第一个调用的图像图像。我将上面的命令用于彩色图像,但我得到了结果R = NaN
。如何解决有色和灰度的问题。谢谢。
更新:用于测试图像与自身的相关性的代码,称为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
答案 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
即使您分享了这些图片,它也适合我。要找出问题所在,您必须共享部分代码,或按原样发布图像,而不是保存的图像(尺寸为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