我有大约1,000张tiff格式的卫星图像,并且我想创建一个shapefile用作栅格的索引。这有点类似于栅格目录,但是我不想建立栅格目录。我正在谈论数据区域)。

为了澄清,我要求多边形仅覆盖栅格的非零(或非nodata)像素,而不覆盖整个矩形栅格。到目前为止,大多数答案都给出一个覆盖数据以及非数据像素的矩形多边形。

我的图像



我检查过的工具给出的结果(例如光栅目录,各种Arcscript,答案中给出的自定义Python脚本):



我想要的结果:


评论

似乎创建栅格目录,即使暂时创建栅格目录也是一个很好的解决方案。您可以创建一个不受管理的目录,该目录创建一个引用表,但是将图像保留在服务器上的位置。将栅格批量导入目录很容易,而且相对较快。创建足迹后,可以将轮廓导出到新的要素类并删除栅格目录。这可能和其他选项一样快。

镶嵌数据集还可以生成图像足迹。

镶嵌数据集是必经之路。非常容易实现

那么在最后一张图像中,红色框NoData或0之外的像素是吗?如果它们是0,那么您想要的区域中是否有像素也是0值?

红色边框之外的像素为无数据;但是我的多光谱数据具有0,0,0作为nodata区域的RGB值。在这两种情况下,所需区域内都没有值为0的像素。

#1 楼

QGIS中有一个名为Image Boundary的插件。这是一个很棒的工具。在此工具中,有一个“有效像素”选项,例如,它将忽略卫星图像的黑色边缘。

[更新:此插件不再存在,如QGIS 3.12.3 。插件“图像足迹”已存在,但已弃用,似乎无法使用。]

评论


这个插件声称可以完成我想要的操作,但是在我尝试过的图像上却失败了。明天我将尝试使用我的真实数据。

–德夫达塔(Devdatta Tengshe)
2012年6月6日13:56

我发现该插件与多光谱数据配合得很好,但有时单波段大面积图像会产生奇怪的结果。

–德夫达塔(Devdatta Tengshe)
2012年6月8日14:25

我同意QGIS图像边界效果最好,但是有一个工具可以对矢量文件执行此操作,而在这些文件中我们不需要“边界框”或“足迹”,而需要一个概述数据存在的多边形。

–GeorgeC
2012年8月7日在6:07

图像边界工具很棒,但是,您提供的链接是404。我相信如果您在插件设置中允许使用实验性插件,这些工具仍然可用。也许使用此链接?:github.com/lmotta/imagefootprint_plugin

–亚伦♦
18-2-27在3:54



是否有使用图像边界的任何文档?

– Loonuh
19年1月15日在17:08

#2 楼

以下代码将获取输入栅格,获取其范围,并将该范围插入到面要素类中:

import arcpy

r = arcpy.Raster(in_raster)
point = arcpy.Point()
array = arcpy.Array()

corners = ["lowerLeft", "lowerRight", "upperRight", "upperLeft"]

cursor = arcpy.InsertCursor(fc)
feat = cursor.newRow()
for corner in corners:    
    point.X = getattr(r.extent, "%s" % corner).X
    point.Y = getattr(r.extent, "%s" % corner).Y
    array.add(point)
array.add(array.getObject(0))
print len(array)
polygon = arcpy.Polygon(array)
feat.shape = polygon
cursor.insertRow(feat)
array.removeAll()
del feat
del cursor


您可以通过设置在ArcMap Python窗口中运行它将in_rasterfc像这样:

>>> fc = 'r_extent'
>>> in_raster = 'CaliCoast10mNED_HavCurvedPCS'


其中r_extent是现有的面要素类。然后只需复制代码并运行它。我知道了:



评论


我已使用上面的代码对文件夹执行相同操作:gist.github.com/4162013

–杰布
2012年11月28日15:33



#3 楼

您可以为此使用gdaltindex:http://www.gdal.org/gdaltindex.html

但是它将仍然在与图像相同的参考系统中创建矩形(例如4 + 1点)。但我想知道这是否真的是一个问题:您的图片有多大?

评论


gdaltindex的问题在于,它会为每个图像创建一个矩形多边形。我只对非零值像素感兴趣

–德夫达塔(Devdatta Tengshe)
2012年6月6日下午13:57

#4 楼

如果您对脚本解决方案感兴趣,请尝试使用gdal命令nearblack。您也可以使用标志-white来检索以空格为边界的数据。您可以将输出多边形化以生成栅格数据的非矩形轮廓。

##run nearblack
shellcmds = "nearblack -white -o " + outpath + " " + inpath
os.system(shellcmds)

##run polygonize
shellcmds = "gdal_polygonize.py " + outpath + " -f" + """ "ESRI Shapefile"  """ + outpath2 + " nearblack"
os.system(shellcmds)


#5 楼

我在QGIS中尝试了“图像边界”工具,但是它对某些栅格失败。
对我有用的另一个选项是:

通过使用gdal_translate命令行将输入栅格转换为单个数字实用程序。

gdal_translate -co compress=lzw -b 1 -ot byte -scale 1 1 inp.tif out.tif
这将在inp.tif中具有非零值的所有地方创建值为1的栅格。 “多边形”工具来获取多边形(shapefile)。

输出shapefile将具有非四边形边界,并具有多个多边形顶点,并遵循图像的实际边界。

#6 楼

以前的答案适用于QGIS2.x。
如果您在2020年之后阅读此内容,您会发现答案不起作用。与QGIS 3.x兼容的是名为IBAMA Processing的插件。
安装此插件,然后您将在Processing Toolbox中获得“创建图像的足迹”工具/算法。

#7 楼

您可以创建分配了空间参考的栅格目录,将栅格目录添加到ArcMap,然后“导出足迹”。请记住,有一个选项可以创建一个“未管理”的栅格目录,这样您就不必复制每个栅格数据集。