2011-09-13 39 views
5

Tôi biết rằng đó chỉ là cảnh báo và nó sẽ không ảnh hưởng đến mã .. nhưng vấn đề của tôi là tôi cần hiển thị hình ảnh ở kích thước thật mà không cần phóng to ra .. là có thể trong imshow chức năng có bất kỳ thông số nào làm điều này?ảnh quá lớn để vừa với màn hình (MATLAB)

cảm ơn tất cả các bạn

+1

bạn đã xem xét sử dụng [IMTOOL] (http://www.mathworks.com/help/toolbox/images/ref/imtool.html) chưa? – Amro

+0

Tôi đã thử nó .. nó hoạt động .. nhưng tôi muốn 'imshow' để làm điều đó vì tiết kiệm các vấn đề bằng cách sử dụng' in' .. 'imtool' sẽ không cho phép tôi để lưu các hình –

+0

câu hỏi tương tự: [MATLAB: hiển thị một hình ảnh ở kích thước ban đầu của nó] (http://stackoverflow.com/questions/1427602/matlab-showing-an-image-in-its-original-size) – Amro

Trả lời

3

Một giải pháp mà nên làm việc là để hiển thị các hình ảnh và sau đó thay đổi các giới hạn trục để có một màn hình pixel camera cho mỗi điểm ảnh:

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

Bây giờ bạn có thể chọn tay (pan tool) và di chuyển hình ảnh xung quanh khi cần thiết.

+0

@Jonas Heidelberg: đã sửa nó. – Jonas

+1

rất thú vị :-). Bạn có thể thêm 's = warning ('off', 'Images: initSize: adjustingMag'); hình, imshow (img); (các) cảnh báo; 'để tránh thông báo cảnh báo ... –

+0

(xóa các nhận xét cũ không còn áp dụng ...) –

3

Giải pháp được đưa ra bởi @Jonas, mà tôi đã upvoted, thực sự tốt. Tôi xin gợi ý một số cải tiến nhỏ để nó xử lý các trường hợp khi con số này được thay đổi kích cỡ:

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

sau đây là chức năng thay đổi kích thước 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

Bạn có thể có thể cải thiện điều này hơn nữa để khi bạn thay đổi kích thước hình, bạn không phải lúc nào cũng quay trở lại góc trên cùng bên trái, nhưng vẫn duy trì vị trí hiện tại.

+0

Bổ sung tuyệt vời! – Jonas

+0

cảm ơn bạn .. :) .. nhưng nó không hoạt động .. Tôi nghĩ rằng nó không hoạt động vì kích thước lớn của hình ảnh .. nó là '1914-by- 2294' –

+0

@OmarOsama: chính xác là những gì đã đi sai? Nó làm việc tốt cho tôi. BTW kích thước hình ảnh lát gạch trong ví dụ trên là 2060x3450 .. – Amro

0

Lưu ý: Để tập trung hình ảnh (thay vì hiển thị phía trên bên trái của nó), sử dụng

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

nơi w_image và h_image là kích thước của hình ảnh, và w_window và h_window là pos các câu trả lời trên (3) và pos (4), tương ứng.

Các vấn đề liên quan