我正在尝试从 Hamamatsu NanoZoomer 幻灯片扫描仪生成的文件中提取图像内容。NDPI 文件使用修改后的 TIFF 结构,并将图像内容以 JPEG 格式存储在一大块中。使用 StripOffsets 和 StripByteCounts,我能够提取应该是 JPEG 文件的数据。
数据流具有 JPEG 文件的所有正确签名,例如 FFD8(扫描开始标记)和 FFD9(扫描结束标记)。如果这是一个小于 65500*65500 像素的图像,那么如果我将数据流保存到 jpeg 文件中,我可以很好地打开文件。
在 JFIF 头中,FFC0 标记之后的第三个和第四个字节表示图像高度;之后的两个字节代表图像宽度。但是对于大于 65500*65500 像素(实际上是 122880*78848 像素)的图像,这四个字节据说代表图像高度和图像宽度都是零。在此之后(第 255-263 行),我将它们更改为255、220、255、220。当我通过在 Windows 中右键单击它并选择详细信息来检查 jpeg 信息时,我确实看到 Windows Photo Viewer 将分辨率读取为 65500*65500,尽管它们并不代表真正的像素分辨率。问题是,当我试图打开图像时,它显然是以错误的方式解码的。
所以我的问题是:如何正确打开这样的 jpeg 文件?或者说,我怎样才能正确地将这些图像内容的全部解码到内存中?
我现在正在尝试使用 MATLAB 了解文件结构。最终,我将使用 Python + OpenCV(或在必要时使用 Python + Cython + libjpeg-turbo)将整个图像读入内存。