MatLab学习总结

使图像符合信息提取要求、设计描述符需要的知识:

第一部分 数字图像基础

         第1章 引言

         第2章 图像量化基础

         第3章 数学形态学概论

         第4章 遥感图像常规处理

第二部分遥感图像分析

         第5章 图像变换与小波分析

         第6章 图像分割

         第7章 边缘检测与串行边界

         第8章 纹理分析

         第9章 形状分析

构建多描述符空间、测试描述符、实施分类需要的知识:

第三部分 空间数据挖掘

         第10章 空间数据挖掘基础

         第11章 模糊集与模糊聚类

         第12章 人工神经网络

         第13章 决策树

         第14章 支持向量机SVM

一、概述

matlab主要特点:

(1)数据可视和图形化 :图像一旦读入 MATLAB,就以矩阵形式保存,可以在工作区查看矩阵的值,用绘图工具按钮选择表达图形等;这种图形化数据分析使测试算法的过程简单化。

(2)高效简单的编程环境 :直译式语言。

(3)开放及可延伸的架构 : 内核采用 C 语言编写。 允许开发人员接触它的大多数源代码。

(4)丰富的工具箱: MATLAB的工具箱提供了使用者在特别应用领域所需的许多函数,以简化开发人员的工作。现有工具箱包括:图像处理、统计分析、神经网络、模拟分析、最优化、模糊逻辑、小波分析等13个。

   在MATLAB中,数字图像经常采用矩阵(matrix)或阵列/数组(array)表达,矩阵或阵列元素代表图像的灰度值(或分色亮度值)。可以通过函数reshape( )实现矩阵和阵列间的相互转换。

    可以通过数组下标访问像素的具体值。对于灰度图像,可用A(i,j)获得指定行列处的灰度值,比如指令A(2,5)将返回第2行第5列的灰度;对于GRB图像,可用A(i,j,k)或得指定行列处的分色亮度值,比如指令A(2,5,1), A(2,5,2)将分别返回第2行第5列的红、绿值;A(:,:,3)返回所有行列的蓝值(返回整个蓝色分量)等。

       大多数运算符对矩阵与阵列通用, 少量阵列与矩阵运算可能相混淆的操作使用有区别的运算符。

imread()函数读取图像数据,imwrite()函数存储图像文件,figure 另外打开一个图形输出窗口,subplot( ) 用于在同一窗口显示多幅子图像,title( )为输出图像加标题,Imshow()显示图像文件,rgb2gray()将RGB图像转换为灰度图像,im2bw() 将灰度图像、索引图像或RGB图像转换为二值图像。

二、 图像量化基础

 1、考虑邻近像素的图像分析方法称为”邻域运算”;只考虑单个像素时称为“点运算”。

常见的邻域运算:

 模板运算(卷积运算)

 滑动窗口运算

 块运算(固定窗口)

邻域运算常被用于空间滤波、平滑降噪、边缘提取、纹理提取、窗口统计等图像处理和分析操作中。

2、邻域运算  模板运算  :

    模板运算的输出值由对应的输入像素及其邻域像素的值共同决定。这种运算通过模板(也称“卷积核”)实现。

   模板是远比图像尺寸小、具有规则形状的元素集。模板元素的值可以根据具体任务设计。模板边长一般为奇数,常用的模板尺寸为3×3,5×5,7×7等。

       通过MATLAB的滤波函数conv2( ),可以实现以自制模板对二维图像的模板运算(或滤波运算)。

例2.2 定制滤波算子并对图像I滤波。

I=imread('mb.tif');

H1=[1,1,1;0,0,0;1,1,1];  %定制Prewitts算子(行向)

H2=[1,0,1; 1,0,1; 1,0,1]  %定制Prewitts算子(列向)

C1=conv2(double(I),H1);  %用H1对I做滤波

C2=conv2(double(I),H2);

imshow(C1|C2);

