图像处理与识别真彩色增强
交流探讨,微信关注公众号:十三的梦
一、真彩色增强原理
在图像的自动分析中,彩色是一种能简化目标提取和分类的重要参量。在彩色图像处理中,选择合适的彩色模型是很重要的。电视摄像机和彩色扫描仪都是根据RGB模型工作的。为在屏幕上显示彩色图一定要借用RGB模型,但HSI模型在许多处理中有其独特的优点。
HSI模型反应了人的视觉系统观察彩色的方式,使用非常接近于人对彩色感知的方式来定义彩色。对于图像处理来说,这种模型的优势在于将颜色信息和灰度信息分开了。色调(Hue)分量是描述一种纯色的颜色属性(如红色,绿色,黄色),饱和度(Saturation)分量是一种纯色被白光稀释的程度的度量,也可以理解为颜色的浓淡程度(如深红色,淡绿色),亮度(Instensity)分量描述颜色的亮暗程度。这个模型的建立基于以下两个重要事实:
(1) I分量与图像的色彩信息无关
(2) H和S分量与人感受颜色的方式紧密相连
先讨论一组R、G、B分量图和一组H、S、I分量图在表示中的异同。一副真彩色RGB图可用24位表示,R、G、B各8位,即每个像素在R、G、B分量图中各取256个值。将R、G、B都归一化到[0,1]范围,相邻值间的差是1/255。一副真彩色RGB图也可用H、S、I各8位的三个分量提表示。这里不同的色调(H)图中的像素值是用角度作单位的,当用8位表示时,256个值分布在[0,360]之间,所以相邻值的差是n(360/255)。其中n=0,1,…,255。
如果将RGB图转化为HSI图,亮度分量就和色度分量分开了,灰度图的增强方法就可以使用了。
二、基础知识
1、RGB到HSI转换
RGB 向HSI 模型的转换是由一个基于笛卡尔直角坐标系的单位立方体向基于圆柱极坐标的双锥体的转换。基本要求是将RGB 中的亮度因素分离,将色度分解为色调和饱和度,并用角向量表示色调,如图1所示。
RGB转换至HSI:
色调: ,其中,
饱和度:
亮度:
证明:
HSI模型采用三棱锥还是圆锥或者圆柱都没有影响,因为它们之间可以直接相互映射,所以三者是等价的。这里用三角形来证明。
假设RGB值已经归一化。归一化方法为:
即求出各个基色的强度所占的比例。注意到r,g,b实际上代表了各个三原色的强度占总体的比例,所以显然满足如下条件:
另外仔细观察上图中的正三棱锥上的面PBPGPR,该平面上的任意一点都代表了R值G值B值满足比例条件的色点。比如该平面上的点(0.5,0.2,0.3)代表的所R:G:B=0.5:0.2:0.3的点。
2、HSI到RGB转换
在[0,1]内给出HSI值,现在要在相同的值域找到RGB值,可利用H值公式。在原始色分割中有3个相隔120度的扇形,从H乘以360开始,这时色调值返回原来的[0,360]的范围。
RG扇形(0<H<120):当H位于这一扇形区时,RGB分量由下式给出:
GB扇区(120<H<240):如果给定的H值在这一扇区,首先从H中减去120,即:H=H-120。RGB分量为:
BR扇区(240<H<360):最后,如果H在这一扇区,从H中减去240:H=H-240。RGB分量为:
其证明过程即为由RGB图像转换为HSI图像的逆过程。
3、灰度变换增强的方法
灰度变换法可分为:线性、分段线性和非线性变换。
(1)线性灰度变换
原理:当图像由于成像时曝光不足或过度,由于成像设备的非线性或图像记录设备动态范围太窄等因素,都会产生对比度不足的弊病,使图像中的细节分辨不清。这时如将图像灰度线性扩展,常能显著改善图像的主观质量。假设原图像f(x,y)的灰度范围是[a,b],希望变换后图像的灰度范围扩展到[c,d],则可采用如下的线性变换来实现:
其中Mj表示f(x,y)的最大值。该线性灰度变换函数是个一维线性函数
在灰度的线性变换中,当a>1时,输出图像的对比度将增大;当a<1时,输出图像的对比度将减小;当a=1且b≠0时,所进行的操作仅使 所有像素的灰度值上移或下移,其效果是使整个图像更暗或更亮;如果a<0,则暗区域将变亮,亮区域将变暗。
(2)分段线性灰度变换
为了突出感兴趣的目标或者灰度区间,相对抑制那些不感兴趣的灰度区域,可采用分段线性法。常用的是三段线性变换。分段线性变换称为图像直方图的拉伸,它与完全线性变换类似,其不同之处在于其变换函数是分段的。其变换函数表达式如下:
灰度拉伸可以更加灵活地控制输出灰度直方图的分布,它可以有选择地拉伸某段灰度区间以改善输出图像。如果一幅图像灰度集中在较暗的区域而导致图像偏暗,可以用灰度拉伸功能来拉伸(斜率>1)物体灰度区间以改善图像;同样如果图像灰度集中在较亮的区域而导致图像偏亮,也可以用灰度拉伸功能来压缩(斜率<1)物体灰度区间来改善图像质量。
(3)对数函数灰度变换
当用某些非线性函数作为图像的映射函数时,可实现图像灰度的非线性变换,如利用对数函数、指数函数等可实现对数变换和指数变换。对数变换主要用于将图像的低灰度值部分扩展,将其高灰度值部分压缩,以达到强调图像低灰度部分的目的。变换方法由下式给出:
这里的对数变换,底数为v+1,实际计算的时候,需要用换底公式。底数越大,对低灰度部分的强调就越强,对高灰度部分的压缩也就越强。相反的,如果想强调高灰度部分,则用反对数函数就可以了。
三、真彩色增强方法
1、对HSI图像亮度增强
(1)将RGB图转化为HSI图;
(2)利用对灰度图增强的方法增强其中的I分量;
(3)再将结果转化为用RGB图来显示。
2、对HSI图像饱和度增强
(1)将RGB图转化为HSI图;
(2)增强其中的S分量;
(3)再将结果转化为用RGB图来显示。
3、对HSI图像饱和度与亮度增强
(1)将RGB图转化为HSI图;
(2)增强其中的I与S分量;
(3)再将结果转化为用RGB图来显示。
4、直接对RGB图像增强
(1)将RGB图像分解为R、G、B三分量图;
(2)分别对R、G、B三基色进行直方图修改;
(3)增强后再合成RGB图像。
四、程序设计
1、对HSI图像线性变换增强亮度
var foo = ‘bar’;
clear;clc;
rgb = imread('test1.jpg');
hsi = rgbtohsi(rgb);
H = hsi(:,:,1);
S = hsi(:,:,2);
I = hsi(:,:,3);
I =I*1.4;
hsi_new = cat(3,H,S,I);
rgb_new = hsitorgb(hsi_new);
rgb_new = min(rgb_new,1);
figure;
subplot(221);imshow(rgb)
title('原始rgb图像')
subplot(222);imshow(hsi)
title('hsi图像')
subplot(223);imshow(rgb_new)
title('线性变换增强亮度后的rgb图像')
subplot(224);imshow(hsi_new)
title('增强后的hsi图像')
2、对HSI图像分段线性变换增强亮度
var foo = ‘bar’;
clear;clc;
rgb = imread('test1.jpg');
hsi = rgbtohsi(rgb);
H = hsi(:,:,1);
S = hsi(:,:,2);
I = hsi(:,:,3);
if I<50
I=I*1.1;
end
if 50<=I<=200;
I=I*1.4;
end
if I>=200;
I=I*1.1;
end
hsi_new = cat(3,H,S,I);
rgb_new = hsitorgb(hsi_new);
rgb_new = min(rgb_new,1);
figure;
subplot(221);imshow(rgb_new)
title('分段线性变换增强亮度后的rgb图像')
3、对HSI图像线性变换增强对比度
var foo = ‘bar’;
clear;clc;
rgb = imread('test1.jpg');
hsi = rgbtohsi(rgb);
H = hsi(:,:,1);
S = hsi(:,:,2);
I = hsi(:,:,3);
S =S*2.0;
hsi_new = cat(3,H,S,I);
rgb_new = hsitorgb(hsi_new);
rgb_new = min(rgb_new,1);
figure;
subplot(221);imshow(rgb)
title('原始rgb图像')
subplot(222);imshow(hsi)
title('hsi图像')
subplot(223);imshow(rgb_new)
title('仅增强饱和度后的rgb图像')
subplot(224);imshow(hsi_new)
title('增强后的hsi图像')
4、对HSI图像对数变换增强对比度
var foo = ‘bar’;
clear;clc;
rgb = imread('test1.jpg');
hsi = rgbtohsi(rgb);
H = hsi(:,:,1);
S = hsi(:,:,2);
I = hsi(:,:,3);
if S<50
S=S*1.5;
end
if 50<=S<=200;
S=S*2.0;
end
if S>=200;
S=S*1.5;
end
hsi_new = cat(3,H,S,I);
rgb_new = hsitorgb(hsi_new);
rgb_new = min(rgb_new,1);
figure;
subplot(221);imshow(rgb_new)
title('分段线性变换增强饱和度后的rgb图像')
5、对HSI图像线性变换增强饱和度与亮度
var foo = ‘bar’;
clear;clc;
rgb = imread('test1.jpg');
hsi = rgbtohsi(rgb);
H = hsi(:,:,1);
S = hsi(:,:,2);
I = hsi(:,:,3);
S =S*2.0;
I=I*1.4;
hsi_new = cat(3,H,S,I);
rgb_new = hsitorgb(hsi_new);
rgb_new = min(rgb_new,1);
figure;
subplot(221);imshow(rgb)
title('原始rgb图像')
subplot(222);imshow(hsi)
title('hsi图像')
subplot(223);imshow(rgb_new)
title('增强饱和度')
subplot(224);imshow(hsi_new)
title('增强后的hsi图像')
6、对HSI图像分段线性变换增强饱和度与亮度
clear;clc;
rgb = imread('test1.jpg');
hsi = rgbtohsi(rgb);
H = hsi(:,:,1);
S = hsi(:,:,2);
I = hsi(:,:,3);
if S<50
S=S*1.5;
end
if 50<=S<=200;
S=S*2.0;
end
if S>=200;
S=S*1.5;
end
if I<50
I=I*1.1;
end
if 50<=I<=200;
I=I*1.4;
end
if I>=200;
I=I*1.1;
end
hsi_new = cat(3,H,S,I);
rgb_new = hsitorgb(hsi_new);
rgb_new = min(rgb_new,1);
figure;
subplot(221);imshow(rgb_new)
title('分段线性变换增强亮度及饱和度后的rgb图像')
7、对RGB图像直接线性变换进行彩色增强
clear;clc;
rgb = imread('test1.jpg');
[o p q]=size(rgb);
r(:,:,1)=rgb(:,:,1);
r(:,:,2)=zeros(o,p);
r(:,:,3)=zeros(o,p);
r=r*1.4;
g(:,:,2)=rgb(:,:,2);
g(:,:,1)=zeros(o,p);
g(:,:,3)=zeros(o,p);
g=g*1.4;
b(:,:,3)=rgb(:,:,3);
b(:,:,2)=zeros(o,p);
b(:,:,1)=zeros(o,p);
b=b*1.4;
rgb_new(:,:,1)=r(:,:,1);
rgb_new(:,:,2)=g(:,:,2);
rgb_new(:,:,3)=b(:,:,3);
figure;
subplot(121);imshow(rgb);title('原始rgb图像');
%subplot(231);imshow(r);title('红色分量图像');
%subplot(232);imshow(g);title('绿色分量图像');
%subplot(233);imshow(b);title('蓝色分量图像');
subplot(122);imshow(rgb_new);title('增强后rgb图像');
8、对RGB图像直接分段线性变换进行彩色增强
clear;clc;
rgb = imread('test1.jpg');
[o p q]=size(rgb);
r(:,:,1)=rgb(:,:,1);
r(:,:,2)=zeros(o,p);
r(:,:,3)=zeros(o,p);
r=imadjust(r,[0.2 0.8],[0,1]);
g(:,:,2)=rgb(:,:,2);
g(:,:,1)=zeros(o,p);
g(:,:,3)=zeros(o,p);
g=imadjust(g,[0.2 0.8],[0,1]);
b(:,:,3)=rgb(:,:,3);
b(:,:,2)=zeros(o,p);
b(:,:,1)=zeros(o,p);
b=imadjust(b,[0.2 0.8],[0,1]);
rgb_new(:,:,1)=r(:,:,1);
rgb_new(:,:,2)=g(:,:,2);
rgb_new(:,:,3)=b(:,:,3);
figure;
subplot(221);imshow(rgb_new);title('分段线性变换增强后rgb图像');
微信扫码或搜索关注十三的梦↓↓↓ ↓↓↓探讨更多有趣话题哦