首页 文章

从平铺的TIFF中提取切片并存储在numpy数组中

提问于
浏览
1

我的总体目标是从输入的mirax(.mrxs)幻灯片图像到JPEG输出文件裁剪多个区域 .

以下是其中一个图片的样子:

enter image description here

注意,较暗的灰色区域是图像的一部分,并且我最终希望以JPEG格式提取的区域是3个黑色方形区域 .

现在,针对具体情况:

我可以使用命令行上的vips将mirax图像中的颜色通道提取为3个单独的TIFF文件:

vips extract_band INPUT.mrxs OUTPUT.tiff[tile,compression=jpeg] C --n 1

其中 C 对应于通道号(0-2),每个输出文件的大小约为250 MB .

下一个工作是以某种方式识别并从图像中提取感兴趣的区域,所以我转向了几个python成像库,这是我遇到困难的地方 .

当我尝试使用OpenCV加载任何TIFF时:

i = cv2.imread('/home/user/input_img.tiff',cv2.IMREAD_ANYDEPTH)

我收到错误 error: (-211) The total matrix size does not fit to "size_t" type in function setSize

通过以下方式,我设法通过Pillow获得更多的牵引力:

from PIL import Image
tiff = Image.open('/home/user/input_img.tiff')
print len(tiff.tile)
print tiff.tile[0]
print tiff.info

哪个输出:

636633
('jpeg', (0, 0, 128, 128), 8, ('L', ''))
{'compression': 'jpeg', 'dpi': (25.4, 25.4)}

但是,除了加载图像之外,我似乎无法执行任何有用的操作;例如 tiff.tostring() 结果 MemoryError (我这样做是为了试图将PIL对象转换为numpy数组)我不确定这个操作是否有效,因为存在tile .

根据我的有限理解,这些TIFF以JPEG压缩格式将图像数据存储在“图块”中(其中上图包含636633) .

然而,我不清楚如何提取这些图块以用作常规JPEG图像,或者甚至我概述的上述过程中的步骤顺序是否是实现从中提取ROI的总体目标的潜在有用方式 . mirax图像 .

如果我在正确的轨道上,那么一些指导将会受到赞赏,或者,如果有另一种方法来实现我的目标使用vips / openslide没有python我会有兴趣听取想法 . 此外,有关如何处理或理解我所描述的TIFF文件的更多信息也会有所帮助 .

理想的情况包括:

1)vips / openslide中的某种自动裁剪功能,它可以从TIFF或原始mirax图像生成JPEG,沿着以下命令的行,但没有生成数万个图像:

vips dzsave CMU-1.mrxs[autocrop] pyramid

2)能够从TIFF中提取瓦片并将对应于图像区域的数据存储为numpy阵列,以便使用OpenCV或另一个方法检测3个ROI .

1 回答

  • 1

    我会使用the vips Python binding,它非常像PIL,但可以处理这些巨大的图像 . 尝试以下方法:

    from gi.repository import Vips
    
    slide = Vips.Image.new_from_file(sys.argv[1])
    tile = slide.extract_area(left, top, width, height)
    tile.write_to_file(sys.argv[2])
    

    您还可以在命令行中提取区域,当然:

    $ vips extract_area INPUT.mrxs OUTPUT.tiff left top width height
    

    虽然这会比Python中的循环慢一点 . 您可以使用 crop 作为 extract_area 的同义词 .

    openslide将大量元数据附加到描述各种子图像的布局和位置的图像上 . 尝试:

    $ vipsheader -a myslide.mrxs
    

    并查看输出 . 您可以从中计算子图像的位置 . 我也会在openslide邮件列表上询问,他们非常专业且非常有帮助 .

    还有一件事你可以尝试:获得低分辨率的概述,对其进行角点检测,然后从高分辨率图像中提取图块 . 要获得幻灯片的低分辨率版本,请尝试:

    $ vips copy myslide.mrxs[level=7] overview.tif
    

    等级7被下采样2 ** 7,因此128x .

相关问题