масштабировать и уменьшать цвета, чтобы уменьшить размер файла сканирования - PullRequest
5 голосов
/ 25 января 2012

Мне нужно уменьшить размер файла цветного сканирования.

До сих пор я думаю, что должны быть сделаны следующие шаги:

  • выборочное размытие (или подобное), чтобы уменьшитьшум
  • масштабируется до ~ 120dpi
  • уменьшает цвета

До сих пор мы использовали инструменты convert (imagemagick) и net-ppm.

Сканирования - это счета, а не фотографии.

Любые подсказки приветствуются.

Обновление

пример:

Bounty

Самый маленький и хорошо читаемый уменьшенный файл example.png с воспроизводимым решением получает награду.В решении необходимо использовать только программное обеспечение с открытым исходным кодом.

Формат файла не важен, если вы можете снова преобразовать его в PNG.Время обработки не имеет значения.Я могу оптимизировать позже.

Обновление

Я получил очень хорошие результаты для черно-белого вывода (спасибо).Было бы интересно уменьшить цвета примерно до 16 или 32 цветов.

Ответы [ 3 ]

4 голосов
/ 02 февраля 2012

Это довольно открытый вопрос, поскольку все еще существует возможность для гибкости между качеством изображения и размером изображения ... в конце концов, делая его черно-белым и сжимая его с помощью CCITT T.6 черно-белого (в стиле факса) Сжатие превзойдет большинство, если не все алгоритмы сжатия с поддержкой цветов.

Если вы хотите использовать черно-белое изображение (не в оттенках серого), сделайте это! Это делает документы очень маленькими.

В противном случае я рекомендую серию небольших преобразований изображений и деревьев адаптивного прогнозирования (см. здесь ). Пакет программного обеспечения APT является открытым или общедоступным, и его очень легко собрать и использовать. Его преимущества заключаются в том, что он хорошо работает с самыми разными типами изображений, особенно с текстом, и позволит вам лучше масштабировать размер изображения по сравнению с качеством изображения без потери читаемости. (Я обнаружил, что сжимаю цветную версию размера example_1000 до 48 КБ на пороге читабельности и 64 КБ с явными артефактами, но легко читаемыми.)

Я совместил APT с настройкой imagemagick:

convert example.png -resize 50% -selective-blur 0x4+10% -brightness-contrast -5x30 -resize 80% example.ppm
./capt example.ppm example.apt 20  # The 20 means quality in the range [0,100]

И для обратного процесса

./dapt example.apt out_example.ppm
convert out_example.ppm out_example.png

Чтобы объяснить настройки imagemagick:

  • -resize 50% Сделайте его вдвое меньше, чтобы ускорить обработку. Также скрывает некоторые артефакты печати и сканирования.
  • -selective-blur 0x4+10%: Повышение резкости на самом деле создает больше шума. Что вам действительно нужно, так это выборочное размытие (как в Photoshop), которое размывается, когда нет «края».
  • -brightness-contrast -5x30: Здесь мы немного увеличиваем контраст, чтобы обрезать плохую окраску, вызванную контуром страницы (что приводит к менее сжимаемым данным). Мы также немного темнеем, чтобы сделать черных чернее.
  • -resize 80% Наконец, мы изменили размер немного больше, чем ваш размер изображения example_1000. (Достаточно близко.) Это также уменьшает количество очевидных артефактов, так как они несколько скрыты, когда пиксели объединены вместе.

В этот момент у вас будет прекрасное изображение в этом примере - красивые, плавные цвета и четкий текст. Тогда мы сжимаем. Значение качества 20 - довольно низкое значение, оно выглядит не так элегантно, но документ очень разборчивый. Даже при значении качества 0 оно по-прежнему разборчиво.

Опять же, использование ADT не обязательно приведет к наилучшим результатам для этого изображения, но оно не превратится в совершенно неузнаваемый беспорядок на фотографическом контенте, таком как градиенты, так что вам нужно больше освещать типы или неожиданные типы документов.

Результаты: 88Кб 76kb 64kb 48kb

Обработанное изображение перед сжатием

4 голосов
/ 03 февраля 2012

Если вы действительно не заботитесь о количестве цветов, мы можем также перейти к черно-белому и использовать двухуровневый кодер. В итоге я использовал формат DJVU, потому что он хорошо сравнивается с JBIG2 и имеет кодировщики с открытым исходным кодом. В этом случае я использовал кодировщик didjvu, потому что он достиг лучших результатов. (В Ubuntu вы можете apt-get install didjvu, возможно, и в других дистрибутивах.)

Магия, с которой я столкнулся, выглядит следующим образом:

convert example.png -resize 50% -selective-blur 0x4+10% -normalize -brightness-contrast -20x100 -dither none -type bilevel example_djvu.pgm
didjvu encode -o example.djvu example_djvu.pgm --lossless

Обратите внимание, что на самом деле это превосходное размытие цвета до 0x2 + 10% при полном разрешении - это в конечном итоге сделает представление настолько же привлекательным, насколько можно себе представить, прежде чем оно будет преобразовано в двухуровневое изображение.

Декодирование работает следующим образом:

convert example.djvu out_example.png

Даже с большим разрешением (которое намного легче читать), размер составляет 24 КБ. Когда уменьшено до того же размера, это все еще 24 КБ! И, наконец, при уменьшении исходного изображения только на 75% и размытии 0x5 + 10% он весит 32 КБ.

Смотрите здесь для визуальных результатов: http://img29.imageshack.us/img29/687/exampledjvu.png

2 голосов
/ 25 января 2012

Если у вас уже есть правильные действия с утилитой Imagemagick "convert", то лучше сначала посмотреть библиотеки Imagemagick.

Быстрый просмотр моих списков пакетов Ubuntu показывает привязкидля Perl, Python, Ruby, C ++ и Java

...