ラスターのフットプリントを示すシェープファイルを作成しますか?


33

TIFF形式で約1,000枚の衛星画像があり、ラスタのインデックスとして機能するシェープファイルを作成したいと思います。これはラスターカタログに似ていますが、ラスターカタログを作成したくありません。

私が予見できるいくつかの障害は、画像がジオリフレンシー化されているため、形状が長方形ではないことです(データ領域について話している)。

明確にするために、ポリゴンは、長方形のラスタ全体ではなく、ラスタの非ゼロ(または非データ)ピクセルのみをカバーする必要があります。これまでの回答のほとんどは、データと非データピクセルをカバーする長方形のポリゴンを提供します。

私のイメージ サンプル衛星画像


私が調べたツールによって得られた結果(ラスターcatlog、さまざまなArcscript、回答の1つで与えられたカスタムPythonスクリプトなど): 結果


私が望む結果: ここに画像の説明を入力してください


4
一時的にでも、フットプリントを作成するのに適したソリューションになると思われる、ラスタカタログの作成のようです。管理されていないカタログを作成できます。これにより、参照のテーブルが作成されますが、サーバー上の場所に画像が残ります。ラスタをカタログにバッチインポートするのは簡単で、比較的迅速です。作成したら、フットプリントを新しいフィーチャクラスにエクスポートし、ラスタカタログを削除できます。これは他のオプションと同じくらい速いかもしれません。
空間の取得

2
モザイクデータセットは、画像のフットプリントも生成します。
ロイ

モザイクデータセットを使用する方法です。非常に簡単に達成
ブラッドネソム

最後の画像では、赤いボックスのNoDataの外側のピクセルは0ですか?それらが0の場合、必要な領域に0値のピクセルがありますか?
チャドクーパー

1
赤い枠の外側のピクセルはnodataです。しかし、私のマルチスペクトルデータには、nodataエリアのRGB値として0,0,0があります。どちらの場合も、必要な領域内に値0のピクセルはありません。
Devdatta Tengshe

回答:


15

QGISにはImage Boundaryと呼ばれるプラグインがあります。それは素晴らしいツールです。このツールには、たとえば、衛星画像の黒い縁を省く「有効なピクセル」のオプションがあります。


このプラグインは、私が望んでいたことを実行すると主張していますが、実験した画像では失敗しています。明日は実際のデータを使ってみます。
Devdatta Tengshe

このプラグインはマルチスペクトルデータで非常にうまく機能することがわかりましたが、シングルバンドのパンクロマティック画像では奇妙な結果になることがあります。
Devdatta Tengshe

2
QGIS Image Boundaryが最適に機能することに同意しますが、「境界ボックス」または「フットプリント」を必要とせず、データが存在する場所を示すポリゴンを必要とするベクターファイルに対してこれを行うツールがあります。
GeorgeC

画像境界ツールは素晴らしいですが、あなたが提供するリンクは404です。プラグイン設定で実験的なプラグインを許可すれば、ツールはまだ利用できると思います。おそらくこのリンクを使用しますか?:github.com/lmotta/imagefootprint_plugin
アーロン

画像境界を使用するためのドキュメントはありますか?
Loonuh

9

次のコードは、入力ラスターを取得し、その範囲を取得して、その範囲をポリゴンフィーチャクラスに挿入します。

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_rasterし、fcそうのように:

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

どこr_extent既存のポリゴンフィーチャクラスです。次に、コードをコピーして実行します。私はこれを得る:

ここに画像の説明を入力してください


1
私は、フォルダのために同じことを行うために上記のコードを使用していますgist.github.com/4162013
ジェブ

7

これにはgdaltindexを使用できます:http ://www.gdal.org/gdaltindex.html

ただし、画像と同じ参照システムに四角形(4 + 1ポイントなど)を作成します。しかし、それは本当に問題なのだろうか:あなたの画像はどれくらい大きいのか?


gdaltindexの問題は、画像ごとに長方形のポリゴンが作成されることです。私は、唯一の非ゼロ値ピクセルに興味を持っています
Devdatta Tengshe

4

QGISで「画像境界」ツールを試しましたが、一部のラスタで失敗します。

私のために働いた別のオプションは次のとおりです。

gdal_translate -co compress = lzw -b 1 -ot byte -scale 1 1 inp.tif out.tif

これにより、inp.tifの値がゼロ以外のすべての場所で値1のラスタが作成されます。

  1. 次に、ArcMapで「ラスタからポリゴン」ツールを使用して、ポリゴン(シェープファイル)を取得できます。

出力シェープファイルには、画像の実際の境界に沿って、複数の多角形の頂点を持つ非四辺形の境界があります。


3

スクリプト化されたソリューションに興味がある場合は、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)


0

ArcGIS 3D Analystには、ラスタデータセットのデータ部分のポリゴンまたはポリラインフットプリントを作成し、NoDataセルを無視するラスタドメインと呼ばれるツールがあります。私にとっては素晴らしい仕事でした。


1
当サイトへようこそ!あなたの答えがトメックのものとどのように異なるか説明できますか?
whuber

ラスタードメインが機能しました-ご協力ありがとうございます!
meryloo 14年

0

空間参照が割り当てられたラスタカタログを作成し、ラスタカタログをArcMapに追加してから、「フットプリントのエクスポート」を実行できます。各ラスタデータセットの複製を作成しないように、「管理されていない」ラスタカタログを作成するオプションがあることを忘れないでください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.