MATLAB图像处理(一):图像转灰度图及图像采样和量化
·
一、定义
灰度图:实现将RGB图像或彩色图转换为灰度图像。
采样:将(空域或时域)连续的图像离散化为离散采样点(像素),从中均匀间隔或不均匀间隔地选择。
量化:将像素的灰度(浓淡)变换成离散的整数值(黑为0,白为255)。量化的细致程度决定灰度级数(浓淡层次)的丰富程度。
二、思路
将图像读取后转化为数字矩阵。
消除图像色调和饱和度,同时保留亮度。
注:区别于二值图(二者也有联系,二值图见主页)
三、代码实现
3.1 灰度图转化
实际是将RGB三维图转化为二维图。
I = imread('keyan.jfif') ; % 读取图像信息-- I 是三维矩阵
subplot(121)
imshow(I); % 输出原图
title('原始图像(256色)')
Ih=rgb2gray(I); % 三维彩图转化为二维灰度图
subplot(122)
imshow(Ih) % 输出灰度图
灰度图的转化结果如下:
3.2 采样
如果不用rgb2gray命令转化为二维灰度图,则采样时会出现RGB三个方向上的三张采样图。
采样时可以进行间隔采样,选取原来矩阵中的部分数据。
I = imread('keyan.jfif') ; % 读取图像信息-- I 是三维矩阵
subplot(231)
imshow(I); % 输出原图
title('原始图像(256色)')
Ih=rgb2gray(I); % 三维彩图转化为二维灰度图
subplot(232)
imshow(Ih) % 输出灰度图
title('灰度图')
I2=Ih(1:2:end,1:2:end); % 行列方向分别每隔一位采样一个点
subplot(233);
imshow(I2)
title('采样图像(128*128)');
I3=Ih(1:4:end,1:4:end); % 行列方向分别每隔三位采样一个点
subplot(234)
imshow(I3)
title('采样图像(64*64)');
I4=Ih(1:8:end,1:8:end);
subplot(235);
imshow(I4)
title('采样图像(32*32)');
I5=Ih(1:16:end,1:16:end);
subplot(236);
imshow(I5)
title('采样图像(16*16)');
灰度图的采样结果如下:
随采样点数减少,图像越加模糊,采样越细,像素越小,越能精细地表现图像。若图像含有丰富的细节,则需尽可能多选取采样点。
3.3 量化
由于MATLAB图像为RGB三色,量化图像时所得到的信息是三维,故也需先转化为二维灰度图。
量化时可调用histeq() 函数来改变图像的灰度级数。
注:'histeq' 需要工具箱 Image Processing Toolbox.
I1=histeq(Ih,64); % 将图像灰度级数改为64
I2=histeq(Ih,32);
I3=histeq(Ih,16);
I4=histeq(Ih,4);
I5=histeq(Ih,2); % 这也是二值图的命令
subplot(2,3,2),imshow(I1),title('量化图像(64色)');
subplot(2,3,3),imshow(I2),title('量化图像(32色)');
subplot(2,3,4),imshow(I3),title('量化图像(16色)');
subplot(2,3,5),imshow(I4),title('量化图像(4色)');
subplot(2,3,6),imshow(I5),title('量化图像(2色)');
量化结果如下:
随着灰度级数的降低,图片细节越来越不清晰。二值图甚至出现假轮廓。当图像色彩变化较缓,细节很少时,可以采用细量化以避免图像出现假轮廓。
更多推荐
已为社区贡献3条内容
所有评论(0)