カットラインを指定してモザイクを行うには

gdalwarpコマンドは、出力先に既存のファイルを指定するとそのファイルに変換元の画像を書き込むようになっています。
これを利用してモザイクを行うことができます。
また、gdalwarpのモザイクでは、接合線を指定してモザイクを行うことができるので便利です
(なぜ別コマンドにしなかったのか)。

以下はその手順の1例です。
以下の例では図のように画像が配置されていて、赤い枠の範囲でモザイクを行うものとします。


初期配置

初期配置

対象範囲の空画像を作成

gdalwarpコマンドでモザイクを行う場合は、後から追加する画像に合わせてモザイク画像の範囲が広がるということがありません。
したがって、1枚目の画像範囲がそのまま出力画像の範囲になります。
最初にgdalwarpを実行する画像が対象範囲全体をカバーしていない場合は、あらかじめ対象範囲の空画像を作成しておく必要があります。

空画像の作成方法はいろいろとあると思いますが、
縦横のピクセル数を計算して何かレタッチソフトで空画像を作成し、
gdal_translateを使って座標値を割り当てるという手順でよかろうと思います。

カットラインの作成

gdalwarpでのモザイクは1枚ずつ重ねていく形で実行するので、実行する順番をあらかじめ決めておく必要があります。
1枚目の画像(つまり最背面の画像)はカットラインを作る必要はありません。
カットラインは2枚目以降の画像に対して作成しますが、N番目の画像はN-1番目までの画像とのカットラインを作成し、
それ以降の画像との接合は考える必要はありません。

カットラインはポリゴンで作成する必要があります。また、1枚の画像に付き1ファイル(レイヤー)で作成します。
ここではカットライン格納用フォルダを作成して、その中にShapeファイルで各画像のカットラインデータを作成するものとします。
こうすると、フォルダ=データソース、ファイル=レイヤーとして扱うことができます。

まず、1枚目の画像をそのままgdalwarpでモザイクしてしまいます。


1枚目実行結果

1枚目実行結果

これを見ながら2枚目のカットラインを作成します。


2枚目のカットライン

2枚目のカットライン

カットラインは、モザイク対象の画像以外の箇所(図の黒の部分)に対してはなるべく画像範囲を削らないように作成しておきます。
そうしないと、後続の画像がモザイクされるときにブレンドが効かなくなってしまいます。

カットラインを作成したらモザイクを実行してみましょう。gdalwarpコマンドを以下のように入力します。

# gdalwarp -cutline "カットラインフォルダ名" -cl "レイヤー名" 
    -cblend "カットラインからのブレンド幅" "入力ファイル名" "モザイクファイル名"


2枚目のモザイク実行結果

2枚目のモザイク実行結果

同じ要領で、3枚目以降も作成していきます。


3枚目のカットライン

3枚目のカットライン


3枚目のモザイク実行結果

3枚目のモザイク実行結果(ブレンド幅50pix)


4枚目のカットライン

4枚目のカットライン


4枚目のモザイク実行結果

4枚目のモザイク実行結果(ブレンド幅50pix)

モザイクする画像が増えてくると混乱しやすくなるので注意しましょう。
特に、モザイクする順番は充分気をつける必要があります。
適当にすると上の図のようにブレンドがおかしな効き方をする恐れがあります。

カットラインの指定方法は、他にも-cwhereオプションや-csqlオプションを利用することもできます。

アーカイブ