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色)');

量化结果如下:

随着灰度级数的降低,图片细节越来越不清晰。二值图甚至出现假轮廓。当图像色彩变化较缓,细节很少时,可以采用细量化以避免图像出现假轮廓。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>