文章目录

  • 1.步骤
  • 2.具体实现过程
    • 1.读取图像并进行增强
    • 2.提取颜色分量并绘制散点图
    • 3.使用归一化变量进行检测

1.步骤

  多分辨率图像广泛应用在遥感图像中,它通过获取不同光谱带下的信息来使获取的图像含有更多的信息。通常,分辨率越高,图像描述得就越精细,但同时需要的存储空间也会越大。多分辨率图像在实际应用中有广泛的用途。
  地球表面的物质通过不同的光谱会有不同的反射信息,这种差别提供了一种理解多分辨率图像特征的机制。
在多分辨率图像中检测植被的基本步骤如下:
➊读取图像;
❷对图像进行增强;
❸提取不同的颜色分量;
❹根据植被特征选择合适的变量进行检测。

2.具体实现过程

1.读取图像并进行增强

代码如下(示例):

CIR = multibandread('paris.lan',[512, 512,7], 'uint8=>uint8',128,'bil', 'ieee-le', { 'Band', 'Direct', [4 3 2]});%生成多分辦率图像
figure;subplot(121);imshow(CIR);
title('CIR Composite (Un-enhanced)')
text(size(CIR,2),size (CIR,1) + 15, ...
'Image courtesy of Space Imaging, LLC', ...
'FontSize', 7,'HorizontalAlignment','right');
decorrCIR = decorrstretch (CIR,'Tol', 0.01);%图像增强
subplot (122) ; imshow (decorrCIR) %显示增强后的图像
title ('CIR Composite with Decorrelation Stretch')

运行结果:
图1

  读取lan格式文件paris,这个文件包含了一幅7条光谱带的地球资源卫星图像。这个文件开头包含有128个字节的文件头,然后是图像的像素值。其中multibandread函数。从文件中读取4、3、 2色带,这三个色带包含光谱中可见光的两个分量红色、绿色和近红外光谱带。
  函数multibandread的最后一个输入参数规定了需要读取的色带和读取的顺序。这个真彩色图像的对比度很差,如图1左图所示,其中红色区域反映的是近红外光谱带的信息,绿色区域反映的是可见光中红色光谱带的信息,蓝色显示的是可见光中绿色光谱带的信息,这幅图像是一幅伪彩色图像。
  在这幅图像中,水是用很深的颜色显示的,而绿色植被看上去是红色的。这幅图像对比度很低,对颜色很敏感。
  为了改善图像的对比度,首先需要对图像进行增强。由于地表物质中对色彩的敏感,因此使用去相关增强是一种合适的方法,可以使用MATLAB图像处理工具箱中decorrstretch函数对图像进行去相关增强。
  增强后的图像如图1右图所示。从增强后的图像中,可以看出表面特征变得更明显,并且图像的色彩信息更加丰富,这是因为光谱之间的差异已经被放大,并且对比度增加了。
  图像中的红色区域是由于富含叶绿素的植被对近红外光谱带有很强的反射特性,而近红外光谱带的信息对应于图像中的红色,因此绿色植被的区域在图像中显示为红色,例如图像左边的区域有一大块明显的红色,在这块区域中的一条河流旁的公园,含有很多绿色植物。
  通过分析近红外光谱带和红色光谱带之间的差异,可以定量描述地表绿色植被和其他表面物体,如道路建筑物等光谱内容的对比度。

2.提取颜色分量并绘制散点图

代码如下:

NIR = im2single(CIR(:,:,1));%近红外光谮带
red = im2single(CIR(:,:,2));%可见光红色光谱带
figure; subplot(121)
imshow (red) %显示红色光谱带图像信息
title('Visible Red Band'); subplot (122)
imshow (NIR) %显示近红外光谱带图像信息
title ('Near Infrared Band') ; figure
plot(red,NIR,'+b') %客绘制红色和近红外光谱散点图
set(gca, 'XLim',[0 1],'XTick', 0:0.2:1.,...
'YLim',[0 1],'YTick', 0:0.2:1);
axis square;
xlabel('red level'); ylabel ('NIR level') ;
title('NIR vs. Red Scatter Plot' )

