【MATLAB Image Processing Toolbox 入门教程三】

  • 本篇摘要
  • 一、从多光谱图像文件导入彩色红外通道
  • 二、构建近红外光谱散射图
  • 三、计算植被系数并显示其定位
  • 四、综合实例部分
  • 总结

本篇摘要

本篇演示了如何使用MATLAB数组对图像数据进行处理,并将数据绘制出来。图像数据差异可用于区分图像的不同表面特征,这些特征在不同光谱通道之间具有不同的反射率。示例部分采用了三维图像阵列,三个平面来自电磁频谱的不同信号,包含可见红光和近红外(NIR)通道,通过查找可见红光和NIR通道之间的差异,确定了示例图片中包含大量植被的区域。


一、从多光谱图像文件导入彩色红外通道

示例图片选用法国空间影像公司提供的paris.lan,它是7通道512*512的陆地卫星图像,图像的像素值跟在一个128字节的报头后面,这些值是按行(BIL)带交织的,以增加频带数的顺序像素值以低位字节顺序存储为无符号8位整数(记住这部分加粗的文字,它决定了后面函数中参数的设置方式)。想要从lan文件图像中读取特定频段通道的数据,我们需要首先对multibandread函数进行了解。

X=multibandread(filename,size,precision,offset,interleave,byteorder);
X=multibandread(...,subset1,subset2,subset3)

具体的参数详述如下:

  • filename:读取文件的名称,类似imread函数读取图像文件。
  • size:此参数为三元素整数向量[height,width,N],height为总行数,width为每行的元素数,N为总条带数。显然,如果想将paris.lan全部读入,size应设置为[512,512,7]。
  • precision:指定要读取的数据格式,例如‘uint8’,‘double’等,不仅如此,还可以指定输出数据的格式,例如‘uint8=>uint8’说明读取uint8数据并输出uint8数组,‘uint8=>single’说明读取uint8数据并输出单精度数据。
  • offset:是一个标量,指明文件中第一个读取的数据元素的位置。
  • interleave:存储于数据的格式,有以下三种:
    ‘bsq’——条带顺序
    ‘bil’——条带按行交错
    ‘bip’——条带按像素交错
  • byteorder:指定数据存储字节顺序。‘ieee-le’——Little-endian;‘ieee-be’——Big-endian。

关于子集设置参数subset1,subset2,subset3,最多指定三个子集设置参数,每个子集参数都是一个三元素元胞数组{dim,method,index},详述如下:

  • dim:指定取数据所沿的维度,为下面三个值之一:‘Column’(列),‘Row’(行),‘Band’(条带)。
  • method:有下面两个值:‘Direct(default)’,‘Range’。
  • index:如果method为‘Direct’,index则指定了沿条带维度读取数据的索引向量。如果method为‘Range’,index是一个三维的数组[start,increment,stop],根据dim参数确定的维度,确定读取的范围以及步长,如果index指定为二维数组,则默认imcrement为1。
    看完上面这些,估计头都大了。没关系,看看下面的实例就知道各个参数有什么用了。
im1=multibandread(filename,[rows cols bands],'double',0,'bil','ieee-le') %使用条带按行交错格式读取数据
im2=multibandread(filename,[rows cols bands],'double',0,'bsq','ieee-le',{'Band','Range',[1 2 bands]}) %使用条带顺序格式每隔一个条带读取一次数据
im3=multibandread(filename,[rows cols bands],'double',0,'bip','ieee-le',{'Row','Range',[1 2]},{'Column','Range',[1 2]}) %使用条带按像素交错格式读取数据前两行和前两列

电磁频谱的通道4、3、2是近红外(NIR)、可见红色、可见绿光部分,将这三个部分映射到RGB图像上时,就得到了标准的彩色红外(CIR)复合图像,根据上面的描述,我们用mutibandread函数实现这一步骤。
在MATLAB中输入:

CIR=multibandread('paris.lan',[512 512 7],'uint8=>uint8',128,'bil','ieee-le',{'Band','Direct',[4 3 2]});
imshow(CIR);
title('CIR Composite');


显然,CIR是一个假彩色图片,因为在映射CIR图像时,R通道显示的是近红外部分,G通道显示的是可见红色,B通道显示的是可见绿色。
由于植被对于近红外波段具有高反射率,而近红外通道被映射到了R通道中,所以植被密度高的区域在CIR中都会显示为红色。事实上,图像左边的鲜红色区域,这是一个大型公园(Bois de Boulogne),位于巴黎市中心以西,塞纳河的一个弯曲处。

至此,我们成功地从多光谱图像文件中导入彩色红外通道。

二、构建近红外光谱散射图

散点图的作用可以有效比较近红外通道(用红色像素值显示)和可见红色通道(用绿色像素显示),我们可以从CIR图像中单独分离出三个通道的图像数据。为了便于散点图的绘制以及接下来NDVI的计算,我们需要用im2single将uint8类型转换为single类型。

im2single的作用是将数组的数据类型转为single类型。

