2011-09-13 5 views
5

Je sais que c'est juste un avertissement et cela n'affectera pas le code .. mais mon problème est que je dois montrer l'image dans sa taille réelle sans aucun zoom out .. est-ce possible dans imshow fonction y at-il des paramètres qui font cela?l'image est trop grande pour tenir dans l'écran (MATLAB)

vous remercie tous

+1

avez-vous envisagé d'utiliser [IMTOOL] (http://www.mathworks.com/help/toolbox/images/ref/imtool.html)? – Amro

+0

Je l'ai essayé .. cela fonctionne .. mais je veux 'imshow' pour faire cela en raison de problèmes d'enregistrement en utilisant' print' .. 'imtool' ne me permettra pas d'enregistrer la figure –

+0

question similaire: [MATLAB: montrant une image dans sa taille d'origine] (http://stackoverflow.com/questions/1427602/matlab-showing-an-image-in-its-original-size) – Amro

Répondre

3

Une solution qui devrait fonctionner est d'afficher l'image, puis modifier les limites d'axes pour qu'il y ait un pixel d'écran pour chaque pixel d'image:

%# 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]) 

vous pouvez maintenant sélectionner la main (outil de panoramique) et déplacez l'image au besoin.

+0

@Jonas Heidelberg: réparé. – Jonas

+1

très cool :-). Vous pouvez ajouter 's = warning ('off', 'Images: initSize: adjustmentMag'); figure, imshow (img); warning (s); 'pour éviter le message d'avertissement ... –

+0

(en supprimant les anciens commentaires qui ne s'appliquent plus ...) –

3

La solution donnée par @Jonas, que j'ai déjà upvoted, est vraiment bonne. Permettez-moi de suggérer quelques améliorations mineures afin qu'il traite le cas où le chiffre est redimensionnée:

%# 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 

ce qui suit est la fonction de rappel de modification de taille:

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

Vous pourriez sans doute améliorer cette De plus, lorsque vous redimensionnez la figure, vous ne retournez pas toujours dans le coin supérieur gauche, mais maintenez la position actuelle.

+0

Belles additions! – Jonas

+0

merci .. :) .. .. mais ça ne marche pas .. Je pense que cela n'a pas fonctionné en raison de la taille énorme de l'image .. il est '1914-by-2294' –

+0

@OmarOsama: ce qui a exactement mal tourné? Cela fonctionne très bien pour moi. BTW la taille de l'image en mosaïque dans l'exemple ci-dessus est 2060x3450 .. – Amro

0

Note: Pour centrer l'image (au lieu de montrer sa partie supérieure gauche), utilisez

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

où w_image et h_image sont les dimensions et w_window et h_window sont les pos des réponses ci-dessus de l'image (3) et pos (4), respectivement.

Questions connexes