matlab图像显示及保存

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab图像显示及保存相关的知识,希望对你有一定的参考价值。

参考技术A 姓名:边颖超

学号:19021210974

利用MATLAB读取一张灰度和彩色图像,查看其对应的元素矩阵,将灰度图像与彩色图像显示出来,并获取该图像的高度、宽度等信息,最后将该图像另存为一幅图像。

利用imread函数读入灰度图片hurricane,并命名为Original Imagel;利用imshow函数可在提前设置的窗口中对读入图片进行显示,本实验设置2*2矩阵窗口,灰度图片显示在第一位置;利用size函数在命令行窗口可得到灰度图片高度、宽度信息。如图1程序所示。

利用imread函数读入RGB图片color,并命名为Original Image2;利用imshow函数可在提前设置的窗口中对读入图片进行显示,本部分设置figure1窗口,2*2矩阵窗口,彩色图片显示在第二位置;利用size函数在命令行窗口可得到彩色图片高度、宽度信息。如图1程序所示。

(2)另存图片有三种方式,可以分别利用print、imwrite、saves三个函数进行保存。三种函数有各自不同的调用格式,如下图程序注释。本实验将figure1中所有显示的图片全部另存为文件名test1格式png图片,保存位置为当前文件夹。如图2程序所示。

(3)最终结果

在 MATLAB 中保存连接的图像

【中文标题】在 MATLAB 中保存连接的图像【英文标题】:Save concatenated images in MATLAB 【发布时间】:2020-11-19 09:04:24 【问题描述】:

我正在尝试连接两个 256x256 图像并使用 imwrite 保存它们。保存的图像应该是 256x512,但是当我加载保存的图像时,大小显示为 343x434x3。我该如何解决?

我使用的代码是:

new_name3 = strcat(f_name_image, '\', kk, '_', num2str(ff), '_pair.png');
pair = [orig_im  noisy_image]; %concatenating two 256x256 images
imagesc(pair)
f = getframe(gca);  
im = frame2im(f);
imwrite(im, new_name3);

【问题讨论】:

【参考方案1】:

在不配置其他选项的情况下,从框架中保存图像可能是有损的。要保留像素信息,请直接从pair(此处为Image_Pair)数组中保存连接的图像。此外,343x434x3 中的第三个维度表示图像的 RGB 颜色通道。

%Grabbing the two images%
Image_1 = imread('Image_1.jpeg');
Image_2 = imread('Image_2.jpeg');

%The file name for the concantenated images%
New_File_Name = "Image_3.jpeg";

%Concatenating the images%
Image_Pair = [Image_1 Image_2];

%Displaying the image pair%
imshow(Image_Pair);

%Saving the image to the "New_File_Name"%
imwrite(Image_Pair, New_File_Name);

%Loading the saved image to see if dimensions are consistent%
Saved_Image = imread('Image_3.jpeg');

【讨论】:

感谢您的回复。我实际上尝试在不使用“getframe”的情况下保存图像。我得到了预期的 256x512 图像,但保存的图像与 matlab 图形窗口中显示的图像不同。我认为,在保存时,它会失去精度,这就是保存的图像混乱的原因。我试图找出 getframe 的其他选项,以便我可以保存图像而不会丢失,但找不到它。你能帮忙吗? 没问题,所以我猜你也需要图形窗口。我会继续的。图窗口中显示的图像和保存的图像在我测试时非常匹配。您可以发布您正在使用的图片吗? 我在帖子中添加了一张我正在使用的图片。所以这是我提到的代码中的“orig_im”。我只是给它添加了一些噪音,得到了一个“noisy_image”。我需要用串联的配对图像构建数据集来训练深度学习模型。我不需要图形窗口,只需要配对图像。我认为您的图像匹配,因为它们的两个像素值都在 uint8 中。但我试图将像素值保存为双倍,这可能是问题的根源。谢谢。 @shaurov2253:您永远不应该通过显示器来修改和保存图像数据。您可以应用 imagesc() 所做的相同转换:img = img-min(img(:)); img = double(img)*255/max(img(:)); img = uint8(img); @saurov2253 您不能将双值数组保存到 JPEG 文件中。 JPEG 始终是 8 位无符号整数。如果要保存浮点值,则需要使用 TIFF 之类的格式(但浮点 TIFF 文件不受广泛支持)或非图像文件格式进行保存。但是你的深度学习模型不需要高精度数据,8 位数据就绰绰有余了。无论如何,这些工具通常都会对图像文件中的数据进行规范化。

以上是关于matlab图像显示及保存的主要内容,如果未能解决你的问题,请参考以下文章

matlab中如何保将显示出来的图像保存

如何用matlab来实现绘制工业摄像机站位的

山东大学数字图像处理实验:MATLAB的图像显示方法

Matlab中如何只把figure中的图像区域保存为图片文件

matlab如何让调整保存图像的大小

MATLAB读取黑白图像显示却是黑色,24位深转8位深黑白图像解决方法