3、邻域运算  滑动窗口和图像块

       在遥感图像分析中,有些操作需要考虑一定尺寸邻域的统计特征。滑动窗口或图像块是一个像素子集,子集的像素由窗口中心像素的坐标和邻域尺寸决定。这个邻域范围常称为“窗口”区,邻域的统计值常称为“窗口值”。

   滑动窗口操作通常采用特定的窗口尺寸和操作函数遍历全图像素。如果仅仅将图像按照窗口尺寸划分成若干矩形,并对各矩形做函数运算,则称为“块操作”。

MATLAB滑动窗口或块操作函数colfilt.m

该函数按指定窗口函数做滑动窗口或块操作。

基本语法:

B = colfilt(A,[m n],block_type,fun)

B = colfilt(A,[m n],[mblock nblock],block_type,fun)

B = colfilt(A,'indexed',...)

其中:A为原图像,窗口尺寸为m×n。fun为窗口函数,通常需定义为内联函数(参见A1.7.2和例2.4);block_type是一个字串,可选值①'distinct': “图像块”操作;②'sliding':滑动窗口操作。[mblock nblock]指定附加窗口尺寸,以节省操作内存。如在图像边缘出现窗口越界,将越界元素以0补齐。

4、图像采样

图像采样的任务:

   获得目标和/或背景的图像特征值;

   获得训练集(training sets)。

 训练集由若干样本构成,每个样本包括一个属性向量和一个目标值。一个包含q个样本、r维属性的训练集通常由一个r×q属性矩阵和一个q个元素的目标阵列构成。 图像采样通常以交互方式进行,可以针对单像素、多边形区域或子块等。

图像采样常用方式:

 单像素采样:返回采样点的图像值

 子块采样:返回子块的图像值

 多边形区域采样:返回样区二值图。

(1)单像素采样

  MATLAB像素采样函数impixel.m

  用于返回若干指定像素的图像值。

基本语法:

   P = impixel(I) 

   在图像I中,获得鼠标选定像素的分色亮度值。允许连续选择若干像素,点击Backspace或Delete键,删除最近一次的选择;右击、双击左键或回车结束选取。一旦选取结束,函数返回一个m×3矩阵P,m是像素个数,三个列值依次为分色亮度R、G、B。

例2.6 对图像I采样,作图分析样本的波谱特征。

P = impixel(I);   %以交互方式采样,返回各像素的R、G、B值

plot (P);    %绘图表达P的所有列

注:在工作区(workspace)选择矩阵P,在绘图按钮下拉列表中选择折线图,也有同样效果。

(2)区域采样

  MATLAB区域选取函数roipoly.m,用于交互获得样区多边形和返回相应的二值图。

基本语法:

BW = roipoly(I,C,R)   %以R和C定义的节点集构建多边形

BW = roipoly(I)    %以交互方式构建多边形

[BW,xi,yi] = roipoly(...)    %同时返回BW和多边形节点坐标

函数返回一个与原图像I等大的二值图BW,选区值为1。以BW作为掩模,与I做 .* 运算可以屏蔽选区外的像素。参见例2.7.

例:对多边形样区滤波

I=imread('garden.jpg');

I=rgb2gray(I); %滤波只适用于灰度图像,将I转换为灰度图像

[BW,x1,y1] = roipoly(I);

 %交互点选多边形,多边形可编辑,右击选择“creat mask”确认

H= fspecial('sobel');  %构建sobel算子滤波器

J= roifilt2(H,I,BW);  %对I中BW所掩区域以H做滤波

figure;

subplot(121);imshow(I);title('Original');

subplot(122);imshow(J);title('Filtered');

hold on

plot(x1,y1,'y');

三、数学形态学概论

用形态学进行图像分析的基本思想:

     利用一个称为结构元素(Structure Element,SE)的“探针”顺序探测整个图像,以度量和提取图像中与SE对应的特征。SE本身带有一些图像信息,包括形态、大小及灰度等,通过设计它可以达到检测图像结构特征的目的。

数学形态学的基本运算

 膨胀(dilate)

 腐蚀(erode)

 开启(open)

 闭合(close)

     这些运算可以用于二值或灰度( 多值) 图像,甚至模糊集,相应的技术分别称为二值形态学、灰度形态学和模糊形态学。

