第一次写文章,准备写一下利用MATLAB将TIF格式的多波段遥感影像和全色波段的遥感影像进行合成,我们的一个汇报作业,也是第一次系统的学习了一个MATLAB代码,当时不好找tif格式的融合,所以来分享一下。
一、原理、优点
这里我就简单介绍一下,感兴趣的可以去搜一下这方面的文献。小波变换是对于二维的图像信号来说, 经过一次离散正交小波变换后, 图像被分解为 4幅, 其中左上角一幅是原图像的平滑逼近(低频), 左下角为垂直细节, 右上角为水平细节, 右下角为原图像的细节分量(高频)。然后, 可以继续对左上角的低频分量进行同样的第 2 次、第 3次……小波变换。
小波变换的优点呢,就是利用其分频特征和重构特性, 可以用于以非线性的对数映射方式融合不同类型的图像数据, 使融合后的图像既保留原高分辨率遥感图像的结构信息, 又融合多光谱图像丰富的光谱信息, 提高遥感图像的解译能力、分类精度。
二、主要流程
一共三步:
1、对预处理及配准后 Landsant8假彩色和全色波段影像,采用长度为 13 的 Daubechies 小波基分别进行小波变换, 得到各自相应分辨率的低频图像和高频细节纹理图像。
2、用假彩色影像的低频图像替代全色波段影像的低频图像。
3、用替换后的假彩色低频图像与全色图像的细节图像进行小波逆变换得到融合结果图像。
三、代码实现
好了,那咱们就不啰嗦了,直接上代码!!!
%读取并显示原始假彩色和全色波段影像数据
imgPan=imread('C:\Users\dd\Desktop\MATLAB\data\Wav\B8.tif');
imgMul=imread('C:\Users\dd\Desktop\MATLAB\data\Wav\False.tif');
subplot(1,3,1),imshow(imgMul),xlabel('(a)低分辨率多光谱影像');
subplot(1,3,2),imshow(imgPan),xlabel('(b)高分辨率全色影像');
%分离假彩色影像的R、G、B分量
mulR=imgMul(:,:,1);
mulG=imgMul(:,:,2);
mulB=imgMul(:,:,3);
%对全色波段影像进行db13小波三层分解
[Cpan,Lpan]=wavedec2(imgPan,4,'db13');
imgWH = Lpan(1,:);
length = imgWH(1)*imgWH(2);
%对假彩色影像三分量分别进行db13小波三层分解
[Ctmr,Ltmr] = wavedec2(mulR,3,'db13');
Cr = Cpan;Cr(1:length) = Ctmr(1:length);
[Ctmg,Ltmg] = wavedec2(mulG,3,'db13');
Cg = Cpan;Cg(1:length) = Ctmg(1:length);
[Ctmb,Ltmb] = wavedec2(mulB,3,'db13');
Cb = Cpan;Cb(1:length) = Ctmb(1:length);
%对假彩色影像各分量进行db13小波逆变换重构
imgResult(:,:,1)=waverec2(Cr,Lpan,'db13');
imgResult(:,:,2)=waverec2(Cg,Lpan,'db13');
imgResult(:,:,3)=waverec2(Cb,Lpan,'db13');
%写入并显示融合后图像文件
imwrite(uint8(imgResult),'Merge.tif');
subplot(1,3,3),imshow(uint8(imgResult)),xlabel('(c)小波融合影像')
四、问题总结
1、大家一定要注意全色波段的格式,只能有一个波段,不能也是RGB格式,不然就会报错(可以去envi看一下有几个波段);
2、有的大家可能是通过更改后缀的格式去改变图像的格式,但这样不大行,会报错,大家一定要用直接导出的tif格式文件,不能那样去改。
好了好了,这是第一篇文章,应该写的不好,我慢慢改进,这篇文章大家可以参考参考,看看效果如何,当然了也仅供参考。