matlab 彩色图像、灰度图像、二值图像和索引图像
彩色图像:每个像素由R、G、B三个分量表示,每个通道取值范围0~255。数据类型一般为8位无符号整形。
灰度图像:每个像素只有一个采样颜色的图像,这类图像通常显示为从最暗黑色到最亮的白色的灰度。
二值图像(黑白图像):每个像素点只有两种可能,0和1.0代表黑色,1代表白色。数据类型通常为1个二进制位。
索引图像:类似于查字典,为了解决彩色图像消耗空间大的问题,一般应用于色彩构成比较简单的场景。
索引图像包括一个数据矩阵X,一个颜色映像矩阵Map。其中Map是一个包含三列、若干行的数据阵列,其中每个元素的值均为[0, 1]之间的双精度浮点型数据。Map矩阵的每一行分别表示红色、绿色和蓝色的颜色值。在MATLAB中,索引图像是从像素值到颜色映射表值的“直接映射”。像素颜色由数据矩阵X作为索引指向矩阵Map进行索引,例如,值1指向矩阵Map中的第一行,值2指向第二行,以此类推。
补充一张图帮助理解:
图中圆圈内的就是索引图像的索引表,下面的就是其对应RGB颜色表。
图中小圆圈处的索引号是5,对应RGB颜色的第5行,所以该处RGB颜色实际是0.2902 0.0627 0.0627
索引图像的作用就是体积小,方便传输,只需要把索引表传输过去,接收方用对应的RGB颜色表还原就行。
[X,map] = rgb2ind(RGB,n)
- 使用最小方差量化和抖动将 RGB 图像转换为索引图像 X。map 最多包含 n 个颜色。n 必须小于或等于 65,536。
function IndexImg(Imgname)%索引图像
I_rgb = imread(Imgname);
[I_index64,Map64] = rgb2ind(I_rgb,64);
[I_index256,Map256] = rgb2ind(I_rgb,256);
figure(1)
subplot(2,1,1),imagesc(I_rgb),title('Origin');
subplot(2,1,2),imagesc(I_index64),colormap(Map64),title('Index_Img64');
figure(2)
subplot(2,1,1),imagesc(I_rgb),title('Origin');
subplot(2,1,2),imagesc(I_index256),colormap(Map256),title('Index_Img256');
end
Map64对应64种颜色!
Map64 =
0.0863 0.0902 0.1020
0.5686 0.5255 0.3569
0.2078 0.2941 0.4510
0.7647 0.7176 0.5529
0.3137 0.2980 0.2039
0.3412 0.5216 0.7725
0.8667 0.8431 0.7529
0.2471 0.3922 0.6431
0.2157 0.2118 0.1490
0.4667 0.6078 0.8078
0.4314 0.4000 0.2667
0.6196 0.7137 0.8588
0.3686 0.3961 0.4510
0.1529 0.2078 0.2824
0.5176 0.5412 0.5843
0.4667 0.6235 0.8745
0.7020 0.7765 0.8824
0.2431 0.2980 0.3647
0.8706 0.9255 0.9843
0.4000 0.5647 0.8353
0.2784 0.4667 0.7412
0.2196 0.3333 0.5412
0.5020 0.4627 0.3020
0.1294 0.1490 0.1804
0.6196 0.5843 0.4275
0.6588 0.6353 0.5608
0.7490 0.8353 0.9843
0.4784 0.5608 0.7412
0.5412 0.6588 0.8784
0.3725 0.3373 0.2157
0.3843 0.4627 0.6275
0.6039 0.6510 0.7569
0.5686 0.7020 0.9412
0.1882 0.2431 0.3490
0.4588 0.4549 0.4471
0.2784 0.2549 0.1843
0.6824 0.7804 0.9765
0.2902 0.3412 0.4510
0.4157 0.4039 0.3490
0.3608 0.5569 0.9294
0.2824 0.3725 0.5490
0.1490 0.1490 0.1255
0.7529 0.7412 0.7020
0.3059 0.4157 0.6353
0.3255 0.3373 0.3529
0.3490 0.4667 0.7020
0.4039 0.5412 0.7647
0.1216 0.1686 0.2471
0.5529 0.5294 0.4431
0.8157 0.8745 0.9843
0.4431 0.4627 0.5412
0.7961 0.8510 0.9059
0.6941 0.6314 0.4392
0.2275 0.2471 0.2784
0.3059 0.3098 0.2745
0.5373 0.6667 0.9333
0.2000 0.2157 0.2157
0.5294 0.6392 0.8078
0.4941 0.4667 0.3686
0.3765 0.3490 0.2706
0.9529 0.9725 0.9882
0.4549 0.6196 0.9725
0.6235 0.7294 0.9490
0.3725 0.4196 0.5412
K>> size(Map64)
ans =
64 3
K>> size(I_index256)
ans =
1080 1920
输出图片:
处理图像的函数
其中用到的工具箱函数:
函数 | 目的 |
---|---|
dither | 采用抖动从RGB图像创建索引图像 |
grayslice | 采用阈值处理从灰度图像创建索引图像 |
gray2ind | 从灰度图像创建索引图像 |
ind2gray | 从索引图像创建灰度图像 |
rgb2ind | 从RGB图像创建索引图像 |
ind2rgb | 从索引图像创建RGB图像 |
rgb2gray |
从RGB图像创建灰度图像 |
im2bw | 从灰度、索引、RGB图象创建二值图 |
mat2gray | 从数据矩阵创建灰度图像 |