IDL介绍及PCA变换算法的实现

时间:2022-10-10 02:55:12

IDL介绍及PCA变换算法的实现

IDL(Interactive Data Language)是美国RSI公司开发的一种交互式数据可视化语言。它为科学数据的可视化及数学分析提供了一个完整的计算机环境。IDL许多特点使得它特别适用于图像的处理和分析。

一、IDL语言的优点

1.面向矩阵

面向矩阵是IDL能够大量提高编程速度的主要原因之一。在IDL中,可以用数组的变量名代表全数组。面向矩阵运算简捷且不易出错,省去对矩阵中每个元素逐个运算的循环语句,并且IDL集成了许多专门对矩阵处理运算的方法和函数。

2.集成多种函数

IDL集成了许多诸如平滑、滤波等函数,极大地简化了图像处理的过程。研究者在做图像处理工作时,可以把主要精力放在核心算法上,而不是在实现普通函数上。

3.支持多种数据格式

IDL能够处理任何有格式或无格式数据,它还支持通用文本及图像数据,如JPEG,GIF,DXF,PNG,TIF等格式的数据。

4.适用于多种平台

IDL适用目前主要的软件平台,如Unix,Microsoft Windows and Macintosh systems。

二、PCA变换算法的实现

这里介绍如何利用IDL实现图像处理技术中的PCA变换,使用的卫星图像来源于美国的“陆地卫星7”(Landsat-7),共用8个波段的数据。这里选取5、4、3波段和8波段(高分辨率全色图像)参与下面的融合处理。

图1 Landsant-7的5波段(左)和4波段(右)图像

图2 Landsant-7的3波段(左)和8波段(右)图像

三、PCA变换

1.基本原理

PCA变换,也称为主成分分析,是着眼于变量之间的相互关系,尽可能不丢失信息地用几个综合性指标汇集多个变量的测量值进行描述的方法,是一种最小均方误差意义上的最优正交变换。对多光谱图像,由于各波段的数据间存在相关的情况很多,通过采用主成分分析就可以把现有图像中所含的大部分信息用假想的少数波段表示出来,也可以说减少了光谱维数。

这里介绍的PCA变换采用3、4、5波段的图像,最后将获得三幅主成分图像。

PCA变换原理:

设3、4、5波段图像分别为f1、f2、f3,三幅主成分图像分别为pc1、pc2、pc3。

PCA变换式为:

pc1pc2pc3=A■*f1-e(f1)f2-e(f2)f3-e(f3)

这里e(f)为f的期望值向量,A为由原图像向量f的协方差矩阵Cf的特征向量构成的变换矩阵,AT为A的转置矩阵。若设Cf的特征值和其对应的特征向量为D和A,则

A=[A1,A2,A3]

特征向量A1、A2、A3的排序是按照特征值D减小的次序依次排列的,即

D1>D2>D3

A1、A2、A3需进行归一化和正交化处理

令协方差矩阵

C■=?滓211 ?滓212 ?滓213?滓221 ?滓222 ?滓223?滓231 ?滓232 ?滓233

则?滓2kk=■■■[fk(i,j)-E(fk)]2

?滓2kl=■■■[fk(i,j)-E(fk)][fl(i,j)-E(fl)]

N、M为参与协方差矩阵计算的图像数据的行数和列数。

2.程序代码

IDL>Read_JPEG,''p3.jpg'',f1&Read_JPEG,''p4.jpg'',f2&Read_ JPEG,''p5.jpg'',f3;读取三个波段的图像

IDL>e1=Bytarr(512,512)&e2=Bytarr(512,512)&e3=Bytarr

(512,512);建立期望值矩阵e(f)

IDL>e1=e1+Mean(f1)&e2=e2+Mean(f2)&e3=e3+Mean(f3);

求期望值矩阵

IDL>c11=Mean((f1-e1)^2)/512&c22=Mean((f2-e2)^2)/512&

c33=Mean((f3-e3)^2)/512;

IDL>c12=Mean((f2-e2)*(f1-e1))/512&c13=Mean((f3-e3)*

(f1-e1))/512&c32=Mean((f2-e2)*(f3-e3))/512;使用Mean命令求期望值

IDL>c21=c12&c31=c13&c23=c32;求出协方差矩阵Cf的各项值(下转第26页)

(上接第12页)IDL>cf=[[c11,c12,c13],[c21,c22,c23],[c31,c32,c33]];建立协方差矩阵

IDL>a=cf

IDL>Trired,a,d,e

IDL>Triql,d,e,a;使用Trired和Triql命令求特征值和特征向量

IDL>Print,d;输出特征值

IDL>Print,a;输出特征向量(IDL已对特征向量进行归一化处理)

IDL>a0=a[*,2]&a1=a[*,0]&a2=a[*,1];观察输出结果,根据各个特征值的大小重新排列特征向量。需要注意IDL输出的特征向量为行向量

IDL>at=Fltarr(3,3);新建一个3×3矩阵

IDL>at[*,0]=a0&at[*,1]=a1&at[*,2]=a2;建立特征向量矩阵的转置矩阵

IDL>pc1=at[0,0]*(f1-e1)+at[1,0]*(f2-e2)+at[2,0]*(f3-e3)

IDL>pc2=at[0,1]*(f1-e1)+at[1,1]*(f2-e2)+at[2,1]*(f3-e3)

IDL>pc3=at[0,2]*(f1-e1)+at[1,2]*(f2-e2)+at[2,2]*(f3-e3); 进行主成分变换

IDL>pc1=(pc1+255)/2&pc2=(pc2+255)/2&pc3=(pc3+255)/2

IDL>Window,0&Tv,pc1

IDL>Window,1&Tv,pc2

IDL>Window,2&Tv,pc3;在三个窗口中分别显示主成分图像

■ ■

图3 第一主分量图 图4 第二主分量图

■图5 第三主分量图

上一篇:大学英语教学中两种词汇教学方法的对比研究 下一篇:被设计的风景