用MATLAB进行图像处理

图像处理概念、算法和MATLAB

数字图像处理用MATLAB:写图像文件

今天的帖子是正在进行的使用MATLAB进行数字图像处理的系列教程.我大致按照书中所使用的顺序来介绍主题基于MATLAB的数字图像处理

MATLAB函数imwrite将图像数据写入各种不同的格式,包括:从各种格式读取图像数据,包括JPEG、JPEG 2000、TIFF、PNG和GIF(以及一些不再常用的旧格式)。

可能大多数人使用的表单只提供图像数组和文件名。

我将阅读图像处理工具箱中的一个示例图像来进行实验。

rgb = imread (“peppers.png”);imshow (rgb)
imwrite (rgb,“mypeppers.tif”

在以上呼吁imwrite,函数根据文件名中的扩展名(.tif)来决定使用哪种图像格式。

不过,有时您可能希望将文件名扩展名用于不同的目的。在这种情况下,你调用pass第三个参数imwrite让它知道要使用哪种图像格式。

imwrite (rgb,“test_image.study_013”气管无名动脉瘘管的' '

大多数图像文件格式都支持某种形式的压缩。万博1manbetx这意味着映像占用的磁盘空间比根据简单计算得出的要少。例如,rgb上面的数组占用内存大约576千字节。

bytes_in_memory_peppers =元素个数(rgb)
bytes_in_memory_peppers = 589824

但是当您将它保存为使用压缩的图像格式时,它在磁盘上占用的空间更小。让我们尝试写入一个PNG文件:

imwrite (rgb,“mypeppers.png”) info = iminfo (“mypeppers.png”);bytes_on_disk_peppers_png = info。文件大小
bytes_on_disk_peppers_png = 287589
Compression_ratio = bytes_in_memory_peppers / bytes_on_disk_pepper_png
compression_ratio = 2.0509

PNG格式使用无损压缩.这意味着您可以准确地恢复原始图像数据。

peppers2 = imread (“mypeppers.png”);peppers2 isequal (rgb)
ans = 1

当图像有很大的常数区域或包含某些重复的、可预测的模式时,无损压缩方法可以节省更多的空间。例如,这张图片是一个MATLAB绘图的屏幕截图:

url =“https://blogs.mathworks.com/images/steve/2012/plot_screen_shot.png”;rgb_plot = imread (url);bytes_in_memory_plot =元素个数(rgb_plot)
bytes_in_memory_plot = 336000
信息= imfinfo (url);bytes_on_disk_plot = info。文件大小
bytes_on_disk_plot = 3284
Compression_ratio = bytes_in_memory_plot / bytes_on_disk_plot
compression_ratio = 102.3143

这是一个相当大的压缩比!

其他图像文件格式,如JPEG,使用有损压缩.(有一种无损格式的JPEG,但它晦涩难懂,很少使用。)通过有损压缩,利用人类视觉系统的特性来进一步减小磁盘大小,但要付出代价——原始像素不能完全恢复。让我们使用JPEG压缩写出pepper图像。

imwrite (rgb,“peppers.jpg”);信息= imfinfo (“peppers.jpg”);bytes_on_disk_peppers_jpg = info。文件大小
bytes_on_disk_peppers_jpg = 23509
Compression_ratio_peppers_jpg = bytes_in_memory_peppers /...bytes_on_disk_peppers_jpg
compression_ratio_peppers_jpg = 25.0893

这比我们用PNG格式得到的压缩比要大得多。代价是降低了图像质量。JPEG在减少空间方面做得很好,而且不影响图像质量:

imshow (“peppers.jpg”

但它并不完美,你可以通过放大看到。

次要情节(1、2、1)imshow (“peppers.png”) limit = [232 276 215 248];轴(限制)标题(“原始”次要情节(1、2、2)imshow (“peppers.jpg”轴(限制)标题(JPEG压缩的

你可以看到在茎周围的压缩伪影。

压缩工件往往更容易在图像上看到,如上面的情节屏幕截图。

imwrite (rgb_plot“plot_screen_shot.jpg”rgb_plot_compressed = imread(“plot_screen_shot.jpg”);次要情节(2、2、1)imshow (rgb_plot)标题(原始图像的) limit = [80 105 210 230];轴(限制);次要情节(2 2 2)imshow (rgb_plot_compressed)标题(JPEG压缩的)轴(限制);Subplot (2,2,3) imshow(rgb_plot) limit = [345 380 240 265];轴(限制);次要情节(2,2,4)imshow (rgb_plot_compressed)轴(限制);

这就是为什么我通常使用PNG作为许多MATLAB图形的屏幕截图。另一方面,对于更复杂的图像,我通常使用JPEG。

有关更多信息,请参见第2.4节基于MATLAB的数字图像处理

请参阅参考页imwrite,以及section读写图像数据在图像处理工具箱用户指南中。




MATLAB®7.13发布

|
  • 打印
  • 发送电子邮件

评论

要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。