libvips / pyvips 访问多通道 tiff (OME-Tiff) 的小部分
libvips / pyvips access small sections of a multi-channel tiff (OME-Tiff)
想知道是否有使用 pyvips / libvips 快速 return ome-tiff 文件给定通道的特定像素范围的方法。 crop
不允许频道规格。
我的 OME-Tiff 很大 (10 GB+),所以我不想将整个图像加载到内存中。
接受任何建议 and/or 其他工作流程。
pyvips 支持多页文档作为“toilet-roll”图像(抱歉)。您设置 n=-1
以加载所有页面,它们显示为非常高、很薄的图像,页面垂直堆叠。元数据项 page-height
给出每个 sheet.
的高度(以像素为单位)
此处的文档:
https://libvips.github.io/libvips/API/current/VipsForeignSave.html#vips-tiffload
例如:
$ vipsheader -a multi-channel-z-series.ome.tif
multi-channel-z-series.ome.tif: 439x167 char, 1 band, b-w, tiffload
width: 439
height: 167
bands: 1
format: char
coding: none
interpretation: b-w
xoffset: 0
yoffset: 0
xres: 0
yres: 0
filename: multi-channel-z-series.ome.tif
vips-loader: tiffload
n-pages: 15
image-description: <?xml version="1.0" encoding="UTF-8"?><!-- Warning: this comment is an OME-XML metadata block, which contains crucial dimensional parameters and other important metadata. Please edit cautiously (if at all), and back up the original data before doing so...
resolution-unit: cm
orientation: 1
您可以看到这是一个 15 页的 OME 图像。 pyvips 默认加载第 0 页,每页为 439 x 167 像素。您可以在 image-description
中获取 XML 以查看完整的 OME 频道元数据。
$ vipsheader -f image-description multi-channel-z-series.ome.tif
<?xml version="1.0" encoding="UTF-8"?>
<!--- ... etc.
在 Python 你可以做:
$ python3
Python 3.8.5 (default, Jul 28 2020, 12:59:40)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyvips
>>> x = pyvips.Image.new_from_file("multi-channel-z-series.ome.tif", n=-1)
>>> x.size
>>> x.width
439
>>> x.height
2505
>>> x.get("page-height")
167
>>> x.height / x.get("page-height")
15.0
因此您可以使用 crop
以显而易见的方式从通道中获取一个矩形。
您打算为 ML 训练生成补丁吗?如果是,对于小补丁,fetch
可能比 crop
快得多。 This issue 有示例代码和一些基准 --- 在那个例子中,crop
需要 41 秒来制作 12,000 个 32x32 补丁,但是 fetch
只需要 0.5 秒。
想知道是否有使用 pyvips / libvips 快速 return ome-tiff 文件给定通道的特定像素范围的方法。 crop
不允许频道规格。
我的 OME-Tiff 很大 (10 GB+),所以我不想将整个图像加载到内存中。
接受任何建议 and/or 其他工作流程。
pyvips 支持多页文档作为“toilet-roll”图像(抱歉)。您设置 n=-1
以加载所有页面,它们显示为非常高、很薄的图像,页面垂直堆叠。元数据项 page-height
给出每个 sheet.
此处的文档:
https://libvips.github.io/libvips/API/current/VipsForeignSave.html#vips-tiffload
例如:
$ vipsheader -a multi-channel-z-series.ome.tif
multi-channel-z-series.ome.tif: 439x167 char, 1 band, b-w, tiffload
width: 439
height: 167
bands: 1
format: char
coding: none
interpretation: b-w
xoffset: 0
yoffset: 0
xres: 0
yres: 0
filename: multi-channel-z-series.ome.tif
vips-loader: tiffload
n-pages: 15
image-description: <?xml version="1.0" encoding="UTF-8"?><!-- Warning: this comment is an OME-XML metadata block, which contains crucial dimensional parameters and other important metadata. Please edit cautiously (if at all), and back up the original data before doing so...
resolution-unit: cm
orientation: 1
您可以看到这是一个 15 页的 OME 图像。 pyvips 默认加载第 0 页,每页为 439 x 167 像素。您可以在 image-description
中获取 XML 以查看完整的 OME 频道元数据。
$ vipsheader -f image-description multi-channel-z-series.ome.tif
<?xml version="1.0" encoding="UTF-8"?>
<!--- ... etc.
在 Python 你可以做:
$ python3
Python 3.8.5 (default, Jul 28 2020, 12:59:40)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyvips
>>> x = pyvips.Image.new_from_file("multi-channel-z-series.ome.tif", n=-1)
>>> x.size
>>> x.width
439
>>> x.height
2505
>>> x.get("page-height")
167
>>> x.height / x.get("page-height")
15.0
因此您可以使用 crop
以显而易见的方式从通道中获取一个矩形。
您打算为 ML 训练生成补丁吗?如果是,对于小补丁,fetch
可能比 crop
快得多。 This issue 有示例代码和一些基准 --- 在那个例子中,crop
需要 41 秒来制作 12,000 个 32x32 补丁,但是 fetch
只需要 0.5 秒。