0

这是我从 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?为什么是0?我获得排名的方式有什么问题ccc吗?我的代码还有更多错误吗?我只是得到平均排名和ccc全 0,但不知道为什么。提前致谢!!

4

0 回答 0