0

これは、1000 個の画像から各画像の平均ランクを計算するための私のコードです。(100 個の画像ごとに 1 つのカテゴリを想定しています。たとえば、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:*');

一致関数は、2 つのヒストグラムを入力として、2 つの画像の 2 つのヒストグラムの一致値を計算する関数です。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)

1 から 1000 までのg実行では、必要なランクになります。

(bbb(g)>=fix((r-1)/100)*100+1) & (bbb(g)<=ceil(r/100)*100)

のためにg。しかし、なぜこのプログラムを実行した後、値がccc1000 の 0 になったのでしょうか? なぜ0?ランクを取得する方法に何か問題がありcccますか? そして、私のコードのエラーは他にありますか? 平均ランクとcccすべて0を取得するだけですが、理由がわかりません。前もって感謝します!!

4

0 に答える 0