从C ++中的SVS格式文件中提取完整比例的图像

时间:2018-11-17 09:36:47

标签: image image-processing tiff libtiff

我正在尝试从C ++中的SVS文件中提取完整比例的图像。

我从the OpenSlide homepage看到了一个解释。 它说SVS格式是“单文件金字塔平铺的TIFF”。

因此,我尝试像提取TIFF图像一样提取整个比例的图像:我从SVS文件读取了所有IFD,但是没有273标记包含指向整个比例的图像的地址。

这就是为什么我现在有点困惑,SVS格式的文件中没有完整比例的图像?

我从SVS文件中找到了一个未定义的私有标签,编号为34675。该标签用于完整比例的图像吗? 还是有提取它的正确方法?

2 个答案:

答案 0 :(得分:1)

Aperio SVS是平铺格式。金字塔的所有级别均为平铺图像。基础层是第一个TIFF目录。 This page of the LibTiff documentation展示了如何读取平铺图像。

简而言之,您需要查找标签324(TIFFTAG_TILEOFFSETS)以及标签322和323(TIFFTAG_TILEWIDTHTIFFTAG_TILELENGTH)。我强烈建议您为此使用LibTiff,不要尝试自己动手制作。

SVS文件中的自定义标签包含元数据,包括以微米为单位的像素的物理尺寸(SVS不会设置分辨率TIFF标签)。

答案 1 :(得分:0)

您可以读出缩略图图像(这是整个比例图像的意思吗?)作为openlide关联图像。

例如,libvips具有由openslide作者编写的便捷的openslide绑定:

$ vipsheader -f slide-associated-images CMU-1.svs
label, macro, thumbnail

列出SVS文件中的图像。 macro是您默认获得的巨大金字塔,thumbnail是较小的概览,label是幻灯片标签的快照。

像这样获取缩略图:

$ vips copy CMU-1.svs[associated=thumbnail] x.jpg

以JPG图像形式阅读。

在C ++中,您可以编写:

VImage thumb = VImage::new_from_file("CMU-1.svs", 
    VImage::option()->set("associated", "thumbnail"));
thumb.write_to_file("x.jpg");