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图像显示及保存的主要内容,如果未能解决你的问题,请参考以下文章