Для выполнения CBIR я вычисляю значение соответствия двух изображений. Ниже мой код. Мы видим, что ввод этой функции - это имя двух изображений, а выход - это значение соответствия. У меня есть изображение с именем «2.jpg» в качестве моего изображения запроса, и у меня есть всего 10 изображений с именем «1.jpg» до «10.jpg». И мне нужно получить значения соответствия для любого изображения из 10 изображений с помощью «2.jpg». Итак, как я могу создать цикл и использовать следующую функцию, чтобы получить 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)
Я пробовал для i = 1: 10 a (i) = matchfunction ('2.jpg', strcat (int2str (i), '. Jpg')); end Но это показывает: Ошибка при использовании matchfunction Слишком много выходных аргументов. Как это исправить? –
Я хочу сохранить все выходные значения в массиве. –
Вы должны исправить свою «игру», чтобы она работала первым! На данный момент 'matchfunction' не дает никаких выходов! Для простого примера запустите этот цикл для цикла: 'a = []; для i = 1: 5; a (i) = i^2; end; a это должно показать, как сохранять результаты в массив. – David