Hamamatsu NanoZoomer スライド スキャナで生成されたファイルから画像コンテンツを抽出しようとしています。NDPI ファイルは、変更された TIFF 構造を使用し、画像コンテンツを JPEG 形式の 1 つの大きなチャンクに格納します。StripOffsets と StripByteCounts を使用して、JPEG ファイルと思われるデータを抽出できました。
データ ストリームには、スキャン マーカーの開始である FFD8 やスキャン マーカーの終了である FFD9 など、JPEG ファイルの正しい署名がすべて含まれています。これが 65500*65500 ピクセルより小さい画像の場合、データ ストリームを jpeg ファイルに保存すれば、問題なくファイルを開くことができます。
JFIF ヘッダーでは、FFC0 マーカーの後の 3 番目と 4 番目のバイトは画像の高さを表します。その後の 2 バイトは画像の幅を表します。ただし、65500*65500 ピクセル (実際には 122880*78848 ピクセル) より大きいイメージの場合、イメージの高さとイメージの幅を表すと思われるこれらの 4 バイトはすべてゼロです。これに続いて、 255、220、255、220に変更しました (255 ~ 263 行目)。Windows で jpeg 情報を右クリックして詳細を選択すると、実際のピクセル解像度を表していないにもかかわらず、Windows フォト ビューアーが解像度を 65500*65500 として読み取ることがわかりました。問題は、画像を開こうとしたときに、明らかに間違った方法でデコードされていることです。
だから私の質問は次のとおりです。どうすればそのような jpeg ファイルを正しく開くことができますか? または、そのような画像コンテンツ全体をメモリに正しくデコードするにはどうすればよいでしょうか?
現在、MATLAB を使用してファイル構造を理解しようとしています。最終的には、Python + OpenCV (または必要に応じて Python + Cython + libjpeg-turbo を使用) を使用して、イメージ全体をメモリに読み込みます。