我们可以在MATLAB中以原始大小显示图像吗?
现在,当我们显示时,它完全适合图像窗口大小。但是,我想以原始大小显示图像。当图像尺寸较大时,图像窗口中应显示滚动条。这将允许用户以其原始大小查看图像。
关于如何实现这一目标的任何想法?这可能吗?
答案 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 blinkdagger,a blog post by Doug Hull和a 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)
答案 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):