CBIR平均等级函数

时间:2014-10-21 05:26:09

标签: matlab image-processing cbir

这是我的代码,用于计算1000张图片中每张图片的平均排名。 (我们假设每100张图像是一个类别,例如1-100,101-200,......)

for z=1:1000
H{z}=imread(strcat(int2str(z-1),'.jpg'));

Im_red=H{z}(:,:,1);
Im_green= H{z}(:,:,2);
Im_blue= H{z}(:,:,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
Q{z}=[hist_im1, hist_im2, hist_im3];
end

for r=1:1000
for i=1:1000
a(r,i)=matchfunction(Q{r},Q{i});
end

for j=1:1000
b(r,j)=j;
end

L=[a;b];
end
for r=1:1000
B=[L(r,:);L(r+1000,:)];

[d1,d2] = sort(B(1,:),'descend');
C=B(:,d2);

aaa=C(1,:);
bbb=C(2,:);
ccc=zeros(1,1000);

for g=1:1000
if ((bbb(g)>=fix((r-1)/100)*100+1) & (bbb(g)<=ceil(r/100)*100))
ccc(g)=g;
end

end

ddd=sum(ccc(g))/100;

s(r)=ddd

end

avgrank(1)=sum(s(1:100))/100
avgrank(2)=sum(s(101:200))/100
avgrank(3)=sum(s(201:300))/100
avgrank(4)=sum(s(301:400))/100
avgrank(5)=sum(s(401:500))/100
avgrank(6)=sum(s(501:600))/100
avgrank(7)=sum(s(601:700))/100
avgrank(8)=sum(s(701:800))/100
avgrank(9)=sum(s(801:900))/100
avgrank(10)=sum(s(901:1000))/100
xCoordinates = 1:10;
plot(xCoordinates,avgrank,'b:*');

匹配函数是一个函数,计算两个直方图作为输入的两个图像的两个直方图的匹配值。您可以看到Q{z}是直方图。我想我的问题就在这里:

for g=1:1000
if ((bbb(g)>=fix((r-1)/100)*100+1) & (bbb(g)<=ceil(r/100)*100))
ccc(g)=g;
end

end

这就是我计算等级的方法。所以我只把等级给ccc(g)

因为g从1到1000运行,如果我们有

,它将只是我们的排名
(bbb(g)>=fix((r-1)/100)*100+1) & (bbb(g)<=ceil(r/100)*100)

表示g。 但是为什么在我运行这个程序之后我得到ccc的值是一千零?为何0?我通过ccc获得排名的方式有什么问题吗?我的代码有更多错误吗?我只是获得了平均排名而ccc全部为0,但无法弄清楚原因。在此先感谢!!

0 个答案:

没有答案