目录
一、前言
二、图像的基本操作
三、实现正值灰度,负值红色显示
本来用matlab不算多,用去做图像处理的就更少了,但莫名其妙总会有用到它的地方,比如大四的一门选修课,比如研究生的矩阵论,都需要用它来图像处理。然后就总结了一下,诞生了这篇。
1.读入 imread 函数
X = imread('face.jpg');
2.显示某个颜色分量
matlab读入的彩色图像的数据是三维的,比如读入后数据显示 50x50x3 ,表示该图有50x50个像素点,第三个维度为RGB图层,第一层为红色分量,第二层为绿色分量,第三层为蓝色分量。
使用以下代码可以分别查看三个分量效果。
subplot(141),imshow(X(:,:,1)),title('红色分量');
subplot(142),imshow(X(:,:,2)),title('绿色分量');
subplot(143),imshow(X(:,:,3)),title('蓝色分量');
subplot(144),imshow(X),title('原始图像');
3.灰度处理
已有方法或者公式很多,这里采用其中一种
f = 0.3*X(:,:,1)+0.59*X(:,:,2)+0.11*X(:,:,3);
4. 图片显示
imshow 函数,支持数据类型:single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
不同类型的范围会有不同,如 uint8 是 0-255 的,double 的是 0-1 ,超出会导致显示异常。
imshow(X);
实际上就是根据阈值,是否达到阈值显示颜色不同。正负值不同即阈值为0。
%W 为原始数据,元素值有正负的二维矩阵
W_new = zeros(50*50,r,3); %前两维大小与原始数据大小一致,因为不同颜色所以新数据是三维的
W_new(:,:,1) = (W>0).*W+(W<0).*W*(-1); %正值三个图层都要赋值,负值只给第一图层(红色)
W_new(:,:,2) = (W>0).*W;
W_new(:,:,3) = (W>0).*W;
效果示例: