Matlab实现伪彩色处理:灰度图像转换为彩色图像

灰度图像可以简单理解为一个灰度值矩阵,其中灰度值的取值范围是[0, 255],且灰度值为整数。

现在需要将这个灰度值矩阵中的每一个值拆分成3个通道(RGB),分别是红色通道(red, R)、绿色通道(green, G)和蓝色通道(blue, B)。这里就需要自己定义一个映射函数,比如我规定灰度值小于128的点,它们对应的红色通道的值为30,就可以写作

R(x,y)=30,\quad\quad X(x,y)<128

这里的R是红色通道矩阵,X是灰度值矩阵。

一般地,我给出一个任意的映射函数如下。

R(x,y)= \left\{\begin{matrix} 30 & X(x,y)<128\\ 2*X(x,y)-150& 128\leq X(x,y)< 192\\ 234& X(x,y)\geq 192 \end{matrix}\right.

则其对应的matlab的转换函数如下。

%% 红色通道映射函数
function R = redTransformer(X)
R = zeros(size(X));
R(X < 128) = 30;
R(128 <= X & X < 192) = 2*X(128 <= X & X < 192)-150;
R(192 <= X) = 234;
end

类似地,给出三个通道的函数表达式和matlab代码

Matlab实现伪彩色处理:灰度图像转换为彩色图像_第1张图片

matlab中的函数可以嵌套,于是我将RGB三色的映射函数均放置在gray2rgb.m文件中。

gray2rgb.m

%% 灰度图转换为彩色图
function I = gray2rgb(X)
R = redTransformer(X);
G = greenTransformer(X);
B = blueTransformer(X);
I(:,:,1) = R;
I(:,:,2) = G;
I(:,:,3) = B;
I = uint8(I);
end

%% 红色通道映射函数
function R = redTransformer(X)
R = zeros(size(X));
R(X < 128) = 30;
R(128 <= X & X < 192) = 2*X(128 <= X & X < 192)-150;
R(192 <= X) = 234;
end
%% 绿色通道映射函数
function G = greenTransformer(X)
G = zeros(size(X));
G(X < 90) = 2*X(X < 90)+40;
G(90 <= X & X < 160) = 180;
G(160 <= X) = 0;
end
%% 蓝色通道映射函数
function B = blueTransformer(X)
B = zeros(size(X));
B(X < 64) = 115;
B(64 <= X & X < 128) = 510-4*X(64 <= X & X < 128);
B(128 <= X) = 36;
end

主函数

clear, close all
% 辣椒彩色图
im_rgb = imread('peppers.png');
subplot(1,3,1), imshow(im_rgb)
% 彩色图转灰度图
im_gray = rgb2gray(im_rgb);
subplot(1,3,2), imshow(im_gray)
% 灰度图转彩色图
im_gray2rgb = gray2rgb(im_gray);
subplot(1,3,3), imshow(im_gray2rgb)

Matlab实现伪彩色处理:灰度图像转换为彩色图像_第2张图片 

 

你可能感兴趣的