图像mnf正变换_最小噪声分离(MNF)

最小噪声分离变换(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

你可能感兴趣的:(图像mnf正变换)