图像处理基础
1、 图像数据类型
最常用到的数据类型是double(双精度浮点型[0,1],(8字节/像素)64位表示一个像素),uint8(无符号8bit整数,[0,255],1字节/像素),logical(值为0或1,)。使用double是为了保证在运行过程中中间数据的精度;uint8是因为很多的图像都是采用8位二进制表示亮度分量的;logical可以应用到形态学、图像分割和图像识别等领域。
(1) double数据类型
在不做特殊规定的情况下,生成的一切数据都是double类型,但double类型的图像数据取值范围通常是0~1,其中0表示分量最低的值(在灰度图像中为黑色),1表示分量高的值(在灰度图像中为白色)。Double类型可以表示负数,所以在图像处理中,常用double类型保存图像的中间处理结果,并且用double类型进行操作不会损失数据精度,所以经常将图像转化为double进行处理,处理完之后再转化为用户希望的数据类型。
(2) uint8数据类型
unit8数据类型无须担心由于结果的值越界而影响显示,但是由于数据类型的限制,很多处理的中间结果都将丢失。
Isa()函数可以判断变量是否为给定的数据类型,
Class()函数可以直接输出变量的数据类型,
(3) logical数据类型
logical类型
2、 数据类型的转换
名称 | 将输入转换为 | 有效的输入图像数据类型 |
Im2uint8 | Uint8 | Logical,uint8,uint16,double |
Im2uint16 | Uint16 | Logical,uint8,uint16,double |
Mat2gray | Double | 各种类型 |
Im2double | Double | Logical,uint8,uint16,double |
Im2bw | Logical | uint8,uint16,double |
其中,mat2gray函数可以将各种类型的输入图像都装换为[0,1]之间的double类型,并可以对图像进行归一化。
Im2bw函数可以设定函数的阈值,小于阈值的为0,大于阈值的为1.
3、 图像类型
亮度图像,二值图像,索引图像和RGB图像,这四种图像几乎涵盖了所有的图像处理中遇到的图像。亮度图像只变现在某一个彩色空间的分量,二值图像是取值只为0和1的亮度图像,RGB图像可以看成是三幅分别在R,G,B三个颜色分量上的亮度图像合成在一起的彩色图像,索引图像则是引入了颜色查找表来表示彩色图像。比起RGB图像,索引图像能表达的色彩数目往往较少,正是如此,可以用较少的二进制比特数来表示常用的色彩。
(1) 亮度图像
亮度图像是一个二维的数据矩阵,矩阵中的每一个元素的下标都对应其在图像中的位置即行列式光标,元素的值表示对应位置的亮度值。亮度和灰度在单色(灰色)图像是一致的,但涉及彩色图像时,亮度可以用来表示某个色彩空间中一个彩色图像分量的大小。亮度图像像素的数据类型可以是double,uint8,uint16类型,其范围分别是[0.1],[0.255],[0.65535].亮度为1的double型像素点,亮度为255的uint8型像素点和亮度为65535的uint16型像素的亮度是一样的。
(2) 二值图像
一副二值图像是一个取值只有0和1的逻辑类型的二维图像。从某种意义上说,二值图像可以看成是一个特殊的亮度图像。二值图像的数据必须是logical类型,一个取值包含0和1的uint8类型的数组在MATLAB中并不认为是二值图像,而被认为是具有256个亮度级的亮度图像,由于uint8类型的最高亮度的值是255,所以0和1都表示极暗的亮度。
(3) RGB图像
通过对红,绿,蓝三个颜色通道的变换以及它们相互之间的叠加来得到各种各样的颜色。一副RGB图像在MATLAB中通过一个M*N*3的三维数组来表示,其中每一个彩色像素点都是在特定空间位置的彩色图像相对应的红,绿,蓝三个分量。
(4) 索引图像
一种把像素值直接作为RGB调色板下标的图像。索引图像可以把像素值直接映射为调色板数值。在MATLAB中,索引图像有两个分量,即整数的数据矩阵X和彩色映射矩阵map(颜色查找表)。颜色查找变map是一个大小为m*3的矩阵,并且矩阵中所有的元素值都是在[0,1]的范围内的double类型数值,如果在[0,1]范围之外的数值存在,则map下不能作为颜色查找表使用。Map的长度m同它所定义的颜色数目相等,map的每一行都定义了每一种颜色的红,绿,蓝三个分量。索引图像将像素的亮度值直接映射到彩色值。每个像素的颜色都是由对应的整数矩阵X的值作为颜色查找表map的地址产生的map中的[R,G,B]颜色向量决定的。无论X为何种类型,小于1的数值都将作为1输入到颜色查找表中,大于长度m的值都将作为m输入到颜色查找变中,所以索引图像中,double类型数据的有效范围为[1,m],而不再是[0,1].
一旦得到颜色查找表矩阵,就可以利用以下语句将mapname表示的颜色查找设置为MATLAB系统的颜色查找表。
当需要调用系统当前的颜色查找表时,可以直接使用colormap。
其中,MATLAB提供的一些预定义的颜色查找表。默认情况下,这些颜色查找表的长度都是64位,如果想要其他长度,可以调用函数:
比较常用的就是利用gray(256)函数得到256个灰度级。
下面代码是显示颜色查找表写的一个函数:
:
(5) windows颜色查找表的显示
对颜色查找表稍作变换就可以作为RGB图像输出。下面以windows画图工具使用的16、256色的颜色查找表的。
第一步,制作索引图像的图像文件。
在windows的画图工具中任意打开一张彩色图像,单击菜单中的“另存为”按钮可以将彩色图片保存为多种图像格式,这里保存为16位的位图16se.bmp和256色位图256se.bmp。
第二步,读入索引图像数据和颜色查找表。
在MATLAB中,输入如下命令读入图像
第三步,显示颜色查找表。
显示图像如下:
原来编辑器会自动过滤掉图像,之前的几篇都是先写在word上后粘贴过来的,没有注意就发上来了,以后要注意。