小白学习图像处理1——图像的构成和数据类型
小白学习图像处理1——图像的构成和数据类型
在数字图像处理领域,理解图像的构成和数据类型是入门的基础。本文将从灰度图和彩色图的存储方式入手,介绍常见的图像数据类型及其特点,帮助读者建立对数字图像的基本认知。
一、数字图像的构成
1. 灰度图的构成
灰度图使用一个二维矩阵来存储图像信息,矩阵中的每个元素代表了像素点的亮度。灰度值通常在0到255之间,0表示黑色,255表示白色。下图展示了通过MATLAB的surf函数立体展示的随机生成的灰度图,直观地展示了灰度值与像素点亮度的关系。
2. 彩色图的构成
彩色图像使用三个二维矩阵来存储,分别对应红(R)、绿(G)、蓝(B)三个颜色分量的强度。对于uint8类型的图像,每个颜色分量的取值范围为0到255,通过不同的RGB组合可以生成多达2^24种颜色。下图展示了一张随机生成的彩色图像。
二、图像数据类型
1. 灰度图的生成
在数字图像处理中,灰度图是常用的数据类型。灰度图可以通过以下公式生成:
Gray = R * 0.299 + G * 0.587 + B * 0.114
这个公式体现了人眼对绿色的敏感度较高,因此绿色分量的权重最大。
2. uint8类型
uint8类型的数据取值范围为0到255之间的整数,255表示白色,0表示黑色。如果要将double类型的图像(取值范围为0到1)转化为uint8类型,可以通过以下两种方法实现:
- img = uint8(img);
- img = round(255 * img);
需要注意的是,由于uint8数据仅取整数值,所以需要加一个round函数进行四舍五入。
3. double类型
double类型的图像像素取值范围为0到1的小数,0表示黑色,1表示白色。对图像的处理通常先将图像转化为double类型。如果直接显示uint8类型的处理结果,可能会出现全白的情况,此时需要先将图像转化为double类型。
此外,如果没有先进行类型转换,也可以使用imshow(img, [])来自动调整图像范围显示图像。
4. logic类型
logic类型的图像是一种二值图像,数据只能取0和1,0表示黑色,1表示白色。在MATLAB中可以使用im2bw函数将图像转化为二值图像,threshold参数用于设置阈值,取值范围为0到1之间的浮点数。
5. mat2gray函数
mat2gray函数可以将任何一组数据归一化到0到1之间,这里的归一化是使得数据最小值为0,最大值为1。与im2double不同,mat2gray是基于数据的最小值和最大值进行归一化的。
当图像整体偏黑或者整体偏亮的时候,除了均衡化,还可以试试这个函数!