GDAL_CALC GDAL命令

使用gdal_calc重新分类栅格
gdal_calc是GDAL实用程序中较少使用的工具之一。没有很多使用它的示例,并且一些高级功能没有得到很好的记录。我最近发现自己经常使用它,并且发现了一些非常强大的用例。
处理多波段栅格
gdal_calc具有用于指定输入的特殊语法。如果要使用2个图像-input1.tif和input2.tif,请按以下方式指定它们
gdal_calc -A input1.tif -B input2.tif …但是,如果您想进行一些波段数学运算或分别使用输入的每个波段怎么办?如果您的input.tif有4个频段,请按照以下方法指定它们
gdal_calc -A input.tif --A_band=1 -B input.tif --B_band=2 -C input.tif --C_band=3 -D input.tif --D_band=4 …表达式语法
gdal_calc使用numpy语法指定计算。有许多种写表达式的方法。这是我首选方法的一些示例
假设您有一个1波段图像input.tif,并且要查找值> 100的所有像素。将在每个像素处计算以下表达式。结果将为1,其中像素值通过表达式文本,而在其他位置为0。

gdal_calc -A input.tif --calc=“A>100” --outfile output.tif

因此,这为我们进行重新分类提供了基础。假设您的目标是对input.tif进行重新分类,如下所示
● 0-100→1
● 101-200→2
● > 200→3
我们可以在表达式中添加3个条件,然后将结果与适当的重新分类值相乘以获得结果。

gdal_calc -A input.tif --calc="(A<=100)1 + (A>100)(A<=200)*2 + (A>200)*3" --outfile output.tif

您也可以使用logical_or和logical_and函数获得相同的结果。

gdal_calc -A input.tif --calc="(A<=100)*1 + logical_and(A>100,A<=200)*2 + (A>200)*3" --outfile output.tif

但是logical_and和logical_or仅接受2个参数。因此,如果您有多个条件(如我们在下面的示例中看到的),则表达式的编写将变得更加棘手。因此,我更喜欢使用我们之前使用的乘法语法。但是gdal_calc可以使用numpy库提供的全套功能。
重新分类多波段栅格
现在,我们可以尝试将这些概念应用于对多波段栅格进行重新分类。该表达式有点复杂,但是如果您遵循上述示例,它应该很有意义。
假设我们要对4频段输入进行重新分类。tif如下
● (R,G,B,A)值(<= 100,<= 100,<= 100,255)→1
● (R,G,B,A)值(100-200,100-200,100-200,255)→2
● (R,G,B,A)值(> = 200,> = 200,> = 200,255)→3
● 所有其他组合为0
该表达式可以如下编译

gdal_calc -A input.tif --A_band=1 -B input.tif --B_band=2 -C input.tif --C_band=3 -D input.tif --D_band=4 --outfile output.tif --calc="(A<=100)(B<=100)(C<=100)(D==255) + (A>100)(A<=200)(B>100)(B<=200)(C>100)(C<=200)(D==255)2 + (A>=200)(B>=200)(C>=200)*(D==255)*3"

发布了6 篇原创文章 · 获赞 0 · 访问量 227

猜你喜欢

转载自blog.csdn.net/nike123456789/article/details/105472319