percentage - 使用GDAL和python计算像素值的统计
问题描述
我有一个使用 GDAL 创建的 geotiff 图像。我想知道是否可以使用 GDAL 和 Python(或仅其中之一)来提取特定值的像素百分比。
特别是,如果我这样做:
gdalinfo -hist input.tif
我得到了所有的元数据信息,特别是,
Size is 4901, 2867
...
Band 1 Block=4901x1 Type=Byte, ColorInterp=Palette
Minimum=0.000, Maximum=5.000, Mean=2.263, StdDev=1.135
0...10...20...30...40...50...60...70...80...90...100 - done.
256 buckets from -0.5 to 255.5:
1740973 365790 6385650 3688110 1757506 113138 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
有没有办法计算直方图中定义的 6 个值的像素百分比?
.tif 文件的大小是 4901x2867,所以如果我可以使用 GDAL 和/或 Python 提取每个字段,那么我可以计算如下:
pixel_value_0 = 1740973/(4901x2867)
并得到像素值的百分比为 0
解决方案
如果使用 Python,您可以将光栅图像转换为 Numpy 数组,然后进行计算
from collections import Counter
from osgeo import gdal_array
# Read raster data as numeric array from file
rasterArray = gdal_array.LoadFile('RGB.byte.tif')
# The 3rd band
band3 = rasterArray[2]
# Flatten the 2D array to 1D and count occurrences of each values
# Then simple to get the stat for a pixel value in particular
print(Counter(band3.flatten()))
推荐阅读
- sql - 从 SSMS 中的列计算百分比
- reactjs - React-Router V4,使用 HashRouter。井号之前的文本仍然与路由匹配
- excel - 如何重新排列和分组表中的数据
- python-3.x - 我如何为维基百科页面构建一个基本的网络爬虫来收集链接?
- c - PathFindExtensionW 总是返回“。” 而不是完全扩展
- r - 如何合并数据框?
- java - 在excel中根据日期对数据进行排序
- c# - SHA256 字符串的 Base64 编码
- html - 悬停时旋转会阻止锚点工作 CSS3/HTML5
- javascript - Google 在页面加载时放置自动搜索不适用于 URL 中的点