保存具有不同图像的函数的输出(匹配值)作为数组中的输入

时间:2014-09-16 03:41:22

标签: matlab iteration cbir

为了做CBIR,我正在计算两张图片的匹配值。以下是我的代码。我们可以看到这个函数的输入是两个图像的名称,输出是匹配值。我的图像名称为" 2.jpg"作为我的查询图像,我总共有10个图像,名称为" 1.jpg"到" 10.jpg"。我需要使用" 2.jpg"获取10张图像中任何图像的匹配值。那么我怎样才能创建一个循环并使用下面的函数来获取10个值并将它们保存在数组中?我不想手动更改函数中图片的名称,更重要的是,如何在数组中保存10个匹配值?提前谢谢!

function matchfunction(C,D)
first=imread(C);
Im_red=first(:,:,1);
Im_green=first(:,:,2);
Im_blue=first(:,:,3);
hist_im1=zeros(1,256); 
[h,w]=size(Im_red); 
for i=1:h   
for j=1:w
value_pixel1=Im_red(i,j)+1;
hist_im1(value_pixel1)=hist_im1(value_pixel1)+1;
end
end
hist_im2=zeros(1,256); 
[h,w]=size(Im_green); 
for i=1:h   
for j=1:w
value_pixel2=Im_green(i,j)+1;
hist_im2(value_pixel2)=hist_im2(value_pixel2)+1;
end
end
hist_im3=zeros(1,256); 
[h,w]=size(Im_blue); 
for i=1:h   
for j=1:w
value_pixel3 = Im_blue(i,j) + 1;
hist_im3(value_pixel3) = hist_im3(value_pixel3)+1;
end
end
second=imread(D);
Im_red2=second(:,:,1);
Im_green2=second(:,:,2);
Im_blue2=second(:,:,3);
hist_im4=zeros(1,256); 
[h,w]=size(Im_red2); 
for i=1:h   
for j=1:w
value_pixel4=Im_red2(i,j) + 1;
hist_im4(value_pixel4)=hist_im4(value_pixel4)+1;
end
end 
hist_im5=zeros(1,256); 
[h,w]=size(Im_green2); 
for i=1:h   
for j=1:w
value_pixel5=Im_green2(i,j) + 1;
hist_im5(value_pixel5)=hist_im5(value_pixel5)+1;
end
end
hist_im6=zeros(1,256); 
[h,w]=size(Im_blue2); 
for i=1:h   
for j=1:w
value_pixel6=Im_blue2(i,j) + 1;
hist_im6(value_pixel6)=hist_im6(value_pixel6)+1;
end
end
A=[hist_im1, hist_im2, hist_im3];
B=[hist_im4, hist_im5, hist_im6];
[Aa,Ab]=size(A);
for i=1:Ab
H(i)=min(A(i),B(i));
end
HI=sum(H);
HI/sum(B)

1 个答案:

答案 0 :(得分:0)

您的matchfunction无法正常工作,因为您还没有将a设置为任何内容,因此它不会输出任何内容,但如果您修复了该问题,则可以执行简单的for {1}}循环。 (matchfunction(2,i)应该比较" 2.jpg"到" i.jpg",我不确定这是否是您的功能的正确语法,)

for i=1:10
    a(i)=mathcfunction(2,i);
end

然后i的{​​{1}} - 元素是图片2和a的匹配值。