首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab :如何检查两幅图像是否相似

Matlab :如何检查两幅图像是否相似
EN

Stack Overflow用户
提问于 2016-02-05 22:14:22
回答 2查看 849关注 0票数 0

我有20乘20大小的彩色图像,目的是:

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

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

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

这是查询图像

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

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

代码语言:javascript
复制
img_query = imagesc(reshape(patches(:,50),20,20));
colormap gray;axis image;

R = corr2(img_query,img_query)

答案= NaN

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-05 22:40:16

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

代码语言:javascript
复制
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

更新

在您的情况下,它应该可以工作,正如您在下面的示例中所看到的那样,它工作得非常完美:

代码语言:javascript
复制
I1 = abs(255*(rand(10,10));
I2 = abs(255*(rand(10,10));
corr2(I1,I2)

ans =

   0.0713

即使你分享的图片,它是为我工作。要找出您的问题,您必须共享代码的一部分,或者按原样发布图像,而不是保存的图像(大小为420x560x3)。

注意:您不能拥有包含超过一个层的图像。

您的代码显示您使用的是图像的句柄,而不是图像本身。

测试这个:

代码语言:javascript
复制
I = reshape(patches(:,50),20,20);
corr2(I,I)
票数 3
EN

Stack Overflow用户

发布于 2016-02-06 12:59:41

我也会尝试一下Wang的通用质量指数,如果两幅图像相等的话,它给出了1.0的值,而在其他情况下,如果它们有不同的空间指示,请将一幅图像作为参考,另一幅图像相对于第一幅图像来说是一个退化的图像。请参阅index/demo.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35234472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档