例如
我们将CIR中的近红外波段和可见红色波段部分分别提取出来,并转为single类型,在MATLAB中输入:

NIR=im2single(CIR(:,:,1));
R=im2single(CIR(:,:,2));
imshow(NIR);
title('近红外波段');
figure;
imshow(R);
title('红波段');


使用im2single函数将灰度图中每个像素的灰度值设置为single类型后,我们可以将每个像素在一个1X1的坐标轴中显示出来,像素的x坐标值为其红波段图像的灰度值,y坐标值为其近红外波段的图像灰度值,这样就组成了散射图。
继续输入:

plot(R,NIR,'+b');
ax=gca; %返回坐标轴的句柄到ax,通过ax修改坐标轴的属性
ax.XLim=[0 1];
ax.YLim=[0 1];
ax.XTick=0:0.2:1;
ax.YTick=0:0.2:1;
axis square;
xlabel('red level');
ylabel('NIR level');
title('NIR vs. Red Scatter Plot');


散点图中像素点主要集中在对角线附近和坐标轴左上角。对角线附近的像素,他们的NIR和R值几乎相等,这种“灰色边缘”包括路面和屋顶等特征,左上方的像素点,其NIR值大于R值,这些像素区域基本包括了图像中所有的绿色植被。

三、计算植被系数并显示其定位

在散点图中我们可以根据像素点的位置大致判断其是否大致属于植被区域,但无法准确判断,因为位于散点图左下角区域的像素,两个通道的值都很小,不利于我们的分析。但我们清楚的是,NIR通道的值远大于R通道值的像素才包含在植被区域内。基于此,NDVI( Normalized Difference Vegetation Index 植被归一化差异系数)产生。NDVI计算方式为:

NDVI=(NIR_Valuv-R_Value)./(NIR_Valuv+R_Value)

显然,NDVI的范围在[-1 1]之间,继续在MATLAB中输入:

ndvi=(NIR-R)./(NIR+R);
figure;
imshow(ndvi,'DisplayRange',[-1 1]);
title('Normalized Difference Vegetation Index');


之前图像左边的一大片公园在这张图片中变成了白色的区域。为了将图片中所有的植被区域标记出来,只需要设定一个阈值,像素值大于阈值的像素设为1,其余设为0,结果用一个二值图像显示出来。继续输入:

threshold=0.4;
q=(ndvi>threshold); %将ndvi图像中每个像素逐个与threshold比较,大于threshold的为真,设为1,否则为假,设为0.
figure;
imshow(q);
p=100*(numel(ndvi(q(:)))/numel(ndvi)); %计算被标记为植被的像素数与总像素数之比,即植被比例。


可以看出,植被约占全图百分之5。

四、综合实例部分

综合示例部分将上述各个步骤结合起来,包含读取多光谱图片,分离波段,绘制散点图和NDVI图,并设置阈值突出植被部分,最后将植被部分像素在散点图中用不同颜色点显示出来。
废话不多说,上代码:

%读入多光谱图像
CIR=multibandread('paris.lan',[512 512 7],'uint8=>uint8',128,'bil','ieee-le',{'Band','Direct',[4 3 2]});%显示图像
imshow(CIR);
title('CIR');%分离可见红光波段和近红外波段图像
NIR=im2single(CIR(:,:,1));
R=im2single(CIR(:,:,2));
figure;
imshow(R);
title('可见红光波段');
figure;
imshow(NIR);
title('近红外波段');%绘制红外波段-可见红光波段散点图,NIR和R中的灰度值分别作为像素的纵坐标和横坐标
figure;
plot(R,NIR,'+b');
ax=gca;
ax.XLim=[0 1];
ax.YLim=[0 1];
ax.XTick=0:0.2:1;
ax.YTick=0:0.2:1;
axis square
xlabel('red level');
ylabel('NIR level');
title('NIR vs. R Scatter Plot');%绘制NDVI图像
ndvi=(NIR-R)./(NIR+R);
figure;
imshow(ndvi,'DisplayRange',[-1 1]);
title('NDVI');%设定阈值转化NDVI为二值图像,白色为植被区域
threshold=0.4;
q=(ndvi>threshold);
figure;
imshow(q);
title('阈值处理NDVI');%将图像中的植被区域与散点图的像素点联系起来
figure;
subplot(1,2,1);
plot(R,NIR,'+b');
hold on
plot(R(q(:)),NIR(q(:)),'g+');
axis square
xlabel('red level');
ylabel('NIR level');
title('NIR vs. R Scatter Plot');
subplot(1,2,2);
imshow(q);
colormap([0 0 1;0 1 0]);
title('阈值处理NDVI');






总结

至此,MATLAB Image Processing Toolbox快速入门部分就讲解完了,这部分用几个例子说明了Image Processing ToolBox的不同用途,对于Image Processing ToolBox的基础知识进行学习。接下来,我们将对图像导入、显示、变换、滤波、分割等进行详细讲解。
下篇见:)