1、MATLAB的形态学基本操作

      MATLAB用于膨胀和腐蚀运算的函数分别为:

      imdilate( )

      imerode( )

      它们既可用于二值图像也可用于灰度图像。

      膨胀和腐蚀操作是其它形态学操作的基础,利用这两个函数可以实现几乎所有的形态学运算。 

2、MATLAB预定义的二值形态学操作

   为了使用方便,MATLAB以预定义形式,在函数bwmoph()中统一定义了多种操作,作为二值形态学有关操作的统一接口。

        基本语法:

         BW2=bwmorph(BW1,operation,n)

       该函数返回对图像BW1的形态学操作结果。通过参数operation可以指定预定义的形态学操作,其取值见表3.2;n指定操作的重复次数,默认值1。

例3.4 bwmorph函数形态学操作举例

A=imread('T.jpg');  BW1=im2bw(A);  %读入图像并转换为二值图

subplot(241);imshow(BW1);title('原图像');

subplot(242);imshow(bwmorph(BW1,'dilate',2));title('膨胀');

subplot(243);imshow(bwmorph(BW1,'erode',2));title('腐蚀');

subplot(244);imshow(bwmorph(BW1,'open',2));title('开启');

subplot(245);imshow(bwmorph(BW1,'close',2));title('闭合');

SE=zeros(7,7); SE(:,4)=1;   %定制SE

subplot(246);imshow(imerode(BW1,SE));title('以定制SE腐蚀');

subplot(247);imshow(imerode(imdilate(BW1,SE),SE));title('以定制SE闭合');

subplot(248);imshow(imdilate(imerode(BW1,SE),SE));title('以定制SE开启');

3、灰度数学形态学

      4个二值形态学基本运算(膨胀、腐蚀、开启和闭合)可以方便地推广到灰度图像空间。

     与二值形态学不同,这里将操作对象看作图像函数而非集合。以下设f(x,y)为输入图像,b(x,y)是结构元素(SE),SE本身也是一幅子图像,对于平坦型SE,每个元素取值为1或0,值为1者表示参与运算。

四、遥感图像常规处理

    在遥感图像使用前通常要对图像存在的某些误差和偏差进行校正,这种校正主要分为:

 对像素位置误差进行的几何校正和对图像灰度偏差进行的辐射校正。

 对图像进行增强(如反差增强和直方图均衡化等),以改善视觉效果等。

 为了有效利用多波段和多源信息,图像合成和融合等也是常见的图像处理手段。

1、图像增强   概述和分类

         根据图像增强处理所在的空间不同,可分为基于图像域和基于变换域两类。

(1)图像域/空域增强

         该法直接作用于像素值,原始图像f(x,y)和增强图像g(x,y)具有以下基本关系:

    g(x,y)=EH [f (x,y)]

    其中,EH(Enhancement)代表增强操作。如果EH 定义在每个(x,y)上,EH 是点操作;而如果定义在(x,y)的某个邻域上,则称EH为模板操作。

(2)变换域/频率域增强

         有时需要将空域图像转换到其它变换域,以便利用图像在这些值域的特有性质。最常用的变换域是频域。

         设空域图像f(x,y)经由变换关系T 转换到频域,并以T-1表示T 的逆变换;则频域增强可表示为:

    g(x,y)=T-1 [ EH[ T [ f(x,y)]]]

   即在频域做了EH后,再经逆变换返回空域。

图像增强操作

        常用的EH包括反差增强、锐化和直方图均衡化等。这些操作不以图像保真为原则,它只是选择性地突出某些对人或机器分析有用的信息,抑制一些无用或干扰信息。

2、图像增强 反差增强/拉伸

MATLAB的反差增强方法

(2.1)stretchlim( ) 搜索和返回图像的拉伸阈值

基本语法: LOW_HIGH = stretchlim(I,TOL)

函数返回对I做灰度调整时需要确定的最小和最大灰度。其中,TOL=[LOW_FRACT HIGH_FRACT] 用来设定亮/暗端像素占比,默认值为[0.01 0.99];

(2.2)imadjust( ) 调整图像灰度或分色亮度

