MATLAB:以原始大小显示图像

时间:2009-09-15 14:39:27

标签: image matlab

我们可以在MATLAB中以原始大小显示图像吗?

现在,当我们显示时,它完全适合图像窗口大小。但是,我想以原始大小显示图像。当图像尺寸较大时,图像窗口中应显示滚动条。这将允许用户以其原始大小查看图像。

关于如何实现这一目标的任何想法?这可能吗?

6 个答案:

答案 0 :(得分:8)

我相信您正在寻找的是IMTOOL实用程序(它是Image Processing Toolbox的一部分)。它是一个MATLAB GUI,允许您使用水平和垂直滑块以原始大小(100%放大率)查看图像。

修改

上述解决方案将在新的图形窗口(IMTOOL GUI)中显示您的图像。如果您不希望图像出现在新窗口中,而是想要在自己的窗口中调整其大小,则会更加困难。要调整图像的大小,我假设您使用IMAGE命令在一组轴上显示,您必须为包含图像的轴调整axes properties的数量。以下是您可能最终修改的属性:

  • 'Units':例如,可以将其设置为'inches''centimeters''pixels'
  • 'Position':它控制轴在图窗口中的放置位置,以'Units'属性为单位。
  • 'DataAspectRatio'/'PlotBoxAspectRatio':它们控制轴和周围绘图框的相对缩放。
  • 'XLim'/'YLim':轴的最小值和最大值。

在获得图像的大小和缩放以显示您想要的方式后,图像的某些部分可能位于图形窗口区域之外。不幸的是,水平和垂直滑块不会自动添加。您必须使用UICONTROL功能自行创建这些滑块控件。您必须为滑块控件编写回调函数,以便它们在窗口中移动轴。

如果您选择冒险沿着上述路径前进,可以参考以下几个可以帮助您的GUI设计教程链接:a slider tutorial on blinkdaggera blog post by Doug Hulla video from Doug on GUIDE basics

答案 1 :(得分:2)

Matlab滑块有一个问题,它只在MouseUp上而不是在MouseMove上触发回调,所以纯粹的matlab实现总是让人觉得奇怪。

更好的方法 - 在Matlab中使用Java。因此,您不必重新实现整个滚动逻辑。你可以将Java Swing GUI组件放在Matlab窗口中,这一点都不难。

具体而言,您必须使用Swing JScrollPane类。使用Matlab javacomponent()函数,您可以将其放在matlab窗口中。

网上有很多关于如何将图像导入滚动窗格的示例,只需浏览JScrollPane image即可。你可以在matlab中使用Java类,使用通常的Matlab语法(不需要new关键字,ecc。)

答案 2 :(得分:1)

尝试:      图,imshow(your_image),轴图像 这会将图像轴更改为原始大小

答案 3 :(得分:1)

来自MATLAB的答案论坛的代码创建了一个窗口,其中图像以原始分辨率(100%)显示,并且还提供了一个"导航"窗口显示您查看的图像部分(在主窗口中)适合整个图像的位置。

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

Forum post link

答案 4 :(得分:1)

有趣的是,这里没有人提到truesize

  

truesize(fig)调整显示大小,使每个图像像素覆盖一个屏幕像素。如果您未指定数字,truesize会调整当前数字的显示大小。

答案 5 :(得分:0)

要以原始尺寸(1:1)显示图像,需要注意三件事:

  • 数字大小和单位。
  • 轴的尺寸和单位。
  • 轴数据宽高比。

一旦根据图像大小设置所有这些,即使使用MATLAB的image()函数,也可以生成1:1的图像显示。

以下是示例代码:

%% 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', []);

结果(基于图像 - Landscape by Roman Vanur):

Landscape by Roman Vanur

我的Stack Overflow Q1427602 Github Repository中的完整代码。