在使用MATLAB进行图像处理时,图像信息在MATLAB中将以矩阵形式保存。在我们需要将矩阵信息转化为图像进行保存的过程中,经常会出现输出图像的大小与矩阵大小不一致的情况。例如我希望将一个1024×1024大小的矩阵(Example_Matrix.mat)保存为1024×1024大小的图像,但我们实际输出保存的图像可能会是520×460大小,完全不符合我们的预期。
在本文中,我们利用saveas函数来简要介绍一下如何将图片保存为我们需要的大小。
注:
- imwrite、print函数等也可完成此操作,但本文只涉及saveas函数的介绍。
- saveas函数保存的图像默认150dpi,图像保存较为清晰。
- 作者水平有限,基本皆为个人理解,仅供参考,如有不当之处请各位前辈同仁批评指正。
- 完整代码可在文末获取,详细过程讲解可阅读全文。
1. figure函数
Figure命令使用默认属性值创建一个新的图窗窗口,生成的图窗为当前图窗。
当我们在命令行窗口输入:figure,点击回车后就能看到一个类似于图1的窗口出现在我们界面上。生成的图窗携带有一系列默认属性值,例如包括图窗的颜色、大小等参数。
我们将figure命令赋予hf(在命令行窗口输入:hf = figure),这时候hf就成为了figure属性的句柄(操作端口)。查看hf,可以看到当前被赋予figure属性的hf的具体参数,如图2。
作为操作端口,可以通过 hf 修改当前生成的窗口的属性。例如我们修改图窗的起始位置和大小(如图3),运行后就可以看到hf窗口发生了我们想要的变换。
2. 矩阵图片输出
2.1 加载矩阵
这里我们使用一个1024×1024大小的矩阵来举例,其名称为 “Example_Matrix”,我们将之加载到工作区。
load('C:\Users\Administrator\Desktop\Example_Matrix.mat');
2.2 参数设置
将 “Example_Matrix” 提高精度后赋予x进行下一步处理。im2double在提高精度的同时,还会将矩阵中各点的像素值归一化。
x = im2double(Example_Matrix);
squeeze函数将矩阵中维度为1的一维去除,此处将x的第三维去除,即若之前x为1024×1024×3,经过此后变为1024×1024。
x = squeeze(x(:,:,1));
将图窗1的句柄赋予h。
h = figure(1);
去除图像显示中的白边,只显示图像本身。
imshow(x,[],'border','tight','initialmagnification','fit');
将图窗句柄h对应的图窗设置为当前图窗(设置操作对象)。
set(0,'CurrentFigure',h);
设置图窗边缘,[0,0,1,1]表示将图片无边缘铺满窗口。
set(gca,'position',[0,0,1,1]);
根据屏幕上窗口的尺寸确定打印窗口的宽度和高度,调整窗口的位置,使窗口以页面为中心。
set(gcf,'PaperPositionMode','auto');
设置窗口大小(在此程序中也可控制图像输出大小),当需要输出1024×1024大小图片时,此处'position'设置为655.3592。
set(gcf,'position',[0,0,655.3592, 655.3592]);
Saveas函数使用图窗 PaperPosition 和 PaperPositionMode 属性确定图像的大小,其 PaperPosition 与 position 之间有转换关系。
我们知道图像的尺寸大小可以表示为 dpi × inch,saveas函数默认 dpi = 150。假设我们令 position 为[0,0,256,256],此时其所对应的 PaperPosition 为6.7733cm,相当于2.66667inch(1inch = 2.54cm),可计算此时图片大小为 150 × 2.66667 = 400,即该图片大小为400 × 400。
根据上述比例关系,则我可以从我们想要的图像尺寸推算出需要在 position 中输入的参数。此处我要输出1024×1024大小图片,经计算有 position 为[0,0,655.3592, 655.3592]。
获取坐标系中的图像信息。
Save_Fig = getframe(gcf);
将图像信息中的数据部分按要求放缩。
Save_Fig.cdata = imresize(Save_Fig.cdata,[size(x,1),size(x,2)]);
输出为灰度图像。
Save_Fig.cdata = rgb2gray(Save_Fig.cdata);
2.3 保存图片
将图窗 h 中的信息保存到程序所在文件夹下,命名为 “ Image_Init ” ,文件后缀 “ /.tif ” 。文章来源:https://www.toymoban.com/news/detail-445544.html
saveas(h,'Image_Init.tif');
3. 查看图片
完成后点击查看图片,通过属性栏即可看到图片已经符合了我们之前的要求,如图4。文章来源地址https://www.toymoban.com/news/detail-445544.html
4. 完整代码
%% Clear Panel
clear;
close all;
clc;
%% Input Graphic Matrix
% % We use a matrix of size 1024 ¡Á 1024.
load('C:\Users\Administrator\Desktop\Example_Matrix.mat'); % Load the matrix that is to be converted into a picture
%% Parameter Setting
x = im2double(Example_Matrix); % Improvement of accuracy and Converts pixel values to between 0 and 1
x = squeeze(x(:,:,1)); % Remove the dimension of 1 in the matrix
h = figure(1); % Create window 1 and assign the handle to h
colormap(gray);
imshow(x,[],'border','tight','initialmagnification','fit'); % Display picture in the window without white edge
set([],'CurrentFigure',h); % Sets the window with handle h as the current window, but does not change the order in which the window is displayed
set(gca,'position',[0,0,1,1]); % Set the graphic window margin([0,0,1,1]:Remove margins)
set(gcf,'PaperPositionMode','auto'); % The width and height of the printed window are determined by the dimension of the window on the screen, and the position of the window is adjusted so that the window is centered on the page
set(gcf,'position',[0,0,655.3592, 655.3592]); % Set the output image size
Save_Fig = getframe(gcf); % Get the image file in the coordinate system
Save_Fig.cdata = imresize(Save_Fig.cdata,[size(x,1),size(x,2)]); % The latter is used as the standard for scaling images
Save_Fig.cdata = rgb2gray(Save_Fig.cdata); % Convert to grayscale
%% Save The Picture
saveas(h,'Image_Init.tif');
该文章所提系本人在科研过程中遇到的小问题,本人能力有限,仅能在参考各位大牛的办法后解决自己的小问题。为了解决这一问题检索过许多解决方法,难免在不自觉中可能会借鉴某些博主或个人的文章。现发布只为记录这次解决过程,方便下次遇到相同问题时能够迅速查找到相关资料。如相关博主认为本文有对您造成侵权,请及时联系我。在相关证据充足的情况下,本人会即可删除该文章并于您协商处理。十分感谢!
到了这里,关于MATLAB中输出并保存同矩阵大小相同的图片的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!