基本语法:J = imadjust(I,[LOW_IN; HIGH_IN],[LOW_OUT; HIGH_OUT] ,GAMMA)

把I中灰度在[LOW_IN; HIGH_IN]范围中的像素按照[LOW_OUT; HIGH_OUT]做灰度调整,同时饱和不在 [LOW_IN; HIGH_IN]内的像素。GAMMA为权重参数,当GAMMA<1,着重拉伸亮区;反之着重拉伸暗区。

3、图像增强 直方图均衡化(HE

     直方图均衡化(histogram equalization,HE)是空域法图像增强中最重要的算法之一。它通过改变原图像直方图的统计特征,来实现图像增强。

图像的灰度直方图

          图像灰度直方图(histogram)也称为灰度概率分布函数,是图像最基本的统计特征。直方图是图像灰度值的频度函数,它统计各灰度级出现的概率。

          MATLAB用函数imhist( )来统计图像的灰度分布频数和显示图像直方图。

基本语法:

imhist( I )  %当绘图区域准备好时,直接显示I的直方图

count = imhist( I )  %将I的直方图返回给count

    count是一个一维数组,下标为灰度级,元素值为像素个数,比如count(50)返回灰度为50的像素个数。

MATLAB函数histeq( )可以进行基本HE操作。

基本语法:

     J = histeq(I,N)     % 对I做HE

    其中,参数N用于指定灰度离散级数, HE将使N个灰度级的像素数相当。N的默认值为64。

五、图像变换与小波分析

图像变换的含义:

       图像分析中,有时需要将空域图像以特定数学或物理关系转换到其它值域,形成变换域图像,以便利用这些值域的特有性质,对图像进行某些处理或信息提取;在需要时,处理后的变换域图像可以经逆变换返回空域图像。

图像变换的目的和用途:

(1)简化图像处理算法的描述

(2)有利于某些图像特征的提取

(3)有助于从概念上理解图像信息

1、傅立叶变换  

  傅里叶变换的用途:

  效果增强

  图像分析和信息提取

  图像复原

  图像压缩

  作为理解其他变换的基础

离散傅立叶变换的基本思想:

      正如把模拟图像变成离散图像,可以便于计算机处理一样;对傅立叶变换,也可以把这种对连续函数无穷积分的形式转换成对有限个离散函数值求和的形式,即二维离散傅立叶变换(Discrete Fourier Transform ,DFT)。     

离散卷积定理:

    对于离散傅立叶变换以下定理成立:

(1)空间域卷积定理:

f(x,y) ⊙ h(x,y)←→F(u,v)?H(u,v)

(2)频率域卷积定理:

f(x,y)?h(x,y)←→F(u,v) ⊙ H(u,v)

     运算符⊙和?分别表示卷积和乘法运算。 h(x,y)和H(u,v)分别为模板的空域和频域图像。

 即空域卷积运算可转化为频域乘法运算,反之频域卷积运算可转化为空域乘法运算。

2、小波分析概述(WT)

  小波变换的3个主要特点:

 时-频局域性

 多分辨度分析

 变换速度快(与傅立叶变换相比)

dwt2( ) 对2-D图像进行一阶离散小波变换

基本语法:

[CA,CH,CV,CD] = dwt2(I, ‘wname’)  %对I做一阶小波分解

[CA,CH,CV,CD] = dwt2(I, Lo_D,Hi_D)

     其中:CA,CH,CV,CD分别为分解后的近似分量,以及水平、垂直和对角细节。第一法中,’wname’指定分解所用的小波基;第二法中,Lo_D,Hi_D指定低高通滤波器。

六、图像分割

图像分割(segmentation) 指把图像分成各具特征的区域的过程。

适当的分割是面向对象分类的前提。图像分割可以形成一些特征一致/相似的区域(图斑),测量图斑的特征值可以形成对象,以便更高层次的分析和理解。所以,图像分割是图像处理上升到图像分析和理解的关键步骤。

图像分割指把图像分成彼此相连但不交叠的若干子区域。通常要求子区域内的像素具有某特征的相似性,而相邻区域的像素具有该特征的不连续性;子区域内部均匀性好,较少凸点和凹陷;各子区域间具有简单平滑连续的边界,等等。

         对于静态灰度图像,可用集合理论定义图像分割。

1、基于阈值提取技术的分割

原理:

         在目标物和背景的特征数据之间,选择一个合适的阈值(也称“阀值”),通过它能尽可能准确地把目标物与背景分开。所以阈值选择是并行区域图像分割的关键,如选择不当,容易造成过分割或欠分割。

MATLAB的灰度阈值函数graythresh( )可用于获取分割阈值。

基本语法:

      LEVEL = graythresh(I)

      [LEVEL EM] = graythresh(I)

       该函数使用Otsu算法计算灰度图像I的全局灰度分割阈值,阈值选取原则是最小化目标与背景各自内部的非均匀性。其返回值LEVEL是一个取值为[0, 1]的规格化强度值,它可以作为函数im2bw()的参数,该函数将按LEVEL分割目标和背景,并转换为二值图。另一个输出参量EM用于表征阈值化效率,取值为[0, 1]。

七、边缘检测与串行边界

      边缘是图像特征值(或称像素值)梯度较大的带状区域。不同对象区域之间一般存在边缘。边缘包含了用于图像识别的重要信息,而边缘检测相对简单且算法成熟,这使边缘检测成为一些图像分析方法的基础,如基于边缘的图像分割、基于边缘的边界闭合、基于边缘的特征提取等。

1、边缘检测原理与方法

MATLAB的边缘检测函数

 edge( )

语法:

BW =edge(I,’method’,thresh,’direction’,sigma)

[BW,thresh] = edge(I,'method',...)

      method:指定检测算子,可选值:①sobel(默认值);②prewitt;③roberts;①-③均返回I中梯度最大的点;④log:即Laplacian-Gaussian组合滤波器;⑤zerocross:通过用户自定义滤波器寻找二阶导数过0点;⑥canny:返回I中局地最大梯度,梯度由Gaussian滤波器产生;该法使用高(H)低(L)两个梯度阈值,分别针对强边缘和弱边缘,它能在噪声抑制和边缘检测之间寻求平衡,对噪声的抗性比较好。通常同时指定L和H;如果指定一个,系统默认它为H,并以H×0.4作为L;也可使用系统默认的L和H。

2、串行边界   边界跟踪

   “边界跟踪”(Boundary tracking)也称“轮廓跟踪”,一般针对二值图进行。

     边界跟踪的任务不是为了确定边界(因为已经获得目标区域二值图)。而是为了将边界像素顺序排列存储,形成边界对象,以便分析周长、链码、角点、嵌套等边界属性,和分类标记边界等。

MATLAB用于边界跟踪的函数

       MATLAB用于边界跟踪的函数主要有:

       bwtraceboundary( )

       bwboundaries( )

       这两个函数均用于对二值图逐个对象(图斑) 跟踪边界;直到当前边界闭合,才开始下一个对象的跟踪。前一个函数侧重于设定跟踪方式,比如跟踪的起始位置,下一个对象的搜索开始方向等;后一个函数侧重于分析跟踪结果,它将每个边界对象用一个cell储存,通过它可以查询单个边界的许多非常有用的属性,如凸凹特性、长短轴,包容或嵌套关系等。

例7.4 对二值图BW跟踪边界,并按照边界长度>120、>40、其它(<=40)分为三类(近似对应:建筑、连片树木、单株小树),分别用不同颜色显示。

 [B,L,N,A] = bwboundaries(BW);  % 边界跟踪

for k=1:length(B) %由length(B)返回B中的边界总数,遍历所有边界

    b = B{k}; %返回第k条边界的边界点坐标

    if(length(b)/2>120)

        plot(b(:,2), b(:,1), ‘r','LineWidth',1);

 %以宽度为1的红线绘出符合条件的边界

    elseif(length(b)/2>40)

        plot(b(:,2), b(:,1), 'g','LineWidth',1);   %以绿线绘边界

       else   plot(b(:,2), b(:,1), ‘b’,‘LineWidth’,1); %以蓝线绘边界

    end    

end

八、纹理分析

       纹理(texture)是图像分析的主要特征之一。它是灰度(或颜色)在空间以一定形式周期性变化产生的模式。纹理模式与像素邻域性质有关,并依赖于所观测的邻域尺寸。

       纹理分析是遥感图像分析和理解的一个重要研究方向。

1、基于灰度共生矩阵的纹理分析  原理和公式  

    灰度共生矩阵(Gray Level Co-occurrence Matrix, GLCM)以空间距离一定的像素对之间,某几种灰度值的出现频次来表征纹理[Friendland 1992]。所以也称“灰度空间依存矩阵”。它既反映灰度的分布特性,也反映某些灰度组合的周期性;因此成为定义纹理特征的基础。

例8.2 使用滑动窗口搜索全图。计算当前窗口区子图像的灰度共生矩阵P,进而获得P的所有属性。

[r,c]=size(I); IC=I; IH=I;

% 构建矩阵IC和IH,分别用于存放对Contrast和Homogeneity属性

n = 2;  %n指定窗口尺寸基数,窗口一般为正方形,宽度=2*n+1

w = zeros(2*n+1, 2*n+1,'int8'); 

%以窗口尺寸构建int8型全0矩阵,用以临时存放当前窗口数据

for i=n+1:r-n  % 遍历全图,为避免轮廓处越界,留出n个像素宽

   for j=n+1:c-n 

     w = I(i-n:i+n,j-n:j+n)  %把以(i,j)为中心的窗口数据赋值给w

     P = graycomatrix(w,'Offset',[0 3], 'GrayLimits',[ ]) 

     %求当前子图w的灰度共生矩阵P

     S = graycoprops(P, 'All')  %S是一个结构,用以存放P的全部属性

    IC(i,j)= S.Contrast;   %以S.Contrast替换当前像素的值

    IH(i,j)= S.Homogeneity;  %以S.Homogeneity替换当前像素的值

    end

end

2、基于统计或滤波的纹理分析  窗口统计

      该方法以指定尺寸窗口内的某些统计值(如均值、最大最小值、标准偏差、熵等)或它们的组合值来表征当前像素的纹理,通过对这些统计值聚类还可以实现纹理分割。

MATLAB的纹理滤波函数:

①rangefilt( )值域;

②stdfilt( )标准差;

③entropyfilt( )熵

它们返回每个像素的窗口统计值。

纹理分割的目的在于确定图像中各种纹理区域之间的边界。

九、形状分析

形状分析原理、 链码、凸包、形状描述符、MATLAB区域属性函数regionprops( )、形状聚类

       一个典型的图像识别过程:

       形成图斑 → 统计图斑的整体特征 → 形成具有特征标记的图斑(对象) → 更高层次的理解和识别。形状是图斑最重要的整体特征之一。

图斑或目标   

   经过图像分割(包括基于波谱和/或基于纹理等)得到了一些分隔区域(regions, pixel sets),称为图斑或目标。任何一个图斑都是连通组元,即组元中的任意两点,可以通过完全在组元内的曲线相连。

1、基于边界的形状分析   链码

        链码是对边界点的一种编码表示方法。它用一系列具有特定长度和方向的相连直线段来表示目标边界。使用链码的意义在于,可以通过链码方向提取边界上的一些特征点,直至分析图斑形状。

2、基于边界的形状分析  凸包

      边界可以用凸包来简化。

    与链码逐点表达边界不同,凸包只将边界上凸起的顶点以直线相连来表达边界。         

MATLAB的凸包函数convhull

基本语法:s = convhull(x,y)

3、常用形状特征描述符   MATLAB区域属性函数regionprops( )

4、形状分类   形状聚类

形状聚类即将多个形状特征组成输入矢量再行聚类。这样,不仅可以通过适当增加形状特征数来提高分割精度;而且可以免除对分割阈值的人工设定。

要求:

 输入矢量的各分量应当尽可能不相关;

 各分量需要归格化到统一的值域;

 各分量通常不同权,权值可以根据经验确定,也可以通过样本训练学习机获得。

十、空间数据挖掘

相关推荐