最小噪声分离变换(Minimum Noise Fraction
Rotation,MNF
Rotation)工具用于判定图像数据内在的维数(即波段数),分离数据中的噪声,减少随后处理中的计算需求量。MNF本质上是两次层叠的主成分变换。第一次变换(基于估计的噪声协方差矩阵)用于分离和重新调节数据中的噪声,这步操作使变换后的噪声数据只有最小的方差且没有波段间的相关。第二步是对噪声白化数据(Noise-whitened)的标准主成分变换。为了进一步进行波谱处理,通过检查最终特征值和相关图像来判定数据的内在维数。数据空间可被分为两部分:一部分与较大特征值和相对应的特征图像相关,其余部分与近似相同的特征值以及噪声占主导地位的图像相关。
使用MNF变换也可以从数据中消除噪声。操作如下:首先进行正向变换,判定哪些波段包含相关图像(根据对图像和特征值的检验),然后进行一个反向MNF变换,用波谱子集(只包括“好”波段)或在反向变换前平滑噪声的方法来消除噪声。
也可以基于特征值选取MNF旋转输出的子集,也就是说,在使用高波谱数据时,如果仅需十几个波段,就不必生成上百个波段的立方体输出(浮点型)。ENVI也可以将MNF变换应用到单个波谱中,该功能用于将端元波谱变换到MNF空间,作为混合调制匹配滤波(MTMF)的输入。
MNF变换有两重要的性质:
一是对图像的任何波段做比例扩展,变换结果不变;
二是变换使图像矢量、信息分离和加性噪声分量互相垂直。乘性噪声可以通过对数变换转换为加性噪声。变换后可针对各分量图像进行去噪、或者舍弃噪声占优势的分量。
在MNF变换后的特征域中不同波段具有不同物理与数学意义。比如变换后的MNF波段1代表整个波段的亮度背景,即光谱背景,在影像上都较其他的MNF波段亮;岩矿地质体的光谱信息集中在第2~6波段,影响十分清晰,但噪声也逐渐出现;第7波段的空间地形等纹理十分清晰,但开始明显出现系统噪声;第10波段以后出现随即噪声,淹没地质体光谱信息及其空间信息。在MNF变换中,通过信号与噪声分离,使信息更加集中在有限的特征集中,一些微弱信息则在去噪转化中被增强。同时在MNF转化过程中,使光谱特征向类特征向量汇集,增强分类信息。
IDL实现MNF变换源码
PRO TestMNFTransform,infile
;HighPassFilter函数的作用是进行高通滤波
;返回值为 imageinfo 结构体
;里面包括有效波段的索引值 和有效波段所对应的图像
imageinfo=HighPassFilter(infile)
samples=imageinfo.SAMPLES
lines=imageinfo.LINES
dataType=imageinfo.DATATYPE
filteredImage = imageinfo.FILTEREDIMAGE
filteredNoiseImage =
imageinfo.FILTEREDNOISEIMAGE
GoodBandsIndex = imageinfo.GOODBANDSINDEX
;使用reform命令将有效图像改变成为 N_ELEMENTS(GoodBandsIndex)
x(samples*lines)大小的矩阵
bandfilteredImage =
REFORM(filteredImage,[samples*lines,N_ELEMENTS(GoodBandsIndex)])
bandNoiseImage =
REFORM(filteredNoiseImage,[samples*lines,N_ELEMENTS(GoodBandsIndex)])
;求取滤波后图像和噪声的协方差矩阵
covarFilteredImage=IMSL_COVARIANCES(bandfilteredImage,/double)
covarNoiseImage=IMSL_COVARIANCES(bandNoiseImage,/double)
;-----------------------------
;MNF 算法
;-----------------------------
;第一步
;求取滤波后图像的特征值和特征向量
FilteredEigval = IMSL_EIG(covarFilteredImage,
Vectors = FilteredEigvec)
HELP,FilteredEigval,/structure
;升序返回 FilteredEigval(滤波后图像协方差阵的特征值)
sortFilteredEigval = SORT(FilteredEigval)
;降序 返回相应的索引值
sortIndexFilteredEigval=REVERSE(sortFilteredEigval)
;得到降序特征值排列书数组
NewFilteredEigval=FilteredEigval[sortIndexFilteredEigval]
newFilteredEigvec=MAKE_ARRAY(DIMENSION=SIZE(FilteredEigvec,/DIMENSION),/DCOMPLEX)
;得到降序特征向量排列矩阵
FOR i=0,N_ELEMENTS(GoodBandsIndex)-1 DO
BEGIN
newFilteredEigvec[i,*] =
FilteredEigvec[sortIndexFilteredEigval,*]
ENDFOR
P = (newFilteredEigvec #
DIAG_MATRIX(NewFilteredEigval))^(-0.5)
;第二步
;covarNoiseImage是白噪声的协方差矩阵
;用P处理协方差矩阵n2
newcovarNoiseImage=TRANSPOSE(P) #
covarNoiseImage # P
;求取滤波后噪声协方差矩阵的特征值和特征向量
NoiseEigval = IMSL_EIG(newcovarNoiseImage,
Vectors = NoiseEigvec)
HELP,NoiseEigvec,/structure
;升序 返回 NoiseEigval(噪声协方差阵的特征值)
sortNoiseEigval = SORT(NoiseEigval)
;降序 返回相应的索引值
sortIndexNoiseEigval=REVERSE(sortNoiseEigval)
;得到降序特征值排列数组
NewNoiseEigval =
NoiseEigval[sortIndexNoiseEigval]
newNoiseEigvec=MAKE_ARRAY(DIMENSION=SIZE(NoiseEigvec,/DIMENSION),/DCOMPLEX)
;得到降序特征向量排列矩阵
FOR i=0,N_ELEMENTS(GoodBandsIndex)-1 DO
BEGIN
newNoiseEigvec[i,*] = NoiseEigvec[sortIndexNoiseEigval,*]
ENDFOR
A = newNoiseEigvec
;综合得到 MNF 变换矩阵
T = P # A
;对图像进行MNF变换
imageMNF=bandfilteredImage # T
; 测试变换是否正确
tmp=REFORM(DOUBLE(imageMNF[*,0]),[samples,lines])
HELP,tmp,/structure
WINDOW,0,xsize=samples,ysize=lines
TVSCL,tmp,/order
END