raster - Gdal减去1位光栅让我很难过
问题描述
我想用来gdal_calc
从另一个文件中减去一个文件。它有效,但无论我尝试什么命令行,我总是得到错误的结果。为了您的理解,我创建了 3 个文件。
图一:
图B:
图片C:
如您所见,我总是得到重叠的结果,但我需要另一部分。
期望的结果:
gdal_calc.py -A pica.tif -B picb.tif --outfile=result.tif --calc="A-B"
将行更改为
gdal_calc.py -A pica.tif -B picb.tif --outfile=result.tif --calc="B-A"
或交换文件名不起作用?我总是得到相同的结果。我还在尝试新东西之前删除了输出文件,所以这不是我总是查看同一个文件的问题。
解决方案
你的黑白像素值是多少?通常白色为 1(或 255),黑色为 0,但这只是一个猜测。如果是这种情况,您可能需要相反的情况,例如(1-A)-(1-B)
(如果您的值真的是 1 位)。
对于测试\调试,最好先将两个输入图像都转换为无符号整数数据类型。例如:
gdal_translate -ot Int32 pica.tif pica_int32.tif
这将允许结果中出现负值,因为gdal_calc
不会将数据转换为新的“工作数据类型”(例如 gdalwarp 可以这样做-wt
)。所以这意味着您正在输入数据类型(可能是字节?)中进行计算。请参阅“注意”框:
https ://gdal.org/programs/gdal_calc.html#cmdoption-type
如果你要减去,并且数据类型是Byte
,它可能会导致结果超出该数据类型的有效范围(如 -1)。正常的 Numpy 行为是简单地“环绕”(而不是剪辑等),因此可能会导致一些令人惊讶的结果,例如:
import numpy as np
a = np.array([1, 0, 1, 1], dtype=np.uint8)
b = np.array([0, 1, 254, 255], dtype=np.uint8)
a - b
结果是:
array([ 1, 255, 3, 2], dtype=uint8)
推荐阅读
- swift - 从基于 macOS Swift 的应用程序中运行时,Apple 脚本失败
- unity3d - 有没有办法改变 Unity 的视图快捷方式?
- php - 为什么我的阵列不能插入到我的数据库中?
- d3.js - 关于如何从我在 d3 中的数据生成饼图的困惑
- javascript - 如何通过列表项将 React 道具传递给类
- .net - 如何从 VBA 迭代 .NET HashTable 的键
- node.js - 脚本下 package.json 文件中的配置设置
- php - in_array 的奇怪用法
- scala - How to add fields to existing parquet and generate new parquet (Scala or python)
- json - CICS Bundle and JSON webservice