利用GDAL根据栅格影像DN值实现颜色渲染

  • 项目需求
  • 项目构想
  • 代码实现
  • 效果展示

项目需求

项目中需要使用影像做差值计算后根据其DN值进行密度分割渲染

项目构想

  • 1、主要根据CreateColorRamp()添加条带
  • 2、根据SetRasterColorTable()渲染
    需要注意的是渲染值必须是int型或者byte,所以如果你的DN值是小数等,建议对数据进行拉伸处理,再进行渲染。

代码实现

  • ReadTheRaster.py
    def writeRasterInformation(self, data, Savepath, nband):# driver = self.dataset.GetDriver()driver = gdal.GetDriverByName('GTiff')  # 自己指定生成类型writeable = driver.Create(Savepath, self.cols, self.rows, self.bands, gdal.GDT_Byte)  # TODO  新建数据集writeable.SetGeoTransform(self.geotrans)  # 写入仿射变换参数writeable.SetProjection(self.proj)  # 写入投影for i in range(nband):writeable.GetRasterBand(i + 1).WriteArray(data[i], 0, 0)writeable.GetRasterBand(i + 1).SetNoDataValue(0)  # todo 给各波段设置nodata值writeable.GetRasterBand(i + 1).FlushCache()  # todo 波段统计量#  获取拉伸后数据最大值最小值  进行等分5分mindata = writeable.GetRasterBand(i + 1).GetStatistics(0, 1)[0]maxdata = writeable.GetRasterBand(i + 1).GetStatistics(0, 1)[1]###渲染部分代码itemdata = int((maxdata - mindata) / 5)  # 等分五份取整colortabledata = [(0, 255, 255), (72, 255, 72), (255, 255, 72), (255, 190, 72), (255, 72, 72), (255, 29, 29)]ct = gdal.ColorTable()for j in range(4):ct.CreateColorRamp(int(mindata + j * itemdata), colortabledata[j], int(mindata + (j + 1) * itemdata),colortabledata[j])band = writeable.GetRasterBand(i + 1)band.SetRasterColorTable(ct)ct.CreateColorRamp(int(mindata + 4 * itemdata), colortabledata[4], int(maxdata), colortabledata[5])band = writeable.GetRasterBand(i + 1)band.SetRasterColorTable(ct)###渲染代码returnData=[mindata,maxdata,colortabledata]print(writeable.GetRasterBand(i + 1).GetStatistics(0, 1))  # todo 计算波段统计量  输出为min\max \Mean\stddevreturn returnData
  • 调用

#TODO  RASTERFUNCTION
def computoffset(ds,db): # TODO 计算偏移量从而得出行列号data1=ds.computedoffset()data2=db.computedoffset()xoffset = int((data1[0] - data2[0]) / data1[1])yoffset = int((data1[3] - data2[3]) / data1[5])data = [xoffset, yoffset]return data
def getcludedata(n,ds,db):   # TODO 重新切片切成大小相同的# data = db.getRasterInformation(n)[38:25697, 97:10678]  #TODO 调整为多少行多少列  先化为相同行相同列 即二维数组切片data = db.getRasterInformation(n)[computoffset(ds,db)[1]:ds.computeRows()+computoffset(ds,db)[1], computoffset(ds,db)[0]:db.computeCols()]  # TODO 调整为多少行多少列  先化为相同行相同列 即二维数组切片return data
def getcludedata2(n,ds,db):data = ds.getRasterInformation(n)[0:ds.computeRows(),0:db.computeCols()-computoffset(ds,db)[0]]return data
def getIntersection(n,ds,db,strainRate):data1=getcludedata2(n,ds,db)data2=getcludedata(n,ds,db)data2[data1==0]=0 # todo 将data1中为0位置的元素对应把data2中的元素也置为0data1[data2==0]=0 # todo 将data2中为0位置的元素对应把data1中的元素也置为0result=abs(data2-data1)return  strainRate*result   ###线性拉伸ds = ReadTheRaster.ReadRaster(TheFirstfilepath) #TODO 文件路径
db = ReadTheRaster.ReadRaster(TheSecondefilepath)
status = ds.writeRasterInformation([getIntersection(1, ds, db,20)],outputfilepath, 1)

效果展示

