MATLAB中输出并保存同矩阵大小相同的图片

这篇具有很好参考价值的文章主要介绍了MATLAB中输出并保存同矩阵大小相同的图片。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        在使用MATLAB进行图像处理时,图像信息在MATLAB中将以矩阵形式保存。在我们需要将矩阵信息转化为图像进行保存的过程中,经常会出现输出图像的大小与矩阵大小不一致的情况。例如我希望将一个1024×1024大小的矩阵(Example_Matrix.mat)保存为1024×1024大小的图像,但我们实际输出保存的图像可能会是520×460大小,完全不符合我们的预期。

        在本文中,我们利用saveas函数来简要介绍一下如何将图片保存为我们需要的大小。


 注:

  1. imwrite、print函数等也可完成此操作,但本文只涉及saveas函数的介绍。
  2. saveas函数保存的图像默认150dpi,图像保存较为清晰。
  3. 作者水平有限,基本皆为个人理解,仅供参考,如有不当之处请各位前辈同仁批评指正。
  4. 完整代码可在文末获取,详细过程讲解可阅读全文。

1.  figure函数

        Figure命令使用默认属性值创建一个新的图窗窗口,生成的图窗为当前图窗。

        当我们在命令行窗口输入:figure,点击回车后就能看到一个类似于图1的窗口出现在我们界面上。生成的图窗携带有一系列默认属性值,例如包括图窗的颜色、大小等参数。

MATLAB中输出并保存同矩阵大小相同的图片
图 1

 

        我们将figure命令赋予hf(在命令行窗口输入:hf = figure),这时候hf就成为了figure属性的句柄(操作端口)。查看hf,可以看到当前被赋予figure属性的hf的具体参数,如图2。

MATLAB中输出并保存同矩阵大小相同的图片
图2

 

        作为操作端口,可以通过 hf 修改当前生成的窗口的属性。例如我们修改图窗的起始位置和大小(如图3),运行后就可以看到hf窗口发生了我们想要的变换。

MATLAB中输出并保存同矩阵大小相同的图片
图3

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函数使用图窗 PaperPositionPaperPositionMode 属性确定图像的大小,其 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 ” 

   saveas(h,'Image_Init.tif');

3.  查看图片

        完成后点击查看图片,通过属性栏即可看到图片已经符合了我们之前的要求,如图4。文章来源地址https://www.toymoban.com/news/detail-445544.html

MATLAB中输出并保存同矩阵大小相同的图片
图 4

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模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【MATLAB】Matlab输入输出格式及矩阵运算

    我们来看一个例子,计算面积 Area= 可利用指令 input 在萤幕印出提示文字做为交谈式的输入。 r = input(\\\'Type radius:\\\')  % 在两个单引号 \\\' 之间键入提示文字 Type radius: % 现在键入 2 做为半径值 r = 2 area=pi*r^2; % 键入面积算式 name = input(\\\'Your name please: \\\',\\\'s\\\') % 要键入文字则须在加上 \\\'s\\\'

    2023年04月17日
    浏览(33)
  • matlab 设置图形窗口和图片大小 以及legend位置

    按照步骤一步步看代码吧 运行后输出  加上代码set(gcf,\\\'unit\\\',\\\'centimeters\\\',\\\'position\\\',[3 5 10 6]) 这就是对图形的位置及大小进行设置。单位为厘米,图形起点坐标为(3cm,5cm)表示左下点离显示器左侧边界10cm,离下侧边界5cm,边框大小为(10cm,6cm)  继续设置实际的图在figure中的比

    2024年02月11日
    浏览(53)
  • matlab 获取矩阵大小、行数、列数、元素总个数——size()/length()/numel()

    size:获取数组的行数和列数 s=size(A),当只有一个输出参数时,返回一个行向量,该行向量的第一个元素时数组的行数,第二个元素是数组的列数。 [r,c]=size(A),当有两个输出参数时,size函数将数组的行数返回到第一个输出变量,将数组的列数返回到第二个输出变量。 如果在s

    2024年02月11日
    浏览(33)
  • Matlab如何将变量名和矩阵都保存在excel文件

    Matlab保存数据为excel的函数有很多,但是由于matlab每年都在更新,新的函数不断涌现,极大地方便我们运算矩阵。当我很懒没有更新最新版本的matlab时,有些矩阵运算,就只能用相对原始地方法来做。比如2018版本不能用writecell和writematrix函数直接将数据保存excel文件。 matlab

    2024年02月06日
    浏览(34)
  • MATLAB将矩阵输出为txt文本格式

    将m行n列的矩阵输出为文本文件,下面以3×3的矩阵为例,代码如下:  最终会在D盘下生成一个data.txt,其内容如下:

    2024年02月15日
    浏览(34)
  • matlab:输出一维矩阵中所有重复元素的索引

    参考:https://www.zhihu.com/question/496060981

    2024年02月07日
    浏览(38)
  • yolov5检测(前向)输入视频输出(不在图上画标签形式的原)图片的方法,及设置每隔几帧保存的方式(不每帧保存减少重复)

    这些天我忽然有个需求,要更新迭代一个场景的检测模型,甲方爸爸提供的新数据集是监控视频形式的(因为拍视频确实更加的方便),而我训练模型确实要标注好的图片形式。 根据这些条件的话,思路应该是要这样的:首先使用现有的最新一个模型输入视频进行检测,检测结

    2024年01月21日
    浏览(30)
  • Visio/PPT/Matlab输出300dpi以上图片【满足标准投稿要求】

    遵照如下输出选项,另存为tif格式文件时,选择正确输出便是300dpi以上 文件选项选中导出设置,在渲染中选择dpi为600,导出图片即可,科研建议选择tif格式文件 打开注册表,win+r键,输入“regedit”,按照自己ppt的版本找到如下路径的注册文件,新建ExportBitmapResolution文件,按

    2024年02月15日
    浏览(27)
  • MATLAB修改字体大小,加粗,字体样式,字体颜色,线形,希腊字母,特殊符号,图片文本位置及字体设置等

    1、修改label的字体大小、格式、加粗、颜色: xlabel(\\\'标题\\\',\\\'FontSize\\\',14,\\\'FontWeight\\\',\\\'bold\\\',\\\'FontName\\\',\\\'Times New Roman\\\',\\\'Color\\\',\\\'r\\\'); 2、标题的旋转:xlabel(\\\'标题\\\',\\\'rotation\\\',22);ylabel(\\\'标题\\\',\\\'rotation\\\',-35); 3、颜色符号以及线形、标记符号 颜色符号 标记符号 b 蓝色 . 点 g 绿色 s 方块 r 红色 o 圆圈

    2024年02月15日
    浏览(46)
  • opencv使用imshow()输出时怎样设置窗口大小

    在学习OpenCV的过程中,第一步就是要读取图片并输出,但在输出过程中我发现简单地使用cv2.imshow(\\\'winname\\\',path)输出得到的图片常常不能窥全貌,被默认函数一自适应,就显示不完,还太大,因此,我想要自动拉伸窗口尺寸且不改变宽高比。 创建窗口函数cv2.namedwindow()介绍 其中

    2024年02月04日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包