处理大型TIFF图像C++/Magick/libtiff

Dealing with large TIFF images C++/Magick/libtiff

本文关键字:Magick libtiff C++ 图像 大型 TIFF 处理      更新时间:2023-10-16

我正在编写基于OpenCV的C++软件来分析大量的大TIFF图像-特征提取和表征。我目前的方法是尝试将每张图像分割成更小的裁剪部分,单独分析每张图像并合并结果。我正在尝试使用ImageMagick转换功能来进行裁剪,带有标志:

convert input.tif -crop 4000x4000 +repage -scene 0 "output%d.tif"

然而,这会运行数小时,利用100%的RAM和100%的IO吞吐量,而不会产生任何输出。

magick的识别输入.tif给出的图像细节为:

input.tif TIFF64 63488x49408 63488x49408+0+0 8-bit sRGB 9.4112GB 0.000u 0:00.031

在图像的较小(约20k乘20k)下采样版本上运行的相同指令在5秒内返回输出。

该计算机具有8GB RAM、windows 8 x64和2.00GHz CPU。

有人能建议我如何确定出了什么问题吗?否则,有人能给我一个解决这个问题的替代方法吗?

第1版:更多信息

 c:test>identify -list resource
Resource limits:
  Width: 214.7MP
  Height: 214.7MP
  Area: 14.888GP
  Memory: 6.9326GiB
  Map: 13.865GiB
  Disk: unlimited
  File: 1536
  Thread: 4
  Throttle: 0
  Time: unlimited

我认为我在这里的另一个答案应该对您有很大帮助,但您可以检查的另一件事是,您允许ImageMagick使用8GB的RAM。试试这个命令

identify -list resource
  Resource limits:
  Width: 214.7MP
  Height: 214.7MP
  Area: 4.295GP
  Memory: 2GiB        <---
  Map: 4GiB
  Disk: unlimited
  File: 192
  Thread: 1
  Throttle: 0
  Time: unlimited

并检查CCD_ 1选项。

如果它很低,你可以在命令行上用类似的东西来增加它

convert -limit memory 6GiB ...

或者使用这样的环境变量:

export MAGICK_MEMORY_LIMIT=8000000000
identify -list resource
Resource limits:
  Width: 214.7MP
  Height: 214.7MP
  Area: 4.295GP
  Memory: 7.4506GiB     <---
  Map: 4GiB
  Disk: unlimited
  File: 192
  Thread: 1
  Throttle: 0
  Time: unlimited