入力画像と最も類似した5つの画像を比較したいと思います。 これを行うために私はSIFT(VLFeat library)を使用し、それぞれの記述子を比較することを考えました。 したがって、vl_ubcmatch
(doc here)メソッドを使用して、画像間の類似性の測定値を計算します。5つの最も類似した画像を取得する
これはコードです:あなたがコードから見ることができるように
path_dir = './img/';
imgs = dir(path_dir);
imgs = imgs(3 : end);
numImgs = size(imgs);
numImgs = numImgs(1);
path1 = './img/car01.jpg';
Ia = imread(path1);
Ia = single(rgb2gray(Ia));
[fa, da] = vl_sift(Ia);
results = struct;
m = 0;
j = 1; % indice dell'img (del for)
for img = imgs'
path = strcat(path_dir, img.name);
if(strcmp(path1, path) == 0)
Ib = imread(path);
Ib = single(rgb2gray(Ib));
[fb, db] = vl_sift(Ib);
[matches, scores] = vl_ubcmatch(da, db);
s = sum(scores);
[r, c] = size(scores);
m = s ./ c;
results(j).measure = m;
results(j).img = path;
j = j + 1;
end
end
、(例えば、それが告げる私は類似性の尺度としての平均値を使用するだろうと思ったが、私が得る結果は満足のいくものではありません私はカップの入力イメージが別のカップよりもツリーに似ていることを私に教えてください)。
あなたによれば、同等の記述子を持つ方がよいでしょうが、類似性が低いか類似していない記述子は少ないが類似性は高いですか? 私は、5つの異なるカテゴリ(カップ、木、人、テーブル、車)の50の画像を持っており、入力として画像が与えられると、プログラムは5つの最も類似した画像を返します。
より正確な分類を得るために平均の代わりにどのような測定を使用できますか? ありがとう!