0

假设我有一个查询图像,以及一个有 10 个图像的 matlab 数据库。我可以读出并显示一张相对于查询图像具有最小欧几里德距离的图像。但是现在,我想从该数据库中读取并显示至少 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);

我的问题是,如何在五个不同的窗口中读取并显示该数据库中的至少五张图像。

4

1 回答 1

0

如果我正确理解您的代码,您当前仅显示距离等于零(if g(1,k)==0, w=k; end)的图像,而不是距离最小的图像。

如果你有距离,g你可以简单地对数组进行排序并取前五个。

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

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

如果您有很多图像,则遍历数组并保持五个最小距离会比排序更快,但 imo 不值得麻烦。

于 2013-03-28T15:46:11.257 回答