1.掌握颜色模型的转换并能编程实现。
2.理解伪彩色映射原理并掌握伪彩色图像增强的方法。
3.掌握彩色图像处理的方法。
4.加深对几种常用的图像增强方法的理解。
1.颜色空间
颜色模型是描述如何用一组值表达颜色的抽象数学模型,色域是指一个色彩系统能够生成的颜色总和,色域与颜色模型一起定义了颜色空间。各种彩色成像、显示和打印设备都有各自的颜色空间,称为设备依赖的颜色空间;颜色的表示方法独立于设备,称为设备无关的颜色空间。大多数的彩色图形显示设备一般是使用红、绿、蓝三原色,真实感图形学中的主要颜色模型也是RGB模型,但是红、绿、蓝颜色模型用起来不太方便,它与颜色概念如色调饱和度和亮度等没有直接的联系。
颜色模型主要有RGB、HSV、YCbCr、NTSC等。
RGB是从颜色发光原理出发来设计的,RGB模型分为3个颜色通道,即红®、绿(G)、蓝(B),RGB色彩模式使用RGB模型为图像中每一个像素的RGB分量分配一个0~255范围的强度值。RGB图像只使用3种颜色,就可以使他们按照不同的比例混合,在屏幕上重现16777216中颜色,每个颜色通道每种色各分为255阶亮度,0为最暗,1为最亮。
HSV模型是一种符合主观感觉的颜色模型。H、S、V分别是色调、色饱和度和亮度。在这个模型中,一种颜色的参数由H、S、V三个分量构成的三元组。HSV不同于RGB模型的单位立方体,而是对应于一个圆柱坐标系中的一个立体锥形子集。在这个锥形中。边界表示不同的色彩。H分量表示颜色种类,取值范围为01,相应的颜色从红、黄、绿、蓝绿、蓝、紫到黑变化,且它的值由绕V轴的旋转角决定,每一种颜色与它的补色之间相差180°。S分量的取值范围也是01,表示所选色彩的最大纯度的比例。相应的颜色从未饱和灰度向完全饱和(无白色元素)变化,当S=0.5时表示所选色调的纯度为1/2。V分量取值范围同样是0~1,从锥形顶点0变化到顶部1,相应的颜色逐渐变亮,顶点表示黑色,顶部表示色彩强度最大。
2.伪彩色映射
伪彩色变换是将输入像素的灰度级发送至R、G、B颜色通道,在每一个颜色通道,执行独立的灰度级变换,将3个变换结果合成一幅伪彩色图像。颜色查找表的索引号与图像本身的像素值之间存在一定的变换关系。
伪彩色变换的过程
3. 真彩色图像处理
真彩色处理一般有三种方法:
(1) 将RGB彩色图像的各个分量作为灰度图像单独处理,然后再将单独处理的分量图像合并成为彩色图像;
(2) 将RGB颜色空间转换为亮度分量与色度分量分离的颜色空间,仅处理亮度分量,再将处理结果转换回RGB颜色空间;
(3) 直接在向量空间进行处理。
彩色图像的平滑和锐化处理是以邻域内彩色像素的处理为基础的,彩色图像邻域处理的像素是向量,颜色通道之间具有相关性。设像素处的颜色向量为,灰度图像的线性平滑运算可以直接推广到彩色图像的平滑处理。
对于RGB彩色图像,彩色像素的拉普拉斯变换表示为:
对3个颜色分量同时进行拉普拉斯变换有时会使锐化结果过尖锐且边缘发生颜色失真。
1.从图库中读取一个彩色图像,将RGB图像转换为HSV图像(rgb2hsv函数),分别显示HSV三分量的图像,观察各分量图像,并适当增大或减小各分量的大小,分析HSV图像H、S、V三分量分别对图像的影响。
2.使用不同的颜色映射表对图像进行伪彩色增强。具体步骤:从图库中读出lena、 jetplane、peppers三幅图像,尝试用不同的颜色映射表进行处理显示。可用的颜色映射表为(Jet、Hot、Pink、Copper、Bone、Cool、Spring、Summer、Autumn、Winter)
3.彩色图像的平滑与锐化(imfilter函数)。具体步骤:从图库读取一张RGB图像,将RGB彩色图像的各个分量作为灰度图像单独处理,然后再将单独处理的分量图像合并成为彩色图像进行平滑与锐化处理;再对原图像直接在向量空间中平滑与锐化。比较两种方法有无差异。(平滑用高斯模板,锐化用拉普拉斯算子)
%% 11111111111 ͼ ж ȡһ ɫͼ RGBͼ ת ΪHSVͼ rgb2hsv ֱ ʾHSV ͼ ۲ ͼ ʵ С Ĵ С HSVͼ H S V ֱ ͼ Ӱ
% ȡͼ
img = imread('Fig0651(a)(flower_RGB).tif');
% RGB ɫת ΪHSV
hsv = rgb2hsv(img);
%figure
%imshow(hsv);
%imshow(hsv);
figure;
subplot(2, 2, 1); imshow(img); title('rgb')
subplot(2, 2, 2); imshow(hsv(:,:,1), []); title('h')
subplot(2, 2, 3); imshow(hsv(:,:,2), []); title('s')
subplot(2, 2, 4); imshow(hsv(:,:,3), []); title('v')
% ʵ С Ĵ С HSVͼ H S V ֱ ͼ Ӱ
%[h,s,v]=imsplit(hsv);
h = hsv(:,:,1);
s = hsv(:,:,2);
v = hsv(:,:,3);
%h*1.5
h_sat = h * 1.5;
h1 = cat(3,h_sat,s,v);
%s*2
s_sat = s * 2;
h2 = cat(3,h,s_sat,v);
%v*0.6
v_sat = v * 0.6;
h3 = cat(3,h,s,v_sat);
figure;
subplot(2, 2, 1); imshow(hsv); title('hsv')
subplot(2, 2, 2); imshow(h1); title('h*1.5')
subplot(2, 2, 3); imshow(h2); title('s*2')
subplot(2, 2, 4); imshow(h3); title('v*0.6')
%% 22222222ʹ ò ͬ ɫӳ ͼ α ɫ ǿ
%ͼ ж lena jetplane peppers ͼ
I1 = imread('Fig0638(a)(lenna_RGB).tif');
I2 = imread('Fig0628(a)(jupiter-moon.-Io).tif');
I3 = imread('Fig0637(a)(caster_stand_original).tif');
I1 = rgb2gray(I1);
I2 = rgb2gray(I2);
I3 = rgb2gray(I3);
%Jet Hot Pink Copper Bone Cool Spring Summer Autumn Winter
mycolor = char('Jet','Hot','Pink','Copper','Bone','Cool','Spring','Summer','Autumn','Winter');
for i=1:10
figure
imshow(I1);
colormap(strtrim(mycolor(i,:)));
title(mycolor(i,:));
end
for i=1:10
figure
imshow(I2);
colormap(strtrim(mycolor(i,:)));
title(mycolor(i,:));
end
for i=1:10
figure
imshow(I3);
colormap(strtrim(mycolor(i,:)));
title(mycolor(i,:));
end
%% 33333333333333 ɫͼ ƽ imfilter
img = imread('Fig0638(a)(lenna_RGB).tif');
%
J1 = img(:,:,1);
J2 = img(:,:,2);
J3 = img(:,:,3);
%J=cat(3,J1,J2,J3);
f = fspecial('gaussian',[3,3],1);
w = [0 1 0 ; 1 -4 1; 0 1 0];
% ˹
J4 = imfilter(J1,f);
J5 = imfilter(J2,f);
J6 = imfilter(J3,f);
% ˹
J7 = imfilter(J1,w,'replicate');
J8 = imfilter(J2,w,'replicate');
J9 = imfilter(J3,w,'replicate');
img1 = cat(3,J4,J5,J6);
img2 = cat(3,J7,J8,J9);
%ԭͼ ֱ Ӵ
img3 = imfilter(img,f);
img4 = imfilter(img,w,'replicate');
figure;
subplot(2, 2, 1); imshow(img1); title(' ϳɸ ˹ƽ ')
subplot(2, 2, 2); imshow(img-img2); title(' ϳ ˹ ')
subplot(2, 2, 3); imshow(img3); title('ԭͼ ˹ƽ ')
subplot(2, 2, 4); imshow(img-img4); title('ԭͼ ˹ ')