MATLAB 图像处理基础:读取、显示与保存图像
掌握图像处理的第一步是学会如何与图像文件进行交互:读取图像到 MATLAB 工作空间,显示图像以观察处理效果,以及保存图像以保留处理结果。本节将结合代码示例,详细讲解这些基础操作,并分析常见问题与解决思路。
目录
1. 图像读取:imread 函数
2. 图像显示:imshow 与 figure
2.1 基础显示:imshow
2.2 多图显示与窗口管理
3. 图像保存:imwrite 函数
4. 常见问题与解决思路
4.1 路径错误
4.2 图像显示异常
4.3 保存后图像失真
1. 图像读取:imread
函数
imread
函数是 MATLAB 中读取图像的核心工具,支持多种格式(如 JPEG、PNG、BMP、TIFF 等)。其基本语法为:
img = imread('filename.format');
关键点:
- 路径问题:若图像不在当前工作目录,需提供完整路径(例如
'C:\images\cat.jpg'
)。 - 数据类型:读取后的图像通常为
uint8
类型(0-255),彩色图像存储为三维矩阵[行, 列, 通道]
,灰度图为二维矩阵。 - 透明度通道:PNG 图像可能包含透明度通道(Alpha 通道),读取后为四维矩阵
[行, 列, RGB, Alpha]
。
% 读取当前目录下的 JPEG 图像
img_color = imread('flower.jpg');
% 读取指定路径的 PNG 图像(含透明度)
img_png = imread('D:\data\transparent_logo.png');
% 查看图像尺寸和通道数
disp(['图像尺寸:', num2str(size(img_color))]);
2. 图像显示:imshow
与 figure
2.1 基础显示:imshow
imshow
函数用于在图形窗口显示图像,自动调整坐标轴并优化显示效果:
imshow(img);
参数扩展:
- 显示范围调整:
imshow(img, [low high])
手动设置灰度范围(常用于显示 double 类型图像)。 - 调整显示大小:
imshow(img, 'InitialMagnification', 100)
控制缩放比例(100% 原尺寸)。
2.2 多图显示与窗口管理
- 创建新窗口:
figure
创建独立窗口,避免图像覆盖。 - 多图排列:
subplot(m,n,p)
将多个图像显示在同一窗口。
示例代码:
% 显示彩色图像
figure;
imshow(img_color);
title('Original Color Image');
% 并排显示原图与灰度图
gray_img = rgb2gray(img_color);
figure;
subplot(1,2,1); imshow(img_color); title('Color');
subplot(1,2,2); imshow(gray_img); title('Grayscale');
3. 图像保存:imwrite
函数
imwrite
函数用于将处理后的图像保存到文件,语法为:
imwrite(img, 'filename.format', 'ParamName', ParamValue, ...);
关键参数:
- 格式选择:文件格式由扩展名决定(如
.jpg
,.png
,.bmp
)。 - JPEG 质量:
'Quality'
参数(0-100,默认 75),控制压缩率与失真。 - PNG 透明度:若图像包含 Alpha 通道,需指定
'Alpha'
参数。 - 数据类型匹配:保存前需确保数据范围正确(例如
uint8
图像值在 0-255)。
示例代码:
% 保存 JPEG 图像
imwrite(img_color, 'high_quality.jpg');
% 保存 JPEG 图像(压缩质量为 90)
imwrite(img_color, 'high_quality.jpg', 'Quality', 90);
% 保存 PNG 图像(带透明度)
imwrite(img_png(:,:,1:3), 'logo_no_bg.png', 'Alpha', img_png(:,:,4));
% 保存灰度图像(注意数据类型转换)
gray_img_double = im2double(gray_img); % 转换为 double 类型(0-1)
imwrite(gray_img_double, 'gray_double.tif');
4. 常见问题与解决思路
4.1 路径错误
- 错误提示:
"File not found"
或"Invalid filename"
。 - 解决方法:
- 使用
cd
命令切换工作目录:cd('D:\images\')
。 - 使用绝对路径:
imread('D:\images\cat.jpg')
。 - 通过
uigetfile
函数交互式选择文件
- 使用
[filename, pathname] = uigetfile({'*.jpg;*.png','Image Files'});
img = imread(fullfile(pathname, filename));
4.2 图像显示异常
- 全白/全黑:可能因数据类型错误(例如 double 类型图像未归一化到 0-1)。
- 修复代码:
imshow(im2double(img))
或imshow(img, [])
(自动缩放)。
- 修复代码:
- 颜色失真:通道顺序错误(如 BGR 与 RGB 混淆)。
- 修复代码:调整通道顺序:
img_rgb = img(:,:,[3 2 1]);
- 修复代码:调整通道顺序:
4.3 保存后图像失真
- JPEG 压缩失真:提高
'Quality'
参数或换用无损格式(如 PNG)。 - 颜色异常:保存时未正确保留色彩空间,需检查通道顺序和数据类型。