2022年12月
2022年12月28日
巨大GeoTiffの処理の続き(オルソタイルの結合)
分割が出来るのなら、逆の結合も出来るだろう と思いついて やってみた。
574個の1マス4000ピクセルのオルソタイルでテスト・・・
結果、出来た!

全体で101,159x148,081ピクセルのオルソタイルを、幅5,000ピクセルの単一のGeoTiffに結合できた。
ちなみに約25分かかった。

まだ、大きなサイズへの結合はテストしてないけど、もっと高精細で結合できれば、QGISはエクスポートサイズ30,000Pixの壁があったので、こっちの方が重宝するし使いやすい。
ここで備忘録
ファイル名やフォルダ名に日本語が含まれる場合、
gdalwarpに渡すoptfileは、UTF-8で作らないとGDALは中身が読めない。
つまりoptfileは常にUTF-8で作ること。

最初にオルソタイルのあるフォルダーを指示して、全てのファイルの地理空間情報を解析する。
全体で101,159x148,081ピクセルのオルソタイルを、幅5,000ピクセルの単一のGeoTiffに結合できた。
ちなみに約25分かかった。

まだ、大きなサイズへの結合はテストしてないけど、もっと高精細で結合できれば、QGISはエクスポートサイズ30,000Pixの壁があったので、こっちの方が重宝するし使いやすい。
ここで備忘録
ファイル名やフォルダ名に日本語が含まれる場合、
gdalwarpに渡すoptfileは、UTF-8で作らないとGDALは中身が読めない。
つまりoptfileは常にUTF-8で作ること。
ho_cad at 16:09|Permalink│Comments(0)│
2022年12月25日
遂に完成!GeoTiffSpliter32(巨大画像対応版)
思いついてから1週間ちょっとで、できた!
我ながら これ 来年度からの本業にめっちゃ 使える。
最終テストで
44753 x 75494ピクセルのGeoTiff
3階層のピラミッドで
処理に20分かかったけど
無事エクスポート完了!
HO_CADpaoでも スムースに
描画してくれる。
エクスポート設定!

最後の最後に、
上図のようなTifだと、ピラミッドの中間層に全部が真っ白な画像をエクスポートしてしまい、これがディスク上で1.3GBも使うので、真っ白か真っ黒(エンプティ)の画像を自動的に検知して削除するようにした。
画像がエンプティかどうかを検知するのは、結局Scanlineを使って画像に使われている色数をカウントして、カウントが1なら(白か黒しかない)ならエンプティとした。
で、やってみたらこれが意外と面倒で、考え方は簡単なんじゃけど、アプローチの仕方によって処理時間がめちゃめちゃ変わる。
最初に、バイナリ―アルゴリズムの総当たり方式(シーケンシャル)で色数をカウントしてみたら約50万色使っている3000x3000ピクセルの画像で17秒もかかり「これは実用 無理か―」になり、
次は、メモリーの専有量は無視して、最初から24ビットカラー分の「この色を使っているかどうか」のリストを確保しておいて、インデックス方式(ランダム)でやってみたら、0.1秒くらいで検出できるようになった。
これならアプリで使い物になので、⑫が実装できた。
これで 安らかに年が越せそう・・・
あー できた・・・ 浮世の月にかかる雲無し・・・
我ながら これ 来年度からの本業にめっちゃ 使える。
最終テストで

44753 x 75494ピクセルのGeoTiff
3階層のピラミッドで
処理に20分かかったけど
無事エクスポート完了!
HO_CADpaoでも スムースに
描画してくれる。
エクスポート設定!

最後の最後に、
上図のようなTifだと、ピラミッドの中間層に全部が真っ白な画像をエクスポートしてしまい、これがディスク上で1.3GBも使うので、真っ白か真っ黒(エンプティ)の画像を自動的に検知して削除するようにした。
画像がエンプティかどうかを検知するのは、結局Scanlineを使って画像に使われている色数をカウントして、カウントが1なら(白か黒しかない)ならエンプティとした。
で、やってみたらこれが意外と面倒で、考え方は簡単なんじゃけど、アプローチの仕方によって処理時間がめちゃめちゃ変わる。
最初に、バイナリ―アルゴリズムの総当たり方式(シーケンシャル)で色数をカウントしてみたら約50万色使っている3000x3000ピクセルの画像で17秒もかかり「これは実用 無理か―」になり、
次は、メモリーの専有量は無視して、最初から24ビットカラー分の「この色を使っているかどうか」のリストを確保しておいて、インデックス方式(ランダム)でやってみたら、0.1秒くらいで検出できるようになった。
これならアプリで使い物になので、⑫が実装できた。
これで 安らかに年が越せそう・・・
あー できた・・・ 浮世の月にかかる雲無し・・・
ho_cad at 15:36|Permalink│Comments(0)│
2022年12月24日
巨大GeoTiffの処理(ほぼ完成)
ほぼほぼ出来た!
終盤、ピラミッド化するために解像度を落として切り取るのに、解像度の縮小率は実数なのに対して、画像のピクセル値(画像上での座標)は整数値なので、演算誤差が出ている事に気付き、全体的に座標丸めのタイミングを見直した。
結果的にうまくいって良かった・・・
ただ、ピラミッドの中層はどうしても1ピクセル未満の誤差は残る。
まあ、実際は最下層でトレースとかするので、この誤差には目をつむることにした。
マウスをコロコロして拡大して行くときに、どんな感じで解像度が切り替われば ええ感じで見えるか? とりあえずは直線的に切り替えるようにした。
二次曲線みたいな方が ええ感じ の気もするが、実際にしばらく実用してみて考えることにした。
自分は何か作るときに、最初にカレンダーの裏紙にザックリとしたフローとか、考え方とか実際のシュミレーションとかを殴り書きして整理します。

