問題タブ [vips]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
241 参照

python - イメージ全体をメモリにロードせずに、単一の tif イメージを部分的に numpy 配列にロードするにはどうすればよいですか?

そのため、処理する必要がある4GBの.TIF画像があります。メモリの制約として、画像全体をnumpy配列にロードできないため、ハードディスクから部分的に遅延してロードする必要があります。基本的に私は必要であり、それはプロジェクトの要件としてpythonで行う必要があります。PyPi tifffileで tifffile ライブラリも探してみましたが、役立つものは何も見つかりませんでした。

0 投票する
1 に答える
252 参照

python - Pyvips が画像を引き伸ばすのを防ぐ方法

pyvips を使用して複数の画像を結合しようとしていますが、処理中に画像の幅が 2 倍以上になり、その理由がわかりません

私のコードの重要な部分は次のとおりです。

5 つのファイルの期待される出力は次のようになります。

しかし、私の実際の出力は次のとおりです。

画像: https://imgur.com/a/IDuRtIK

何が原因ですか?

0 投票する
1 に答える
1629 参照

python - タイルを bigtiff イメージに効率的に保存する

dtype np.uint8 の 256 x 256 ピクセルの何千ものグレースケール タイルがあり、それらをできるだけ早く 1 つの BigTiff ピラミッド型イメージに結合したいと考えています。

私の現在のアプローチは、最終的な画像のサイズで numpy 配列を作成し、そこにすべてのタイルを貼り付けることです (これには数秒しかかかりません)。節約のために、私は複数のアプローチを調べました。

1) Tifffileimsave 、非常に遅いことが判明した関数を使用して、少なくとも約 700MB になるファイルの場合、少なくとも 10 分以上かかると見積もっています。

2) pyvips、 を使用して大量の numpy イメージを pyvips イメージに変換し、pyvips.Image.new_from_memoryこれを使用して保存します。

vips_img の作成には約 42 秒かかり、ディスクへの保存にはさらに約 30 秒かかりますが、これはすべて単一のスレッドを使用して行われます。別の方法を使用するか、マルチスレッドを活用して、これをより効率的に行う方法があるかどうか疑問に思っています。高速ストレージが利用可能であるため、最初に別の形式で保存するか、必要に応じて別のプログラミング言語に転送することができます。

ブレーンストーミング: すべてのタイルは既存の BigTiff 画像から取得され、前処理パイプラインを通過したため、再度保存する必要があります。元のファイルをコピーして、そこにあるデータを効率的に置き換える方法があるかどうか疑問に思っています。

詳細を編集してください:

画像のサイズはおおよそ 55k x 45k ですが、たとえば 150k x 150k までの大きな画像にもこのコードを使用したいと思います。

55k x 45k の画像と 256 x 256 のタイルの場合、約 53k タイルについて話しています。これらのタイルには、関心のある情報がすべて含まれているわけではないため、最終的にはタイルの 50% を再度保存することになり、残りの画像は黒くなる可能性があります。処理されたものを同じ形式で保存することは、オーバーレイとして表示したいので、私にとって最も便利なアプローチのようです

中間ソリューションで編集

前に、numpy 配列から pyvips イメージを作成するのに 40 秒かかったと述べました。これの原因は、入力が転置された numpy 配列であったことです。転置操作自体は非常に高速ですが、以前と同じようにメモリに残っていたため、転置された形式で読み取るときに多くのキャッシュ ミスが発生したと思われます。

したがって、現在、次の行には 30 秒かかります (200MB のファイルを書き込むため)。

これがより速くできればいいのですが、妥当なようです。

コード例

私の場合、タイルの約 15% のみが対象であり、前処理されます。ただし、これらは画像全体にあります。これをギガピクセル形式で保存したいと思います。これにより、openslide を使用して、便利なライブラリを使用して画像の一部を取得できるようになります。この例では、黒/情報の割合をシミュレートするために ~15% のランダム データを生成しました。この例のパフォーマンスは、データが画像全体に分散している実際の実装と似ています。

出力

数分以上かかっていたので、dzsave が完了するのを待ちませんでした。