如何正确打开/解码超过65500*65500像素的jpeg图像?

use*_*217 5 jpeg opencv image libjpeg libjpeg-turbo

我正在尝试从Hamamatsu NanoZoomer幻灯片扫描仪生成的文件中提取图像内容.NDPI文件使用修改后的TIFF结构,并将图像内容以JPEG格式存储在一个大块中.使用StripOffsets和StripByteCounts,我能够提取应该是JPEG文件的数据.

数据流具有JPEG文件的所有正确签名,例如FFD8,扫描标记的开始和FFD9,扫描结束标记.如果这是一个小于65500*65500像素的图像,那么如果我将数据流保存到jpeg文件中,我可以正常打开文件.

在JFIF标题中,FFC0标记后面的第三个和第四个字节表示图像高度; 之后的两个字节表示图像宽度.然而与大于65500个*65500像素(这实际上是122880*78848个像素),这四个字节,理应代表图像高度和图像宽度是全零的图像.我将其更改为255,220,255,220 ,然后(第255-263行).当我检查通过右键单击JPEG信息在Windows和选择的细节,我没有看到,Windows照片查看器读取分辨率为65500*65500,尽管他们并不代表真正的像素分辨率.问题是,当我试图打开图像时,它显然以错误的方式解码.

所以我的问题是:我怎样才能正确打开这样的jpeg文件?或者说,如何才能将整个此类图像内容正确解码到内存中?

我现在正在尝试使用MATLAB理解文件结构.最终我将使用Python + OpenCV(或必要时使用Python + Cython + libjpeg-turbo)将整个图像读入内存.

Par*_*dox 0

没有更多线索,只有一些评论:

  • 65500x65500 = 3GiO/通道(工作)
  • 122880*78848 = 9GiO/通道(目标)

这些已经是大量的连续内存;特别是在 Windows 上,它对此类应用程序有一些限制(请查看此以获取更多信息

首先,您能否提供有关您尝试打开此图像的计算机或软件的任何详细信息?(RAM 量、交换空间、分配给用户空间的最大内存等)

完全随机猜测,你尝试过 ImageJ 吗?

是否可以即时打开您想查看的区域(我不确定您是否想查看整个图片)?

为什么不使用多尺度图像表示?

编辑:我刚刚看到IN2P3有一些工具可以将您的文件格式转换为 TIFF 。这也让我想知道你是否真的隐藏了 JPEG 还是 TIFF。