利用GDAL根据栅格影像DN值实现颜色渲染相关推荐

  1. 夜间灯光数据dn值_中国区域DMSP/OLS夜间灯光影像的校正

    DMSP/OLS夜间灯光影像由于传感器未经过星上定标,导致长时间序列的各期影像之间缺乏连续性和可比性,且由于光谱分辨率的限制,使得大量的城市中心像元出现DN值为63的集聚饱和现象等问题,因此学者们对以 ...

  2. gdal获取像元的灰度值java_GDAL利用地理坐标读取图像像元值

    最近的一个项目需要在电子海图中下载已知水深点,导出点的地理坐标(经纬度).然后在arcgis中打开这些地理坐标输出为shp,利用GDAL读取不同波段的点对应的像元值,从而构建水深和像元值的对应关系. ...

  3. python矢量裁剪栅格代码_Python中使用面状矢量裁剪栅格影像,并依据Value值更改矢量属性...

    本文整体思路:在Python中使用Geopandas库,依次读取shp文件的每一个面状要素,获取其空间边界信息并裁剪对应的栅格影像,计算所裁剪影像Value值的众数,将其设置为对应面状要素的NewTY ...

  4. ENVI背景值nodata或NAN解决方法/ArcGIS栅格影像背景颜色去除

    可见红十字线指向的背景处值为NAN(nodata同理) 在Arcgis中打开显示为nodata且背景值有颜色不方便设色制图 添加一个shp文件作为裁剪 裁剪功能位置:工具箱\系统工具箱\Data Ma ...

  5. gdal进行遥感影像读写_如何使用遥感影像进行矿物勘探

    gdal进行遥感影像读写 Meet Jose Manuel Lattus, a geologist from Chile. In the latest Soar Cast, he discusses ...

  6. 将栅格影像转换为CAD/GIS矢量的3种方法

    原文发布时间:2017/11/22  12:58:11 从图像中提取矢量要素或"栅格矢量化"涉及将栅格像素组转换为多边形.这是GIS和CAD工作流程的常见场景,也是一个具有挑战性的 ...

  7. python/gdal处理遥感影像(读取、投影转换、裁剪、建立图像金字塔等)

    python/gdal处理遥感影像(读取.投影转换.裁剪.建立图像金字塔等) gdal库简单介绍 python使用gdal 一.安装python环境 二.安装gdal库 三.使用gdal处理遥感影像 ...

  8. 使用VRT裁剪栅格影像

    代码同样来自<Python地理数据处理>,这里做一个学习记录.书籍原外文名"Geoprocessing with Python",在曼宁出版社可以搜索到,可以线上免费预 ...

  9. 数据空间变换——栅格影像值域映射到0-255范围

    前一段时间把多波段影像输入到深度网络进行训练的时候,由于我的多波段影像是用arcgis的[波段合成工具]来合成的,只是把原本的RGB三个波段的影像又加入了近红外.NDVI两个波段.在使用torchvi ...

  10. Python批量实现栅格影像可视化

    任务描述: 对栅格影像进行可视化并保存图片 数据准备: 文件夹(工作空间)内含有需要批量可视化的tif影像 工具准备: Python环境 操作: 替换代码中的路径.根据需要调整可视化图片格式 # -* ...

最新文章

  1. UNITY3D拓展编辑器 - 目录
  2. [cocos2d-x]图层的旋转缩放效果
  3. 妇女在IT安全工作人员当中的比例只有10%
  4. 【错误记录】Android Studio 向 GitHub 提交代码报错 ( Push failed: Failed with error: Could not read | 使用命令行提交代码 )
  5. 升级到ubuntu9.10Alpha5的艰苦路程
  6. 【网络爬虫入门02】HTTP客户端库Requests的基本原理与基础应用
  7. 命令行开启一个unity实例和执行其中的脚本方法的使用和注意
  8. 微服务升级_SpringCloud Alibaba工作笔记0017---Nacos之服务消费者注册和负载
  9. linux内核不发(Router Solicit)RS报文问题
  10. C/C++集成开发环境搭建
  11. 数据库sqlite3怎么排顺序_【数据库02】MySQL数据库面试题
  12. JSP 标准标签库(JSTL)(菜鸟教程)
  13. Jack的E680刷机过程全记录
  14. 「上海院子」打造不可复制的国宅风华
  15. php保存pdf旋转90度,如何将PDF图片旋转90度,盘点这个小方法
  16. ins图片视频批量下载
  17. 霜降后,宝宝穿衣要做到三捂两不捂
  18. 使用BeanUtils.populate遇到的bug
  19. 如何判断2个线段相交
  20. 怎样检测计算机硬件是否正常,怎么检查电脑硬件是否有问题

热门文章

  1. DAO是什么?为什么我们需要DAO?
  2. golang dep安装
  3. Windows(10) Python polyglot安装和运行失败的问题
  4. 又见猛犸象:基因剪刀重新定制生命
  5. Splines(样条曲线)
  6. opencart插件之 Also Bought Products(购买该产品的用户也购买了)
  7. 计算机断网后怎么连接网络连接,电脑突然断网, 连接不上网络怎么办? 三种方法轻松找回...
  8. 如何让计算机断开网络连接网络设置,电脑怎样设置定时断网,教您怎么设置
  9. 《HarmonyOS开发 – 小凌派-RK2206开发笔记》第4章 串口应用开发
  10. js 判断2月份多少天