运行结果:
图2
图3

  我们单独取出近红外光谱带和红色光谱带,把图像格式从uint8转化为single,并且将两条光谱带的信息以灰色图像显示,如图2所示,左边为可见光中红色光谱带信息,右边为近红外光谱带的信息。
  我们以红色光谱带的值作为x轴的坐标,以近红外光谱带的值作为y轴的坐标,绘制散点图,如图3所示。

3.使用归一化变量进行检测

代码如下:

ndvi =(NIR - red) ./ (NIR + red);%归一化
figure; subplot (121)
imshow(ndvi, 'DisplayRange', [-1 1])%显示归一化的差别
title ('Normalized Difference Vegetation Index')
threshold = 0.4; %阈值
q = (ndvi > threshold) ;%生成二值图像
100*numel(NIR(q(:))) / numel (NIR)
subplot (122); imshow(q) %显示阈值化的二值图像
title('NDVI with Threshold Applied')
h = figure; p = get(h,'Position') ;
set(h,'Position', [p(1,1:3),p(3)/2])
subplot(1,2,1); plot(red, NIR, '+b')%显示散点图中蓝色部分
hold on
plot(red(q(:)),NIR(q(:)), 'g+')%显示散点图中绿色部分
set(gca,'XLim', [0 1],'YLim', [0 1])
axis square
xlabel('red level'); ylabel('NIR level ')
title('NIR vs. Red Scatter Plot' )
subplot (1,2,2); imshow(q) %用彩色显示二值图像
set (h, 'Colormap',[0 0 1;0 1 0])
title('NDVI with Threshold Applied')

  虽然从散点图中观察是一种确定绿色植被区域的有效方法,但是这种方法是很粗糙的,其结果很不精确。注意到如果绿色植被密度更高的话,近红外光谱带和红色光谱带之间的差异会更大,因此我们可以定义一个变量归一化植被差异指数( ndvi )作为衡量标准,它首先计算近红外光谱带( NIR)和红色光谱带(red)之间的差异,然后进行归一化,以去除云层、山脉等引起的不均匀照明影响。归一化公式为:

  使用single数据类型比使用double数据类型节省存储空间,在这个程序中,把像素值归一化到[-1,1]范围以显示图像,如图4左图所示,从图中可以看出深色的区域为河流,而白色的区域是绿色植被。
  为了使归一化图像中绿色植被区域显示得更加明显,可以在归一化的图像中使用阈值进行处理,得到二值图像如图4右图所示。从图中可以看出,绿色植被和其他一些小区域显示为白色,而其他区域则显示为黑色。

图4

  为了把光谱带的信息和空间信息连接起来,可以在原来的散点图上进一步绘制加入阈值后的像素之间的信息,来增加对比,其中植被区域显示为蓝色,其他区域显示为绿色,如图5所示。

图5

