Обработка больших изображений с помощью ImageMagick convert - нужна большая пропускная способность - PullRequest
0 голосов
/ 26 июля 2011

Я конвертирую несколько больших изображений из мультиизображения (пирамидальной) TIF в формат PNG.Существенные части отчета из "identity-verbose" на самом большом изображении находятся здесь:

Image: 
  Format: TIFF (Tagged Image File Format)
  Class: DirectClass
  Geometry: 72224x64080+0+0
  Resolution: 72x72
  Print size: 1003.11x890
  Units: PixelsPerInch
  Type: TrueColor
  Base type: TrueColor
  Endianess: MSB
  Colorspace: RGB
  Depth: 8-bit
  Channel depth:
    red: 8-bit
    green: 8-bit
    blue: 8-bit
    ...
  Page geometry: 72224x64080+0+0
    ...
  Scene: 2 of 12
  Compression: JPEG
  Orientation: TopLeft
  Properties:
    ...
  Filesize: 1.389GBB
  Number pixels: 4.6281GB
  Pixels per second: 5.516MB
  User time: 218.277u
  Elapsed time: 13:60.020
  Version: ImageMagick 6.7.1-0 2011-07-06 Q16 http://www.imagemagick.org

Я собираюсь использовать Deepzoom Composer для создания входных данных для элемента управления мультис масштабирования Silverlight с этим изображением.Мой вопрос заключается в том, как поставить систему на колени при обработке этих изображений с помощью ImageMagick - их преобразование занимает слишком много времени.Я просмотрел несколько статей, но, похоже, нигде не могу найти.

Некоторая информация о системе и другая связанная с этим информация:

 OS: Windows 7 64 bit.
 CPU: Intel Core2 Duo E7300 @ 2.66, 2.67
 RAM: 4.0 GB
 PAGEFILE: 8-12GB on non-OS disk
 "MAGICK_TMPDIR": Yet another empty, non-os disk with 140GB available.

Вот результат "ресурса identifier -list"":

 File         Area       Memory          Map         Disk    Thread
 ------------------------------------------------------------------
 1536     4.1582GB    15.491GiB    30.981GiB    unlimited         2

Я выполняю эту команду для извлечения изображения, указанного выше:

convert "myFN.tif[2]" -limit file 8192GB -limit thread 32 "myFN%d.png"

Добавление двух предельных значений, похоже, не имеет значения.Когда я запускаю это, я использую в среднем около 10% загрузки ЦП и размер коммитов файла подкачки составляет 3 БГ.Я едва могу сказать, что он работает.

Q1) Что еще я могу сделать, чтобы ImageMagick использовал больше системных ресурсов?Большинство найденных мной ссылок на «большое изображение» задают противоположный вопрос.

Q2) Изменение значений «policy.xml» (например, файлов), расположенных здесь: C: \ Program Files \ ImageMagick-6.7.1-Q16 \ www \ source, похоже, ни на что не повлиял - изменения не обнаружились в следующем ресурсе «identifier-list».Есть ли уловка в этом?

Q3) Любые другие советы или идеи для этой задачи?

Спасибо, Дэвид

Ответы [ 3 ]

1 голос
/ 03 августа 2011

Для вашего (моего) изображения ограничивающим фактором является размер пиксельного кэша, который ограничен параметром " MAGICK_AREA_LIMIT ". Значение по умолчанию 4 ГБ недостаточно велико для 72224 x 64080 - для этого потребуется настройка не менее 4,4 ГБ - попробуйте «MAGICK_AREA_LIMIT = 8 ГБ».

Если вы хотите контролировать влияние, которое ImageMagick оказывает на системную память и системный файл страницы, вы можете ограничить это, используя « MAGICK_MEMORY_LIMIT ». По правде говоря, в этом нет особой необходимости использовать большое ограничение, поскольку резервным местоположением для кэша пикселей являются файлы сопоставленной памяти, которые имеют такой же порядок эффективности, что и файл системной страницы. Попробуйте "MAGICK_MEMORY_LIMIT = 2 ГБ", чтобы сохранить пиксельный кеш оттуда (не то, чтобы он туда попал, в любом случае - он больше, чем 12 ГБ.)

Вы хотите, чтобы пиксельный кэш перемещался в отображенную память, поэтому попробуйте " MAGICK_MAP_LIMIT = 100 ГБ", чтобы использовать в своих интересах это пространство, которое у вас есть. Файлы, отображенные в память, окажутся не в системном временном каталоге, а в каталоге, указанном в « MAGICK_TMPDIR ».

За дополнительную плату вы также можете поэкспериментировать с версией Q8, поскольку вам не нужны 16-битные цветные каналы. Вы можете ожидать примерно половину диска в этой версии.

Удачи! David

0 голосов
/ 07 февраля 2017

vips может преобразовывать пирамидальные тифы непосредственно в пирамиды с глубоким увеличением. Это бесплатно, очень быстро и не требует много памяти.

Например, я вижу:

$ vipsheader vips-pyr.tif 
vips-pyr.tif: 18008x22764 uchar, 3 bands, srgb, tiffload
$ time vips dzsave vips-pyr.tif x.zip$ time vips dzsave vips-pyr.tif x.zip
real    0m9.763s
user    0m19.700s
sys 0m4.644s
peak memory: 180mb

Это небольшой формат 20 000 x 20 000, преобразованный менее чем за 10 секунд на маленьком ноутбуке. Он пишет zip-файл, содержащий пирамиду, поэтому вы можете немедленно загрузить его на сервер. Память использует масштаб с шириной изображения, поэтому она будет делать очень большие изображения - я регулярно обрабатываю слайды размером 250 000 x 250 000 пикселей.

Здесь есть запись в блоге, представляющая dzsave:

http://libvips.blogspot.co.uk/2013/03/making-deepzoom-zoomify-and-google-maps.html

0 голосов
/ 04 августа 2011

Версия Q8 использует половину дискового пространства и времени для завершения преобразования по сравнению с версией Q16!Кроме того, если вы собираетесь разбить изображение на плитки, вы можете сделать это за один шаг с помощью команды, такой как:

convert.exe" "WRL_15_1A.tif[2]" -crop 14409x15396 +repage -scene 0 "temp\WRL_15_1A%d.tif"

  • «[2]» вызывает третье изображение (изображение с самым высоким разрешением.)
  • Параметры -crop равны 1/4 ширины и высоты соответственно, что дает нам 16 плиток.
  • + repage устанавливает все плитки в начало координат (0,0)
  • "% d" нумерует файлы, начиная с #, установленного "-scene".
...