2013-03-28 73 views
0

假設我有一個查詢圖像,並且在matlab中有一個數據庫有10個圖像。我可以讀出並顯示一個相對於查詢圖像具有最小歐幾里德距離的圖像。但現在,我想閱讀並顯示來自該數據庫的至少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); 

我的問題是,我怎麼能讀取並從該數據庫顯示至少五個圖像,在五個不同的窗口。

+0

我想計算一個給定圖像的歐幾里得距離,每5個圖像一個接一個我想看看哪個圖像出現了5個歐幾里得距離最小的圖像,並逐一顯示出來......請幫助我。 。感謝你 – ranadhir

回答

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 

如果你有很多圖像,通過數組並維護五個最小距離將比排序快,但它不值得麻煩。

+0

謝謝,但它沒有顯示5圖像..它顯示超過5個圖像..如何顯示5個圖像具有最小的eucledian距離 – ranadhir

+0

代碼工作正常。它應該只顯示五個圖像。您的代碼還會顯示查詢圖像和調整後對比度的圖像。你不是這個意思嗎? [這裏](http://pastebin.com/iVY92789)是我確切的來源。我不得不改變matlab圖像的路徑,並排除非灰度圖像,使其與我的matlab版本一起工作。如果它仍然不適合你,那麼請給我們更多關於什麼是錯誤和輸出的信息。 –

+0

它總共顯示18圖像與查詢圖像和圖像與調整對比 – ranadhir