目前常用的颜色模型一种是RGB三原色模型,另外一种广泛采用的颜色模型是亮度、色调、饱和度((IHS)颜色模型。亮度表示光谱的整体亮度大小,对应于图像的空间信息属性,色调描述纯色的属性,决定于光谱的主波长,是光谱在质的方面的区别,饱和度表征光谱的主波长在强度中的比例,色调和饱和度代表图像的光谱分辨率。
IHS变换图像融合就是建立在IHS空间模型的基础上,其基本思想就是在IHS空间中,将低空间分辨率的多光谱图像的亮度分量用高空间分辨率的灰度图象替换。
IHS变换融合法基本流程:
基本步骤:
(1) 将多光谱影像重采样到与全色影像具有相同的分辨率。
(2) 将多光谱图像的R、G、B三个波段转换到IHS空间,得到I、H、S三个分量;
(3) 以I分量为参考,对全色影像进行直方图匹配
(4) 用直方图匹配后的全色影像替代I分量,然后同H、S分量一起逆变换到RGB空间,从而得到融合图象,
RGB与IHS变换的基本公式:
RGB->HIS:
HIS->RGB:
代码:
void RGBtoHIS(uchar r,uchar g,uchar b,float* HIS)
{
float H;
float I;
float S;
float angle;
float R,G,B;
R=((float)r)/255.0; //归一化
G=((float)g)/255.0;
B=((float)b)/255.0;
I=(R+G+B)/3.0;
S=1-min(min(R,G),B)/I;
if (S ==0)
{
H = 0;
}
if (r == g && r ==b)
{
b = 0;
}
else
{
angle=acos(0.5*(R-G+R-B)/(sqrt((R-G)*(R-G)+(R-B)*(G-B))));
angle=angle*180.0/PI;
}
if (B>G)
{
H=360-angle; //H量计算
}
else
{
H=angle;
}
H=H*255.0/360.0;
I=I*255.0;
S=S*255.0;
HIS[0]=H;
HIS[1]=I;
HIS[2]=S;
}
void HIStoRGB(float H,float I,float S,float* m)
{
float s=(S)/255;
float i=(I)/255;
float h=(H)*360/255;
if (h<0)
{h=h+360;
}
if(h<120&&h>=0)
{
m[0]=i*(1.0+((s*cos(h*PI/180))/cos((60-h)*PI/180)));
m[2]=i*(1.0-s);
m[1]=3.0*i-(m[0]+m[2]);
}
if(h<240&&h>=120)
{
h=h-120;
m[1]=i*(1.0+((s*cos(h*PI/180))/cos((60-h)*PI/180)));
m[0]=i*(1.0-s);
m[2]=3.0*i-(m[0]+m[1]);
}
if(h>=240&&h<=360)
{
h=h-240;
m[<