2014-09-16 2 views
-1

Для выполнения 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) 

ответ

0

Ваш matchfunction не будет работать, потому что вы не установили a быть что-нибудь, так что он не будет выводить ничего, но если вы фиксируете, что вы можете просто сделать простой for цикл. (matchfunction(2,i) должны сравнивать «2.jpg», чтобы «I.jpg», я не уверен, что это правильный синтаксис для вашей функции, хотя)

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

Тогда i -м элементом a является матч значение для изображений 2 и i.

+0

Я пробовал для i = 1: 10 a (i) = matchfunction ('2.jpg', strcat (int2str (i), '. Jpg')); end Но это показывает: Ошибка при использовании matchfunction Слишком много выходных аргументов. Как это исправить? –

+0

Я хочу сохранить все выходные значения в массиве. –

+0

Вы должны исправить свою «игру», чтобы она работала первым! На данный момент 'matchfunction' не дает никаких выходов! Для простого примера запустите этот цикл для цикла: 'a = []; для i = 1: 5; a (i) = i^2; end; a это должно показать, как сохранять результаты в массив. – David