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

问题描述

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

解决思路

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

解决过程

HSV转换

python 复制代码
import os
import numpy as np
from osgeo import gdal
'''
本代码实现将RGB波段的无人机影像转换到HSV色彩空间。
注意无人机影像波段顺序为R,G,B
'''
def RGB2HSV(file):

    src = gdal.Open(file)
    col = src.RasterXSize
    row = src.RasterYSize
    _ = 3
    red = 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.0
            minn = np.min([r, g, b])
            maxx = np.max([r, g, b])
            dst[i, j, 2] = maxx  # V
            delta = maxx - minn
            h, s = 0, 0
            if maxx != 0:
                s = delta / maxx
            if r == maxx:
                h = (g - b) / delta
            elif g == maxx:
                h = 2 + (b - r) / delta
            else:
                h = 4 + (r - g) / delta
            h *= 60
            if h < 0:
                h += 360
            dst[i, j, 0] = h
            dst[i, j, 1] = s
    print('开始输出')
    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 band

    out_ds.SetProjection(src.GetProjection())
    out_ds.SetGeoTransform(src.GetGeoTransform())
    out_ds.FlushCache()
    return out_ds

file = r'G:\temp\forestVFC\标注影像\ZJM_ZLHF_2308221.dat'

# Convert to HSV
dst = RGB2HSV(file)

直方图查看

原结果如下:

HSV结果如下所示:

查看HSV结果波段1的直方图

我这里的需求是分为植被和非植被,查看直方图中第一个波谷的折点即为植被和非植被区域阈值,也就是下图中的28.1115

掩膜提取

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

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

参考:

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

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

相关推荐
Patrick在香港12 分钟前
台风在变少,来香港的没有
python·数据分析·香港·开放数据·热带气旋
qq_4069810321 分钟前
大白话rust系列09 函数调用两次有什么错?
开发语言·python·rust
benchmark_cc1 小时前
QuantDash 安装成功后,如何验证 Python 环境可以正常导入 SDK?
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
zh路西法2 小时前
【模型式强化学习】(二)PETS——从概率动力学模型到模型预测控制(MPC)
pytorch·python·强化学习·pe·mpc·ces·pets
亥时无人机管理系统2 小时前
一网统飞无人机管理系统源码|全域设备统一管控 多机协同调度 低空飞行一体化平台功能介绍
私有化部署·无人机·低空经济·无人机管理系统·一网统飞·行业巡检·光伏无人机巡检
Python自动化直播3 小时前
智能脚本批量管理拆开看:导入、导出、重写、试听
前端·python·ai·秒播
伤心的梧桐叶6 小时前
Picset与创客贴比等待时间,没做完的任务不能从表里消失
python
没有气的汽水6 小时前
一次 SQS 消费者静默退出的排查:问题最后竟然出在日志里
python
用户450030140236 小时前
物业催缴系统为什么总在"冷却"这一步翻车:账期建模与规则命中的几个取舍
python
Web极客码6 小时前
决策模型 + LLM:用 Python 拆解浏览器自动化工作流
java·python·自动化