Matlab照片实现正值灰度,负值红色显示

目录

一、前言

二、图像的基本操作

三、实现正值灰度,负值红色显示


一、前言

本来用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;

 效果示例:

Matlab照片实现正值灰度,负值红色显示_第1张图片

 

 

你可能感兴趣的:(matlab,图像处理)