【问题标题】:Gdal substract 1 bit raster gives me hard timeGdal减去1位光栅让我很难过
【发布时间】:2021-10-19 13:52:03
【问题描述】:

我想使用gdal_calc 从另一个文件中减去一个文件。它有效,但无论我尝试什么命令行,我总是得到错误的结果。 为了您的理解,我创建了 3 个文件。

图片A:

图片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"

或交换文件名不起作用?我总是得到相同的结果。 我还在尝试新东西之前删除了输出文件,所以这不是我总是查看同一个文件的问题。

【问题讨论】:

    标签: raster tiff gdal calc


    【解决方案1】:

    你的黑白像素值是多少?通常白色为 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)
    

    【讨论】:

      猜你喜欢
      • 2011-10-06
      • 1970-01-01
      • 2011-03-28
      • 2021-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多