HO_CADを作り始めた頃からカレンダーの裏紙を使っていて、解法とかの殴り書き 捨てられずに昔のカレンダーがたまっていますが・・・
カレンダーの紙 捨ててませんか? 重宝しますよ。
終盤、ピラミッド化するために解像度を落として切り取るのに、解像度の縮小率は実数なのに対して、画像のピクセル値(画像上での座標)は整数値なので、演算誤差が出ている事に気付き、全体的に座標丸めのタイミングを見直した。
結果的にうまくいって良かった・・・
ただ、ピラミッドの中層はどうしても1ピクセル未満の誤差は残る。
まあ、実際は最下層でトレースとかするので、この誤差には目をつむることにした。
マウスをコロコロして拡大して行くときに、どんな感じで解像度が切り替われば ええ感じで見えるか? とりあえずは直線的に切り替えるようにした。
二次曲線みたいな方が ええ感じ の気もするが、実際にしばらく実用してみて考えることにした。
自分は何か作るときに、最初にカレンダーの裏紙にザックリとしたフローとか、考え方とか実際のシュミレーションとかを殴り書きして整理します。

HO_CADを作り始めた頃からカレンダーの裏紙を使っていて、解法とかの殴り書き 捨てられずに昔のカレンダーがたまっていますが・・・
カレンダーの紙 捨ててませんか? 重宝しますよ。
ho_cad at 02:30|Permalink│Comments(0)│
2022年12月21日
巨大GeoTiffの処理(オルソタイル化)
コアな部分をGeoTiffSpliterの32ビット版に移植できた。

見た目は64ビット版と同じじゃけど、巨大なTiffも分割できる。
32ビット版なのに64ビット版よりも、はるかに大きな画像が処理できる。
不思議な感じがする。 GDALのおかげ・・・

エクスポートもうまくいった。
テストに時間がかかるので、まだ本当に巨大な画像でテストしてないけど、いけるはず。
後はワールドファイルの書き出しとかトリミングとか こまごま仕上げていくのみ。
あー後、GDALに送るオプション文字列、ユニコードにせんといけんのか確認していかないと。
どうしたってフォルダ名とかに日本語が入ってくるから、これには対応しないと…
巨大Tiffの処理、「自分には無理!」と一旦はあきらめていたけど 何とかかんとか 出来るもんじゃねー と感慨ひとしお・・・

見た目は64ビット版と同じじゃけど、巨大なTiffも分割できる。
32ビット版なのに64ビット版よりも、はるかに大きな画像が処理できる。
不思議な感じがする。 GDALのおかげ・・・

エクスポートもうまくいった。
テストに時間がかかるので、まだ本当に巨大な画像でテストしてないけど、いけるはず。
後はワールドファイルの書き出しとかトリミングとか こまごま仕上げていくのみ。
あー後、GDALに送るオプション文字列、ユニコードにせんといけんのか確認していかないと。
どうしたってフォルダ名とかに日本語が入ってくるから、これには対応しないと…
巨大Tiffの処理、「自分には無理!」と一旦はあきらめていたけど 何とかかんとか 出来るもんじゃねー と感慨ひとしお・・・
ho_cad at 01:04|Permalink│Comments(0)│
2022年12月19日
巨大GeoTiffの処理(備忘録の続き3)
32ビット版アプリでのプロトタイプ完成!

44753x75494のGeoTiff
GeoTagも取れてレンダリングもOK。
ただ、やっぱり メッチャ時間が掛かる。
ハードディスクからの読み込みで3~4分かかる。
読み込み中はウィンドウ内のコントロールを全て無効
にしておかないといけないので、そうしたけど、
作った本人でさえ「フリーズしたかー」になるので、
い一応コンソールの文字列の変異からプログレスバーに
進行状況を反映するようにしてみた。
結果 まあ無いよりはまし 程度にはなった。
次はこのやり方を、本来やりたかったGeoTiffSpliterに移植する作業。
でもまあ
「高価なソフトや機器でなくても同等の事ができるようにする」
これをモチベーションにもうちょといろいろ頑張ってみよう!

44753x75494のGeoTiff
GeoTagも取れてレンダリングもOK。
ただ、やっぱり メッチャ時間が掛かる。
ハードディスクからの読み込みで3~4分かかる。
読み込み中はウィンドウ内のコントロールを全て無効
にしておかないといけないので、そうしたけど、
作った本人でさえ「フリーズしたかー」になるので、
い一応コンソールの文字列の変異からプログレスバーに
進行状況を反映するようにしてみた。
結果 まあ無いよりはまし 程度にはなった。
次はこのやり方を、本来やりたかったGeoTiffSpliterに移植する作業。
でもまあ
「高価なソフトや機器でなくても同等の事ができるようにする」
これをモチベーションにもうちょといろいろ頑張ってみよう!
ho_cad at 23:52|Permalink│Comments(0)│
