Reputation:
Can we show an image in its original size in MATLAB?
Right now when we are showing, it is exactly fitted to the image window size. However, I want to show the image in its original size. When the image is of larger size, a scroll bar should appear in the image window. This would allow the user to view the image in its original size.
Any ideas on how to achieve this? Is this possible?
Upvotes: 7
Views: 10154
Reputation: 4963
There are 3 things to take care of in order to display image in its original size (1:1):
Once all of that are set according to the image size even using MATLAB's image()
function one could generate 1:1 display of an image.
Here is the sample code:
%% Load Data
mI = imread('7572939538_04e373d8f4_z.jpg');
numRows = size(mI, 1);
numCols = size(mI, 2);
%% Setings
horMargin = 30;
verMargin = 60; %<! Title requires more
%% Display Image
vFigPos = [100, 100, numCols + (2 * horMargin), numRows + (2 * verMargin)]; %<! [Left, Bottom, Width, Height]
vAxesPos = [horMargin, verMargin, numCols, numRows];
hFigure = figure('Position', vFigPos, 'Units', 'pixels');
hAxes = axes('Units', 'pixels', 'Position', vAxesPos);
hImageObj = image(hAxes, mI);
set(hAxes, 'DataAspectRatio', [1, 1, 1]);
set(get(hAxes, 'Title'), 'String', {['Landscape by Roman Vanur']}, ...
'Fontsize', fontSizeTitle);
set(hAxes, 'XTick', []);
set(hAxes, 'YTick', []);
The result (Based on the image - Landscape by Roman Vanur):
The full code in my Stack Overflow Q1427602 Github Repository.
Upvotes: 0
Reputation: 60810
Funny, nobody here has mentioned truesize
yet:
truesize(fig)
adjusts the display size such that each image pixel covers one screen pixel. If you do not specify a figure,truesize
adjusts the display size of the current figure.
Upvotes: 1
Reputation: 597
This code from MATLAB's Answers forum creates a window where the image is shown at native resolution (100%), and also gives a "navigation" window showing where your viewed section of the image (in the main window) fits into the whole image.
% Create a scroll panel with a Magnification Box and an Overview tool.
hFig = figure('Toolbar','none',...
'Menubar','none');
hIm = imshow('saturn.png');
hSP = imscrollpanel(hFig,hIm); % Handle to scroll panel.
set(hSP,'Units','normalized',...
'Position',[0 .1 1 .9])
% Add a Magnification Box and an Overview tool.
hMagBox = immagbox(hFig,hIm);
pos = get(hMagBox,'Position');
set(hMagBox,'Position',[0 0 pos(3) pos(4)])
imoverview(hIm)
Upvotes: 1
Reputation: 270
try: figure,imshow(your_image), axis image This changes the image axis to the original size
Upvotes: 1
Reputation: 5832
Matlab slider has a problem that it fires callback only on MouseUp and not on MouseMove, so pure matlab implementation would always feels strange.
Better way - go for Java in Matlab. So you do not have to re-implement whole scroll logics. You can put Java Swing GUI component inside Matlab window, it is not difficult at all.
Specifically you have to use Swing JScrollPane
Class. With Matlab javacomponent()
function you can put it inside matlab window.
There are tons of examples on the web on how to get image into scroll pane, just browse for JScrollPane image
. You can use Java classes inside matlab with usual Matlab syntax (no need for new
keyword, ecc.)
Upvotes: 2
Reputation: 125874
I believe what you're looking for is the IMTOOL utility (which is a part of the Image Processing Toolbox). It's a MATLAB GUI that allows you to view images in their original size (100% magnification) with horizontal and vertical sliders.
EDIT:
The above solution will display your image in a new figure window (the IMTOOL GUI). If you don't want the image appearing in a new window, but instead want to adjust its size in a window of your own, it will be more difficult. To adjust the size of the image, which I assume you've displayed on a set of axes using the IMAGE command, you will have to adjust a number of axes properties for the axes containing the image. The following are the properties you will likely end up modifying:
'Units'
: This can be set to 'inches'
, 'centimeters'
, or 'pixels'
, for example.'Position'
: This controls where the axes are placed in the figure window, in units governed by the 'Units'
property.'DataAspectRatio'/'PlotBoxAspectRatio'
: These control the relative scaling of the axes and the surrounding plot box.'XLim'/'YLim'
: The minimum and maximum values of the axes.After getting the size and scaling of the image to display the way you want, parts of the image could be outside the figure window area. Unfortunately, horizontal and vertical sliders will not be automatically added. You will have to create these slider controls yourself using the UICONTROL function. You will have to write the callback functions for the slider controls such that they move the axes around in the window.
If you choose to venture down the above path, here are a few links to GUI design tutorials that may help you: a slider tutorial on blinkdagger, a blog post by Doug Hull, and a video from Doug on GUIDE basics.
Upvotes: 8