2011-09-13 10 views
5

Bunun sadece bir uyarı olduğunu ve kodun etkilenmeyeceğini biliyorum .. ama benim sorunum, görüntüyü herhangi bir yakınlaştırma yapmadan gerçek boyutunda göstermem gerektiğidir dışarı .. imshow fonksiyonunda bu mümkün olan herhangi bir parametre var mı? image ekranda sığmayacak kadar büyük (MATLAB)

teşekkür ederim çalışması gerekir

+1

[IMTOOL] (http://www.mathworks.com/help/toolbox/images/ref/imtool.html) kullanmayı düşündünüz mü? – Amro

+0

Bunu denedim .. işe yarıyor .. ama '' im '' '' '' '' '' imtool'' kullanarak sorunları kaydetme nedeniyle bunu yapmak imshow' istiyorum –

+0

rakamı kaydetmem için bana benzer bir soru: [MATLAB: bir resim gösteriyor orijinal boyutunda] (http://stackoverflow.com/questions/1427602/matlab-showing-an-image-in-its-original-size) – Amro

cevap

3

bir çözüm her görüntü pikseli için bir ekran piksel olacak şekilde eksenler sınırlarını değiştirmek sonra görüntüyü ve tüm:

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

Artık seçebilirsiniz el (tava aracı) ve görüntüyü gerektiği gibi hareket ettirin.

+0

@Jonas Heidelberg: düzeltildi. – Jonas

+1

çok güzel :-). 'S = uyarı ('kapalı', 'Görüntüler: initSize: adjustingMag') ekleyebilirsiniz; şekil, imshow (img); uyarı (ları); 'uyarı mesajını engellemek için ... –

+0

(artık geçerli olmayan eski yorumları siliyor ...) –

3

Önceden kayıtlı olduğum @Jonas ile verilen çözüm gerçekten çok iyi.

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

Muhtemelen bu hale getirebileceği: Aşağıdaki

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

boyutlandırma geri arama işlevi şudur: rakamın boyutlandırılır durum işleme alacağı şekilde bana bazı küçük iyileştirmeler önermek edelim Ayrıca, şekli yeniden boyutlandırdığınızda, her zaman sol üst köşeye geri dönmezsiniz, ancak geçerli konumu korursunuz.

+0

Güzel ekler! – Jonas

+0

Teşekkürler .. :) .. ama işe yaramıyor .. Sanırım resmin büyüklüğü nedeniyle işe yaramadı .. Bu 1914-by-2294 ' –

+0

@OmarOsama: tam olarak ne var ters gitti? Benim için gayet iyi çalışıyor. Yukarıdaki örnekte bulunan BTW görüntü boyutu 2060x3450'dir. – Amro

0

Not:

xlim([(w_image - w_window)/2, (w_image + w_window)/2]); 
    ylim([(h_image - h_window)/2, (h_image + h_window)/2]); 
w_image ve h_image görüntü boyutları olan

ve w_window kullanımı, (yerine, sol üst gösteren) görüntü merkezi ve yukarıdaki cevapları poz h_window olan için (3) ve pos (4), sırasıyla.