图像处理系列——图像融合之色彩变换1(IHS)

谈到色彩变换融合算法,我们首先想到一般就是IHS变换融合算法了。其实色彩变换融合算法有很多种,根据其所用的颜色模型不同,会有不同的融合算法,比如HSV、HLS、IHLS等。当然超球体色彩空间变换(HCS)也属于该类。本文主要还是讲IHS融合变换算法,该方法的最大弊端是只能应用于波段数为3的多光谱影像数据源。

1、IHS融合算法原理

       IHS(亮度(I,intensity)、色调(H,hue)和饱和度(S,saturation))融合流程如下图所示,先对多光谱影像进行重采样,使其空间分辨率与全色影像一致,并将其从RGB空间转换至IHS空间;然后将高分辨率全色影像与多光谱影像I分量进行直方图匹配,得到与多光谱I分量灰度分布相似的全色影像,并将其作为新的亮度分量替换多光谱I分量;最后经过逆变换还原到RGB空间。

图像处理系列——图像融合之色彩变换1(IHS)_第1张图片

IHS算法是图像融合(Image Fusion)技术中发展很早、现已成熟的一种空间变换算法。它有多种变换式:球体变换、柱体变换、单六角锥变换和三角变换。通过试验结果分析,球体变换和三角变换是比较理想的IHS变换形式。从计算量上又淘汰了球体变换,三角变换成为最理想的形式。三角变换的IHS算法可以很好的保留源图像的光谱信息和空间分辨率,运算量也较小,且易于实现。

2、IHS算法的实现

该算法的变种较多,基于篇幅排版和阅读便捷方面的考虑,在本次只介绍一种,即感知型颜色模型(锥形)。以下公式为其数学变换模型:

//进行正变换
fI = RGBsum/3;//RGBsum为R+G+B
max_min_value(dRGB,nRastercount,dmax,dmin);//求三者间的最值函数
fS = (RGBsum - 3*dmin)/RGBsum;
double angle = acos(0.5*(2*dRGB[0]-dRGB[1]-dRGB[2])/(sqrt((dRGB[0]-dRGB[1])*(dRGB[0]-dRGB[1])+(dRGB[0]-dRGB[2])*(dRGB[1]-dRGB[2]))));
angle = angle*180.0/PI;
if (dRGB[2]>dRGB[1])//BG比较
{
  fH = (360-angle)/360;
}
else
{
  fH = angle/360;
}
				
dRGBt[0] = fI;dRGBt[1] = fS;dRGBt[2] = fH;
//用高空间分辨率的图像替换Intensity亮度分量
dRGBt[0] = (double)pPANImage[i*width+j];
//进行逆变换
dRGBt[2] *= 360;
if (dRGBt[2] < 0)
{
	dRGBt[2] += 360;
}
if (dRGBt[2]>=0&&dRGBt[2]<120)
{
	br = dRGBt[0]*(1+((dRGBt[1]*cos(dRGB[2]*PI/180))/cos((60-dRGB[2])*PI/180)));			
	bb = dRGBt[0]*(1-dRGBt[1]);
	bg = dRGBt[0]*3.0-(br+bb);
}
if (dRGBt[2]>=120&&dRGBt[2]<240)
{
	dRGBt[2]-=120;
	br = dRGBt[0]*(1-dRGBt[1]);
	bg = dRGBt[0]*(1+((dRGBt[1]*cos(dRGB[2]*PI/180))/cos((60-dRGB[2])*PI/180)));			
	bb = dRGBt[0]*3.0-(br+bg);
}
if (dRGBt[2]>=240&&dRGBt[2]<=360)
{
	dRGBt[2]-=240;
	bg = dRGBt[0]*(1-dRGBt[1]);
	bb = dRGBt[0]*(1+((dRGBt[1]*cos(dRGB[2]*PI/180))/cos((60-dRGB[2])*PI/180)));			
	br = dRGBt[0]*3.0-(br+bg);
}

3、试验结果

图像处理系列——图像融合之色彩变换1(IHS)_第2张图片

未完待续......

你可能感兴趣的:(图像处理,C/C++,图像融合,IHS变换)