当前位置: 首页 > article >正文

MATLAB画图分辨率、图像大小研究

MATLAB画图分辨率、图像大小研究

  • Figure属性中 InnerPosition Position OuterPosition区别
  • 画图与打印的分辨率和图像大小研究
    • 首先明确两个概念:
    • MATLAB实操画图

Figure属性中 InnerPosition Position OuterPosition区别

在画图的时候,我们经常需要设置Figure属性,其中就有三个属性是有关图像大小的。

在这里插入图片描述

通过测试和查阅资料,他们三者之间的区别可以这么概括:

Position和InnerPosition没有区别,不包括边框、菜单栏、工具栏和标题栏等的大小
OuterPosition则是包括了边框,菜单栏、工具栏和标题栏的大小。

如下图所示,蓝色框是InnerPosition或Position,红色框是OuterPosition。
由于我们画图的最终结果是不需要边框、菜单栏、工具栏的,所以我们一般设置InnerPosition或Position,而不去设置OuterPosition

在这里插入图片描述

画图与打印的分辨率和图像大小研究

首先明确两个概念:

一、对于一个已经确定的jpg或者png格式的图像:

  1. 当图像的大小单位“像素” 时,像素数永远是恒定的;
  2. 当图像的大小是cm inch这种单位时,其cm数或者inch数是变化的,这与系统分辨率、或者打印分辨率有关。

例如一个图像的大小以像素为单位时,是 300 × 300 300\times300 300×300
那么假设打印分辨率是300dpi,那么打印出来的图像大小就是 1 inch × 1 inch 1 \text{inch} \times1\text{inch} 1inch×1inch
假设打印分辨率是600dpi,那么打印出来的图像大小就是 0.5 inch × 0.5 inch 0.5 \text{inch} \times0.5\text{inch} 0.5inch×0.5inch


二、在使用MATLAB画图的时候,使用不同的分辨率保存图像,保存的分辨率不同,生成图像的像素数也就不同。(MATLAB画出来的图可以看作矢量图,保存的图像是位图,这个保存的过程可以看作矢量图向位图转换)

例如使用MATLAB画了一个 10 inch × 10 inch 10\text{inch}\times10\text{inch} 10inch×10inch的图,如果用 96 96 96dpi来打印成jpg格式,那么打印出来的图的大小就是 960 × 960 960\times960 960×960像素,如果用 192 192 192dpi来打印成jpg格式,那么打印出来的图的大小就是 1920 × 1920 1920\times1920 1920×1920像素


这两个概念对我们画图确定图像大小时至关重要。

MATLAB实操画图

在使用MATLAB画图的时候,最终输出的图像大小与画图时候设置打印输出设置二者有关。
画图时候设置也就是设置Figure对象的Position
打印输出设置也就是使用print函数时候调用的分辨率参数,例如'-r96'表示以96dpi分辨率打印。

举个例子:

这种情况下,使用设置Figure对象的Position的像素值为 800 × 600 800\times600 800×600,设置的打印分辨率是96dpi

clear

x = 0:0.01:2*pi;
y = sin(x);

% 创建一个新的图形窗口
fig = figure;
plot(x,y)

dpi = 96;

fig.Units = "pixels";
fig.Position = [100, 100, 800, 600]; % 设置图形窗口的位置和大小
fig.Color = [1, 1, 1]; % 设置图形窗口的背景颜色为白色

print(fig, 'saved_figure1.jpg', '-djpeg', ['-r', num2str(dpi)]);

最终输出的图像大小像素值就是 800 × 600 800\times600 800×600,通过查看图像属性,发现确实如此:

在这里插入图片描述

如果我想以更高的分辨率打印,那么结果如何?请看下面的例子:

此时使用设置Figure对象的Position的像素值仍然为 800 × 600 800\times600 800×600,但是打印分辨率变成了600dpi。

clear

x = 0:0.01:2*pi;
y = sin(x);

% 创建一个新的图形窗口
fig = figure;
plot(x,y)

dpi = 600;

fig.Units = "pixels";
fig.Position = [100, 100, 800, 600]; % 设置图形窗口的位置和大小
fig.Color = [1, 1, 1]; % 设置图形窗口的背景颜色为白色

print(fig, 'saved_figure1.jpg', '-djpeg', ['-r', num2str(dpi)]);

此时查看图片属性,发现如下此时宽度为 5000 5000 5000像素,高度为 3750 3750 3750像素,而且分辨率仍然是96dpi,和设置的完全不一样这是咋回事?
在这里插入图片描述

我的理解是这样:

  1. 首先,画图时候设置宽和高分别是 800 800 800 600 600 600像素,由于windows系统一个像素是1/96inch,所以,画出来的矢量图的大小就是 800 ÷ 96 = 8.33 800\div96=8.33 800÷96=8.33inch宽和 600 ÷ 96 = 6.25 600\div96=6.25 600÷96=6.25inch高。(MATLAB画的是矢量图,矢量图不存在分辨率、像素这种说法,只有多少inch大小这种说法;而画图时候设置的像素只是为了确定这个矢量图的inch大小)。

  2. 然后,由于以600dpi进行打印,那么打印出来的像素数就是 8.33 × 600 = 5000 8.33\times600=5000 8.33×600=5000宽和 6.25 × 600 = 3750 6.25\times600=3750 6.25×600=3750高。所以打印得到的图像的 5000 5000 5000 3750 3750 3750是这么来的。

那么为什么这里分辨率还是96dpi?而不是600dpi?
因为这里600dpi只是用来打印,确定jpg图的像素数的,而windows系统分辨率默认是96dpi,所以这里仍然是显示96dpi。这就与前面提到的第一个概念“确定图像的像素数恒定不变,但是大小、分辨率会随着系统、打印分辨率而变化”是一致的。


http://www.kler.cn/news/136626.html

相关文章:

  • 3D、VR、AR技术的应用,对家电品牌营销有哪些影响?
  • 【随便聊聊】MySQL数据类型详解:从基础到高级应用
  • jQuery快速填充非form数据
  • Windows通过netsh控制安全中心防火墙和网络保护策略
  • 【GISBox使用指南】免费实现影像切片的工具,还支持多种格式服务发布!
  • C++共同体
  • 使用drawio的图层构建更强大的图表
  • 剪辑视频怎么把说话声音转成文字?
  • 【面试】你有使用过链路追踪技术吗?
  • 什么样的企业可以使用免费版的CRM?
  • Sql Server 2017主从配置之:发布订阅
  • TensorFlow实战教程(二十八)-Keras实现BiLSTM微博情感分类和LDA主题挖掘分析
  • 软件测试/测试开发/人工智能丨​Python运算符解析,小白也能轻松get
  • 【前端学java】java中的字符串操作(10)
  • 国产低功耗Sub-1G全频段收发一体芯片DP4306遥控器、智能抄表、工业控制等应用。
  • Java 多线程进阶
  • uni-app - 弹出框
  • Qt程序打包成.exe可执行文件
  • SpringCloud微服务通信两种方式Feign和Dubbo:Feign基本使用、自定义配置、使用优化;Dubbo基本实现
  • Linux 基本语句_11_无名管道文件复制
  • 【Java源码】智慧工地云平台:工地管理专家
  • 【深入Scrapy实战】从登录到数据解析构建完整爬虫流程
  • .skip() 和 .only() 的使用
  • 打工人必备!6个超级实用的办公软件,让你高效完成工作
  • Android 9.0 设备蓝牙、位置、WIFI、NFC功能默认关闭
  • GitLab的个人仓库转移到团队仓库