matlab打开matlab,用最简单的imread方法读取一个图像
clc
clear
img_h=imread('hua.jpg');
返回一个数组(矩阵),往往是a*b*c unit8 类型
解释一下这个三维数组的意思,行数、数和层数 ,
unit8:指数据类型,无符号八位整形,可理解为0~2^8的数
三个层数分别代表RGB三个通道
图像rgb最常用的是24-位实现方法,即RGB每个通道有256色阶(2^8)。基于这样的24-位RGB 模型的色彩空间可以表现 256×256×256 ≈ 1670万色
当imshow传入了一个二维数组,它将以灰度方式绘制;
可以把图像拆分为rgb三层,可以以灰度的方式观察它
figure(1)
for i=1:3
subplot(1,3,i);
imshow(img_h(:,:,i));%按灰度图显示了
end
matlab官方rgb转灰度图的函数为 rgb2gray(),这个函数实际上就是在rgb中找到了最平衡的一个值;再进行imshow()
可以直接把rgb相加取均值,或者取最大值,或者在RGB坐标系中取点在R=G=B直线上的投影;
rgb2gray()采用第三种方法
另外,matlab提供了索引图像读取
[A,map] = imread(___)
将 filename
中的索引图像读入 A
,并将其关联的颜色图读入 map
。图像文件中的颜色图值会自动重新调整到范围 [0,1]
中。
返回值 A
是 uint8
类型的 二维数组。颜色图 map
是 double
类型的 Q×3 矩阵,因此索引图像中有 Q 种颜色。
但是索引图像并不常见,如果你对着一副下载的图片进行上述操作,往往只能获得一个三维矩阵和一个空的map。
matlab提供了RGB转索引图像的方法:
[X,cmap] = rgb2ind(RGB,Q)
使用具有 Q
种量化颜色的最小方差量化法并加入抖动,将 RGB 图像转换为索引图像 X
,关联颜色图为 cmap
。
[RGB,map]=rgb2ind(img_h,256);%最多支持2^16种颜色
subplot(1,2,1)
imshow(img_h)
subplot(1,2,2)
imshow(RGB,map)
Q是最小方差量化法所用的量化颜色的数量,指定为小于或等于 65536 的正整数。返回的颜色图 cmap 包含 Q
种或更少的颜色。
当把Q设置的比较小的时候
subplot(1,4,1)
imshow(img_h)
title('原图')
subplot(1,4,2)
[RGB,map]=rgb2ind(img_h,4);
imshow(RGB,map)
subplot(1,4,3)
[RGB,map]=rgb2ind(img_h,16);
imshow(RGB,map)
subplot(1,4,4)
[RGB,map]=rgb2ind(img_h,256);
imshow(RGB,map)
利用这一点可以给图像打马赛克哈
写着玩,尽量做到正确严谨,也可以当作自己的复习资料