当前位置: 首页 > news >正文

python学习——对无人机影像有RGB转换到HSV

问题描述

最近需要对无人机影像中绿色植被信息进行提取,查看相关论文,发现用的比较多的就是HSV色彩转换方法,动手实践一下。

解决思路

HSV转换
直方图确定阈值
掩膜提取

解决过程

HSV转换

import os
import numpy as np
from osgeo import gdal
'''
本代码实现将RGB波段的无人机影像转换到HSV色彩空间。
注意无人机影像波段顺序为R,G,B
'''
def RGB2HSV(file):src = gdal.Open(file)col = src.RasterXSizerow = src.RasterYSize_ = 3red = np.array(src.GetRasterBand(1).ReadAsArray().astype(float))green = np.array(src.GetRasterBand(2).ReadAsArray().astype(float))blue = np.array(src.GetRasterBand(3).ReadAsArray().astype(float))arr = np.stack((red, green, blue), axis=2)dst = np.zeros((row, col, 3), dtype=np.float32)for i in range(row):for j in range(col):r, g, b = arr[i, j] / 255.0minn = np.min([r, g, b])maxx = np.max([r, g, b])dst[i, j, 2] = maxx  # Vdelta = maxx - minnh, s = 0, 0if maxx != 0:s = delta / maxxif r == maxx:h = (g - b) / deltaelif g == maxx:h = 2 + (b - r) / deltaelse:h = 4 + (r - g) / deltah *= 60if h < 0:h += 360dst[i, j, 0] = hdst[i, j, 1] = sprint('开始输出')out_name = 'hsv.tif'out_ds = gdal.GetDriverByName('GTiff').Create(out_name, col, row, 3, gdal.GDT_Float32)for i in range(3):# data = out_ds.GetRasterBand(i+1).ReadAsArray()band = out_ds.GetRasterBand(i+1).WriteArray(dst[:,:,i])del bandout_ds.SetProjection(src.GetProjection())out_ds.SetGeoTransform(src.GetGeoTransform())out_ds.FlushCache()return out_dsfile = r'G:\temp\forestVFC\标注影像\ZJM_ZLHF_2308221.dat'# Convert to HSV
dst = RGB2HSV(file)

直方图查看

原结果如下:
在这里插入图片描述
HSV结果如下所示:
在这里插入图片描述
查看HSV结果波段1的直方图
我这里的需求是分为植被和非植被,查看直方图中第一个波谷的折点即为植被和非植被区域阈值,也就是下图中的28.1115
在这里插入图片描述

掩膜提取

在ENVI——bandmath中使用下面这个公式对原始结果进行掩膜即可得到绿色植被区域的影像。

(float(b1) ge 28.0 ) * float(b2)
# b1 为HSV影像的波段1,b2为原始无人机影像

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/a9f424f422a247aa9acf7b3b615214ae.png

参考:
https://blog.csdn.net/u012294613/article/details/141096007

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • ecmascript和javascript的区别
  • leetcode hot100_part4_子串
  • 智能听诊器:打造宠物个性化健康生活
  • 云手机哪一款好用?手游专用云手机一览!VMOS云手机
  • Flask 第四课 -- 基本概念
  • 决策树模型的可解释性
  • 122.rk3399 uboot(2017.09) 源码分析2-initf_dm(2024-09-09)
  • 5--SpringBoot、Mybatis
  • 如何通过Python SDK获取Collection列表
  • 使用Python本地搭建http.server文件共享服务并实现公网环境远程访问——“cpolar内网穿透”
  • 大数据-132 - Flink SQL 基本介绍 与 HelloWorld案例
  • Android 进程间通信
  • QLORA:高效微调量化大型语言模型
  • pico2 开发环境搭建-基于ubuntu
  • 初识Linux · 进程(2)
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • Computed property XXX was assigned to but it has no setter
  • JavaScript-Array类型
  • leetcode讲解--894. All Possible Full Binary Trees
  • node-glob通配符
  • Python socket服务器端、客户端传送信息
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • 当SetTimeout遇到了字符串
  • 构建二叉树进行数值数组的去重及优化
  • 观察者模式实现非直接耦合
  • 回顾2016
  • 机器学习学习笔记一
  • 前端js -- this指向总结。
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • ​TypeScript都不会用,也敢说会前端?
  • ​如何在iOS手机上查看应用日志
  • # Maven错误Error executing Maven
  • # 计算机视觉入门
  • #### golang中【堆】的使用及底层 ####
  • #14vue3生成表单并跳转到外部地址的方式
  • #include<初见C语言之指针(5)>
  • #laravel部署安装报错loadFactoriesFrom是undefined method #
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (3)llvm ir转换过程
  • (BFS)hdoj2377-Bus Pass
  • (CPU/GPU)粒子继承贴图颜色发射
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (void) (_x == _y)的作用
  • (ZT)出版业改革:该死的死,该生的生
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (十二)Flink Table API
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (已解决)报错:Could not load the Qt platform plugin “xcb“