我正在尝试读取和平铺一个jp2图像文件。图像是RGB 98176 x 80656像素(它是医学图像数据)。
当尝试用glymur读取图像时,我得到以下错误:
glymur.lib.openjp2.OpenJPEGLibraryError: OpenJPEG library error: Prevent buffer overflow (x1: 80656, y1: 98176)
我明白图像太大了。我需要的是按瓦片读取图像数据,并将其保存在其他地方,以另一种格式保存。
Glymur允许我使用python读取头文件,例如,代码流是:
>>> print(codestream.segment[1])
SIZ marker segment @ (87, 47)
Profile: no profile
Reference Grid Height, Width: (98176 x 80656)
Vertical, Horizontal Reference Grid Offset: (0 x 0)
Reference Tile Height, Width: (832 x 1136)
Vertical, Horizontal Reference Tile Offset: (0 x 0)
Bitdepth: (8, 8, 8)
Signed: (False, False, False)
Vertical, Horizontal Subsampling: ((1, 1), (1, 1), (1, 1))
平铺不起作用,读取方法不起作用。
编辑:
我也尝试了Scipy,它能够读取标题,但同样的事情,出现的错误是:
>>> import scipy.misc
>>> image=scipy.misc.imread('Sl0.jp2')
/home/user/anaconda2/lib/python2.7/site-packages/PIL/Image.py:2274: DecompressionBombWarning: Image size (7717166080 pixels) exceeds limit of 89478485 pixels, could be decompression bomb DOS attack.
DecompressionBombWarning)
>>> scipy.misc.imwrite('/home/user/Documents/imageCfromjp2.tif',image)
/home/user/
AttributeError: 'module' object has no attribute 'imwrite'
>>> scipy.misc.imsave('/home/user/Documents/imageCfromjp2.tif',image)
/home/user/
File "/home/user/anaconda2/lib/python2.7/site-packages/scipy/misc/pilutil.py", line 195, in imsave
im = toimage(arr, channel_axis=2)
File "/home/user/anaconda2/lib/python2.7/site-packages/scipy/misc/pilutil.py", line 287, in toimage
raise ValueError("'arr' does not have a suitable array shape for "
ValueError: 'arr' does not have a suitable array shape for any mode.
>>> image2=image[0:500,0:500]
/home/user/
IndexError: too many indices for array
>>> image2=image[0:500]
/home/user/
ValueError: cannot slice a 0-d array
有没有什么方法可以将图像数据流传输到不同类型的容器中,这样索引的数量就不是问题,并且使我能够处理它?
4条答案
按热度按时间nmpmafwu1#
我在使用幻灯片扫描仪的文件时也遇到了同样的问题。我发现有用的是使用
vips
和openslide
平铺图像,并使用以下命令:这会将源图像的0级(全分辨率)拼贴输出到目标目录,拼贴大小为您选择的值,像素重叠为0。
5cnsuln72#
阅读大型医学图像的标准格式是openslide,我会先尝试一下,我不确定它是否能直接读取jp2,但假设这是来自幻灯片扫描仪,也许你可以保存为openslide支持的格式之一?
ImageMagick将通过OpenJPEG加载大的jp2图像的部分,虽然它不是特别快。例如,我这里有一个10k x 10k的jp2图像,如果我转换为JPG,我会看到:
如果我试着裁剪出一小块,它几乎没有任何更快的,这表明IM总是解码整个图像:
但如果我在装载过程中进行裁剪,速度会加快:
不是很好,但如果你有耐心的话可能会有用。
kd3sttzy3#
您是用openslide来尝试
aurhwmvo4#
您可以使用python中的glymur模块轻松访问全分辨率图像的每个图块。