在遙感圖像融合領域,說到已經投入到商業運用,並且其變種還十分多的融合算法,恐怕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。
下面就來介紹一下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
融合結果
今天就先寫到這,以後還有新的感悟就再添上。