2011-09-13 19 views
5

So che è solo un avvertimento e non influenzerà il codice .. ma il mio problema è che ho bisogno di mostrare l'immagine nelle sue dimensioni reali senza alcuno zoom fuori ... è possibile nella funzione imshow ci sono dei parametri che fanno questo?l'immagine è troppo grande per adattarsi allo schermo (MATLAB)

grazie a tutti voi

+1

hai considerato l'utilizzo di [IMTOOL] (http://www.mathworks.com/help/toolbox/images/ref/imtool.html)? – Amro

+0

L'ho provato .. funziona ... ma voglio che 'imshow' lo faccia a causa del salvataggio dei problemi usando' stampa' .. 'imtool' non mi abiliterà a salvare la domanda simile –

+0

: [MATLAB: mostrare un'immagine nella sua dimensione originale] (http://stackoverflow.com/questions/1427602/matlab-showing-an-image-in-its-original-size) – Amro

risposta

3

Una soluzione che dovrebbe funzionare è quello di visualizzare l'immagine e quindi modificare i limiti assi in modo che ci sia un pixel sullo schermo per ogni pixel dell'immagine:

%# read an image and make it large 
img = imread('autumn.tif'); 
img = repmat(img,[10,10]); 

%# turn off the warning temporarily, we're going to fix the problem below 
%# Note that in R2011b, the warning ID is different! 
warningState = warning('off','Images:initSize:adjustingMag'); 
figure 
imshow(img) 
warning(warningState); 


%# get axes limits in pixels 
set(gca,'units','pixels') 
pos = get(gca,'position') 

%# display the top left part of the image at magnification 100% 
xlim([0.5 pos(3)-0.5]),ylim([0.5 pos(4)-0.5]) 

Ora è possibile selezionare la mano (strumento pan) e muovi l'immagine come necessario.

+0

@Jonas Heidelberg: risolto. – Jonas

+1

molto cool :-). Potresti aggiungere 's = warning ('off', 'Images: initSize: adjustingMag'); figura, imshow (img); warning (s); 'per evitare il messaggio di avviso ... –

+0

(eliminazione di vecchi commenti che non si applicano più ...) –

3

La soluzione fornita da @Jonas, che ho già upvoted, è davvero buona. Mi permetto di suggerire alcuni piccoli miglioramenti in modo che gestisce il caso in cui la cifra si ridimensiona:

%# read an image and make it large 
img = imread('autumn.tif'); 
img = repmat(img, [10 10]); 

%# new figure 
hFig = figure; 

%# try show image at full size (suppress possible warning) 
s = warning('off', 'Images:initSize:adjustingMag'); 
imshow(img, 'InitialMagnification',100, 'Border','tight') 
warning(s); 

%# handle figure resize events 
hAx = gca; 
set(hFig, 'ResizeFcn',{@onResize,hAx}) 

%# call it at least once 
feval(@onResize,hFig,[],hAx); 

%# enable panning tool 
pan on 

il seguente è la funzione di ridimensionamento di callback:

function onResize(o,e,hAx) 
    %# get axes limits in pixels 
    oldUnits = get(hAx, 'Units'); %# backup normalized units 
    set(hAx, 'Units','pixels') 
    pos = get(hAx, 'Position'); 
    set(hAx, 'Units',oldUnits)  %# restore units (so it auto-resize) 

    %# display the top left part of the image at magnification 100% 
    xlim(hAx, [0 pos(3)]+0.5) 
    ylim(hAx, [0 pos(4)]+0.5) 
end 

screenshot

Probabilmente si potrebbe migliorare questo inoltre, quando ridimensionate la figura, non tornate sempre all'angolo in alto a sinistra, ma mantenete la posizione corrente.

+0

Nice aggiunte! – Jonas

+0

grazie .. :) .. ma non funziona .. Penso che non abbia funzionato a causa dell'enorme dimensione dell'immagine .. è '1914-by-2294' –

+0

@OmarOsama: cosa ha esattamente finito male? Funziona bene per me. A proposito la dimensione dell'immagine piastrellata nell'esempio sopra è 2060x3450 .. – Amro

0

Nota: Per centrare l'immagine (invece di mostrare il suo alto a sinistra), utilizzare

xlim([(w_image - w_window)/2, (w_image + w_window)/2]); 
    ylim([(h_image - h_window)/2, (h_image + h_window)/2]); 

dove w_image e h_image sono dimensioni dell'immagine, e w_window e h_window sono pos risposte precedenti (3) e pos (4), rispettivamente.

Problemi correlati