最经典的IHS遥感图像融合算法

在遥感图像融合领域,说到已经投入到商业运用,并且其变种还十分多的融合算法,恐怕IHS算法就是其中之一了。对于初学者,比如我,也经常在论文中看到IHS及其变种的身影。故在此就目前自己对IHS算法的理解做个笔记。
IHS即是Intensity–Hue–Saturation的缩写,同我们熟知的RGB一样,是一种颜色空间。3者的意思为,强度,色调,饱和度。通常IHS算法只对强度分量I进行操作,而无关其他2个分量。从融合算法的分类来说,IHS算法属于投影成分替代算法,也可称为成分替代算法。IHS基于强度分量I是MS各波段的线性组合这样的假设(assumption)。其特点是计算效率很快,融合结果的空间分辨率好,但是光谱失真严重。需要注意的是,原始的IHS算法只适用于RGB3通道的图像,后来有很多IHS的扩展算法将其扩展到4通道乃至n通道。最一般的确定n通道MS图像对应的强度分量的I的公式如下,这里写图片描述,其中αi表示各波段的系数,Mi表示上采样的MS。通常我们都取αi =1/n。当然也有更精确的确定I的公式,比如choi在【2006】年发表的指出,
下面就来介绍一下IHS融合算法,并使用matlab实现本文阐述的算法。

IHS算法

首先我们按照最传统的IHS算法的讲解方式来讲解IHS算法,按照该思路,IHS算法可以分为4步:1)对上采样的MS做IHS正变换;2)对Pan图进行直方图匹配得到Pan_new;3)使用Pan_new替代强度分量I;4)对替代之后的结果进行IHS逆变换,最终得到融合的结果。
以上就是IHS算法的全部内容了,需要思考的是,为什么要对Pan进行直方图匹配?An Improved Adaptive Intensity–Hue–Saturation Method for the Fusion of Remote Sensing Images【2014】论文中指出,直方图匹配主要是为了消除大气、光照和传感器不同的影响。
接下来在数学的角度来看一看,IHS是如何实现的,依据此分析便可以实现IHS的融合算法了。

IHS算法的数学表示

1)IHS变换的公式就如下所示
这里写图片描述
2)直方图匹配,你既可以使用matlab中imhist,histeq来进行,也可以使用下面的直方图匹配公式,其中σ表示方差,μ表示均值。
这里写图片描述
3)然后我们使用上面的Pan_new来替代IHS中的I
4)接着使用逆变换公式来得到融合结果
这里写图片描述

最简洁的实现

但是这样做还是有点繁琐,上面的正、逆变换可以直接替换成如下更简洁的公式实现。
这里写图片描述
除了Pan依旧要做直方图匹配,IHS的正、逆变换都可以绕过。当然该模型可以很容易扩展到n通道:
这里写图片描述

matlab代码

鉴于显示便于观察融合效果的缘故,我们使用3通道的图像作为实例。因此,接下来的代码也完全基于3通道而编的。
主函数代码如下:

LMS = im2double(imread('LR.tif'));
MS = imresize(LMS,4);
Pan = im2double( imread('pan.tif') );
fused = IHS(MS,Pan);
figure(1);imshow(fused);title('IHS融合结果');

IHS算法代码如下:注意MS各波段前的系数α按照最一般的设置1/3来取的,但也有通过改变该系数形成的方式来改善IHS算法的。如:An Adaptive IHS Pan-Sharpening Method【2010】,文中通过求解自适应系数α来获取更加精确的I,使得Pan与I的差异变小,文中指出之所以IHS算法光谱失真严重,主要就在于Pan与I之间的差异太大,导致注入过多的空间信息。

function [fused] = IHS(MS,Pan)
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 
% % 输入参数:
% %        MS:上采样之后的多光谱图像
% %        Pan : 全色图
% % 输出参数:
% %        fused: IHS融合结果
% % 
% %
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 
    I = MS(:,:,1)*1/3 + MS(:,:,2)*1/3 + MS(:,:,3)*1/3;

    P = (Pan - mean(Pan(:))) * std(I(:))/std(Pan(:)) + mean(I(:)); % 直方图匹配
    fused = zeros(size(MS));
    for n=1:3
        fused(:,:,n)= MS(:,:,n) + P - I; 
    end
end

融合结果

这里写图片描述
这里写图片描述

今天就先写到这,以后还有新的感悟就再添上。

猜你喜欢

转载自blog.csdn.net/Chaolei3/article/details/82262069