【MATLAB Image Processing Toolbox 入门教程三】快速入门之“在多光谱图像中寻找植被”相关推荐

  1. Python零基础入门教程( 快速入门)

    前言 学无止境,无止境学. 今天要给大家分享的是<Python零基础入门教程01 快速入门>,这是一个系列的教程,从零基础到项目实战.在本教程中,我会给大家介绍Python入门的一些基础知 ...

  2. pkpm快速入门教程_PKPM快速入门教程.ppt

    PKPM快速入门教程.ppt PKPM快速入门 PMCAD的基本功能 一.人机交互建立全楼结构模型 二.自动倒算荷载建立恒活载库 三.为各种计算模型提供所需数据文件 四.为上部各绘图CAD模块提供结构 ...

  3. python快速入门教程-Python快速入门

    Python语言本身就是一门简单的语言,入门非常容易. 机器学习中用到的Python(语法)相对就更简单了. 本文从机器学习的视角来看需要具备的Python基础. 我们的目标是-- 没有蛀牙... 针 ...

  4. python入门教程 pdf-Python快速入门PDF高清完整版本下载

    提取码:b03p 目录 第一部分 开始篇 第1章 关于Python 3 1.1 用Python的理由 3 1.2 Python的长处 3 1.2.1 Python易于使用 4 1.2.2 Python ...

  5. 【MATLAB Image Processing Toolbox 入门教程六】“导入、导出和转换”之“图像类型转换Ⅰ——在不同图像类型之间转换”

    [MATLAB Image Processing Toolbox 入门教程六] 1 gray2ind函数 2 ind2gray函数 3 mat2gray函数 4 rgb2gray函数 5 rgb2in ...

  6. Tomcat 教程之快速入门

    Tomcat 教程之快速入门 版本说明 本文使用 Tomcat 版本为 Tomcat 8.5.24. Tomcat 8.5 要求 JDK 版本为 1.7 以上. 简介 Tomcat 是什么 Tomca ...

  7. el-date-picker设置默认日期_ERP入门教程:快速掌握金蝶ERP的基础-物料批次管理的应用及设置...

    ERP入门教程:快速掌握金蝶ERP的基础-物料的批次管理的应用及设置 关注我,我将定期分享更多的ERP解决方案 转发关注并私信我,了解更多的解决方案及操作方法哦 一.应用软件版本:金蝶KIS旗舰版6. ...

  8. ArcGIS教程——ArcGIS快速入门

    实例数据:https://pan.baidu.com/s/184wwCmWrJdb-qjxsT614EQ 密码:dowv ArcGIS for Desktop是一套完整的专业GIS应用程序,包含有Ar ...

  9. Flowable 快速入门教程:Flowable 入门开发案例,结合流程设计器详细讲解

    Flowable 快速入门教程:Flowable 入门开发案例,结合流程设计器详细讲解 前言 流程设计器集成 整体流程图 流程节点说明 第一审核人节点:实际设置审核人 配置信息 说明 第二审核人:参数 ...

最新文章

  1. ffmpeg-win32-v3.2.4 下载_iTools下载|iTools 4.4.3.4 官方中文版
  2. Winforn中使用代码动态生成控件
  3. 用Saltstack的modules和grains实现实时监控平台
  4. FZU - 2218 Simple String Problem(状压dp)
  5. CompletableFuture详解~join与get的区别
  6. 我的Go+语言初体验——(5)Go+ 基本语法之 Switch
  7. 内推 | 腾讯视觉感知算法全职实习生
  8. 信安教程第二版-第18章网络安全测评技术与标准
  9. python最简单的游戏源代码_Python 练习: 简单角色游戏程序
  10. android创建项目,并开发项目。
  11. 事件驱动和状态机模式在YARN中的使用
  12. python实现文本翻译
  13. python解析word中表格_python读取word表格
  14. 站群程序-免费站群程序排名
  15. 计算机基础理论科学家,科学家新理论:人类生活于计算机模拟程序中
  16. JS使用htef访问html文件,法语TEF考试语法及词汇练习.docx
  17. 轩小陌的Python笔记-day08 模块一总结
  18. FlightGear编译小结
  19. 刘可 寂寞才说爱歌曲试听 刘可 寂寞才说爱MP3歌词
  20. 报错:pymysql.err.IntegrityError: (1062, “Duplicate entry ‘1‘ for key ‘mm.PRIMARY‘“)

热门文章

  1. C语言初阶:字符串,字符串搭配函数与指针的多重奥秘
  2. 模板引擎---template的简单使用
  3. IFR报告称新冠疫情后的恢复对“机器人技术”的需求很高
  4. 电商广告推荐系统案例
  5. 游戏游客登录与账号登录
  6. 如何布置环境?自己这边打版了,后台怎么打版才能创建活动?
  7. 【水位传感器与 Arduino 连接测量水位】
  8. vue 系统服务器,vue可以运行在windows服务器
  9. 【行业排名】第三方支付平台有哪些?第三方支付平台排名
  10. 3种方法设置PDF“打开密码”,总有一种适合你