MATLAB图像分割——在多分辨率图像中检测植被相关推荐

  1. OpenCV在相机或图像中检测QR码的实例(附完整代码)

    OpenCV在相机或图像中检测QR码的实例 OpenCV在相机或图像中检测QR码的实例 OpenCV在相机或图像中检测QR码的实例 #include "opencv2/objdetect.h ...

  2. 图像中检测小点算法思路(另附代码)

    如何从图像中检测小数点,这是一个比较简单典型的问题.比如说像下面这样的一张图,检测出小数点的位置. 这里的思路简单来说可以按照下面的三个步骤: 1. 如果是RGB彩色图,可以转变为灰度图,然后使用阈值 ...

  3. IEEE2019论文:使用基于特征融合和缩放的具有空间上下文分析的单镜头检测器在无人机图像中检测小物体

    摘要: 无人机(UAV)图像中的目标由于拍摄高度较高通常都很小,我们虽然在目标检测方面已经做了很多工作,但是如何准确.快速地检测出小目标仍然是一个有待解决的挑战.本文针对无人机图像中的小目标检测问题, ...

  4. matlab中用imnoise向图像中加入特定高斯半径的噪声

    最近需要做图像仿真,感觉用C++编写速度有点慢,也是为了省事,就用了matlab做前期的处理,后期到发布版本时,再用C++. 由于是初接触到图像仿真,有些问题没有很好的深入.这里就针对对某个图像中,加 ...

  5. java断行_使用Java opencv连接图像中检测到的皱纹的断行

    我正在制作一个程序来检测从高分辨率相机拍摄的图像中的皱纹 . 目前该项目正处于起步阶段 . 到目前为止,我已执行了以下步骤: 转换为灰度并对比图像 . 使用高斯模糊去除噪音 . 应用自适应阈值来检测皱 ...

  6. 【航空和卫星图像中检测建筑物】使用gabor特征和概率的城市区域和建筑物检测研究(Matlab代码实现)

  7. 北航微软提出新型数据集TableBank,从图像中检测和识别表格

    点击我爱计算机视觉标星,更快获取CVML新技术 本文经机器之心授权转载,禁二次转载. 选自 arxiv 作者:Minghao Li 等 机器之心编译 机器之心编辑部 该研究中,来自北航和微软亚研的研究 ...

  8. opencv 识别长方形_使用OpenCV从图像中检测最大矩形

    我问了前面的一个问题here,根据答案中的建议,我构建了下面的程序,我认为该程序可以检测出大矩形,但它根本检测不到矩形.不过,它确实在这个image上起作用. 我希望解决方案不仅适用于此图像,而且适用 ...

  9. 基于matlab的Hough变换图像直线检测算法仿真

    目录 1.算法仿真效果 2.MATLAB源码 3.算法概述 4.部分参考文献 1.算法仿真效果 matlab2022a仿真结果如下:

最新文章

  1. CSS面试复习(三):预处理器、工程化方案、三大框架中的CSS
  2. B站疯传!拿走不谢!最全面的JAVA面试材料!完整版开放下载,叫我好人!
  3. python 颤音_自成一派,这个作曲大师确实名副其实!
  4. python之简单的get和post请求
  5. 怎么把php的文件链接成html,怎么把动态的php文件转换成静态的html文件,html文件是php文件…...
  6. Unity3D重要知识点
  7. arraylist 初始化_ArrayList实现原理(JDK1.8)
  8. PMP 第七章 项目成本管理
  9. [Leetcode][第312题][JAVA][戳气球][动态规划][记忆化搜索]
  10. flexcell控件 许可证信息没有找到_报表控件 ActiveReports 全面迎来 .Net Core 时代
  11. asp.net源码收集
  12. 深搜+广搜——Lake Counting S(洛谷 P1596)
  13. windows server 2003 AD之FSMO角色
  14. linux-jmeter负载机配置记录
  15. 第十章 嵌入式linux的调试技术
  16. android获取textview的行数
  17. headfirstjava 学习笔记(chapter1-5)
  18. c++读取图片_四、faster-rcnn源码阅读:数据流读取
  19. 【Python自学笔记】学习Python控制键盘鼠标的库 pyautogui
  20. Python爬虫(4)网页信息

热门文章

  1. except linux,小猿圈之linux Tcl和Except的安装
  2. 【Vue教程】Vue.js推文
  3. 3.14UiPath图片操作截图的介绍和使用
  4. java wait到时间会自动_Java的Object.wait(long)在等待时间过去后会继续往后执行吗
  5. 基于遗传算法的试题组卷
  6. Delphi复制HID、ID门禁卡源码
  7. idoc java_IDOC - 学习笔记NO.1 - 博客园
  8. redis映射的概念_搭建分布式Redis Cluster集群与Redis入门
  9. 【传感器】入侵检测系统(uart、CC2530、误触关闭)
  10. 速度不够,管道来凑——Redis管道技术