私はHamamatsu NanoZoomerスライドスキャナによって生成されたファイルから画像コンテンツを抽出しようとしています。 NDPIファイルは、修正されたTIFF構造を使用し、1つの大きなチャンクにイメージコンテンツをJPEG形式で格納します。 StripOffsetsとStripByteCountsを使って、JPEGファイルと思われるデータを抽出することができます。65500×65500ピクセル以上のJPEG画像を正しく開く/デコードするにはどうすればよいですか?
データストリームには、JPEGファイルのすべての正しい署名(FFD8、スキャン開始マーカ、FFD9、スキャン終了マーカなど)があります。これが65500 * 65500ピクセルよりも小さい画像の場合、データストリームをjpegファイルに保存すれば、ファイルを正常に開くことができます。
JFIFヘッダーでは、FFC0マーカーの後の3番目と4番目のバイトはイメージの高さを表します。その後の2バイトは画像の幅を表す。しかし、画像が65500×65500ピクセル(実際には122880×78848ピクセル)より大きい場合、画像の高さと画像の幅を表す4バイトはすべてゼロです。 this(255-263行)に続いて255,220,255,220に変更しました。 Windowsで右クリックしてjpeg情報をチェックして詳細を選択したとき、実際のピクセル解像度を表さないという事実にもかかわらず、Windows Photo Viewerは解像度を65500 * 65500と読みました。問題は、画像を開こうとしたときに間違った方法でデコードされていることです。
私の質問です:どのように正しくjpegファイルを開くことができますか?あるいは、どのようにしてそのようなイメージの内容全体を正しくメモリにデコードすることができますか?
私は今、MATLABを使ってファイル構造を理解しようとしています。最終的に私はPython + OpenCV(またはPython + Cython + libjpeg-turboを必要に応じて使用)を使用して、画像全体をメモリに読み込みます。任意のより多くの手がかりなし
私はテストする画像がないので、言うことは非常に難しいですが、大きな画像を扱っているなら、間違いなく 'vips 'の使用を検討してください。それは優秀です... http://stackoverflow.com/a/36377369/2836621 –
私はこれがlibjpegまたはlibjpeg-turbo問題であると信じています。 VIPSはどちらか一方を使用しています。 VIPSに切り替えるだけでは、この問題を回避することはできません。 – user3667217
独自のイメージングライブラリ(カスタムJPEGコーデックを含む)を作成しましたが、このイメージは自分のコードで開く可能性があります。極端なサイズは一気に開くことに問題があります。スケールされたコピー(1/8 x 1/8 = 14848/12800)を開くか、特定の長方形の切り抜きを開くことができます。完全な色の非圧縮画像は36GBのRAMが必要です。 – BitBank