python:根据RGB波段计算相应的指数

import os
import numpy as np
from osgeo import gdal
from osgeo.gdalconst import GDT_Byte, GDT_Float32, GDT_UInt16
import os
from skimage import io as sio
from sklearn.preprocessing import normalize
img_path='I:/xxx/aa/img/'
lbl_path='I:/xxx/aa/relbl/'

img_paths = os.listdir(img_path)
os.chdir(r'I:/xxx/aaa/img_proj/')
for path in (img_paths):    
    RGBimg=gdal.Open(str(img_path+path))
    band=RGBimg.GetRasterBand(1)
    img_proj=sio.imread(str(img_path+path))
    B=img_proj[:,:,0]
    G=img_proj[:,:,1]
    R=img_proj[:,:,2]
    NIR=img_proj[:,:,3]

    B=B.astype(np.float16)
    G=G.astype(np.float16)
    R=R.astype(np.float16)
    NIR=NIR.astype(np.float16)

    ndvi=(NIR-R)/(NIR+R+1e-5)
    ndwi=(G-NIR)/(G+NIR+1e-5)

    max_ndvi=ndvi.max()
    max_ndwi=ndwi.max()
    
    min_ndvi=ndvi.min()
    min_ndwi=ndwi.min()
    ndvi=(ndvi-min_ndvi)/(max_ndvi-min_ndvi+1e-5)
    ndwi=(ndwi-min_ndwi)/(max_ndwi-min_ndwi+1e-5)    
    img_proj=img_proj[:,:,0:3]

#读取标签
    lbl_name=lbl_path+path.replace('aaa', 'bbb')
    lbl_name=lbl_name.replace('2017', '2016')
    lbl=sio.imread(lbl_name)


    ndvi_name=path.replace('naip', 'ndvi')
    ndwi_name=path.replace('naip', 'ndwi')
    img_proj_name=path
    lbl_proj_name=path.replace('naip', 'nlcd')

    #利用gdal创建结果栅格(带投影信息)
    gtiff_driver =gdal.GetDriverByName('GTiff')
    result = gtiff_driver.Create(ndvi_name,band.XSize, band.YSize, 1, GDT_Float32)
    result1 = gtiff_driver.Create(ndwi_name,band.XSize, band.YSize, 1, GDT_Float32)
    result2 = gtiff_driver.Create(img_proj_name,band.XSize, band.YSize, 3, GDT_Byte) 
    result3 = gtiff_driver.Create(lbl_proj_name,band.XSize, band.YSize, 1, GDT_Byte)       
    result.SetProjection(RGBimg.GetProjection())
    result1.SetProjection(RGBimg.GetProjection())  
    result2.SetProjection(RGBimg.GetProjection())   
    result3.SetProjection(RGBimg.GetProjection())  

    result.SetGeoTransform(RGBimg.GetGeoTransform()) 
    result1.SetGeoTransform(RGBimg.GetGeoTransform()) 
    result2.SetGeoTransform(RGBimg.GetGeoTransform())    
    result3.SetGeoTransform(RGBimg.GetGeoTransform())

    result.WriteArray(ndvi)
    result1.WriteArray(ndwi)
    result3.WriteArray(lbl)

    for i in range(3):
        result2.GetRasterBand(i+1).WriteArray(img_proj[:,:,i])


    result.FlushCache()
    result1.FlushCache()
    result2.FlushCache()
    result3.FlushCache()
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值