0

クエリ画像が 1 つあり、matlab に 10 個の画像があるデータベースがあるとします。クエリ画像に対してユークリッド距離が最も小さい画像を 1 枚読み込んで表示できます。しかし今、私はそのデータベースから少なくとも 5 つの画像を読み取って表示したいと考えています。つまり、5 つの異なるウィンドウで 5 つの画像を読み取って表示したいと考えています。

最小のユークリッド距離を持つ単一の画像を読み取って表示するための私のプログラムは次のとおりです。

G=imread('spine.tif');

H = adapthisteq(G,'clipLimit',0.01,'Distribution','rayleigh');

[rows cols]=size(H);

[c1,s1]=wavedec2(H,1,'db1');

X=c1;

figure,imshow(G);

figure,imshow(H);

fileFolder=fullfile(matlabroot,'toolbox','images','imdata');

dirOutput=dir(fullfile(fileFolder,'*.tif'));

fileNames={dirOutput.name}

n=numel(fileNames)

g=zeros(1,n)

for k = 1 : n

fileNames1=strcat('fullfile(fileFolder)',fileNames(k))

I = imread(fileNames{k});

J = adapthisteq(I,'clipLimit',0.01,'Distribution','rayleigh');

J = imresize(J, [rows cols]);

[c2,s2]=wavedec2(J,1,'db1');

Y=c2;

E_distance = sqrt(sum((X-Y).^2));

g(1,k)=E_distance;

if g(1,k)==0

    w=k;
    end
end

disp(g);

II=imread(fileNames{w});

figure, imshow(II);

私の質問は、5 つの異なるウィンドウで、そのデータベースから少なくとも 5 つの画像を読み取って表示するにはどうすればよいかということです。

4

1 に答える 1

0

あなたのコードを正しく理解していれば、現在、距離がif g(1,k)==0, w=k; end最小の画像ではなく、距離がゼロ ( ) の画像のみが表示されます。

距離がある場合はg、配列を並べ替えて最初の 5 つを取ることができます。

[sorted,IX] = sort(g);
firstFiveIndexes = IX(1:5);

for I = 1:length(firstFiveIndexes)
  figure;imshow(imread(fileNames{firstFiveIndexes(I)}));
end

多くの画像がある場合、配列を調べて 5 つの最小距離を維持する方が、並べ替えよりも高速ですが、手間をかける価値はありません。

于 2013-03-28T15:46:11.257 に答える