Как установить пороговое значение при преобразовании JPEG в неизмененное растровое изображение?

Я использую свою цифровую камеру в качестве быстрого и грязного сканера. Разрешение на самом деле составляет около 300 точек на дюйм, что вполне разумно. Но моя камера выдает цветное изображение, которое я хочу уменьшить до растрового изображения. Я не хочу сглаживать изображение; Я ищу то, что я получил бы, если бы я поместил документ через черно-белый сканер. Преобразование JPEG в изображение в оттенках серого легко и стандартно с помощью djpeg -grayscale, Сложная часть - решить, какие серые пиксели должны быть белыми, а какие черными.

Инструменты pbmplus предлагают

djpeg -grayscale -pnm img.jpg | pgmtopbm -threshold -value $v > img.pbm

Но убийца это ценность $v, Хорошие значения варьируются от 0,3 до 0,6, а повторные пробные и ручные ошибки убивают меня. (Для тех, кто более знаком с ImageMagick, $v под рукой значение -black-threshold параметр.)

Я полагаю, что мог бы создать графический интерфейс, который помог бы мне быстрее находить порог, но я действительно искал алгоритм для установки порога для преобразования изображения в градациях серого в чистое растровое изображение. В идеале это сработает, просто изучив структуру изображения в градациях серого!

2 ответа

Решение

Это не совсем то, на что я надеялся, но mkbitmap Программа из проекта Potrace отлично справляется с преобразованием фотографий в растровые изображения. На краях, как правило, есть несколько артефактов, но это намного лучше устраняет нерелевантный сигнал с низкой пространственной частотой, что невозможно при использовании простого порогового значения.

Преобразование цветового пространства обычно выполняется с использованием зависимых от устройства профилей.

Ваша камера создает изображение в соответствии со своим цветовым профилем и, если бы у вас был сканер, она производила бы изображение в соответствии со своим цветовым профилем.

При условии, что у вас есть профиль ICC или ICM для вашей камеры, а также профиль, близкий к выходу вашего гипотетического сканера, вы можете использовать ImageMagick или Little CMS для применения профилей к вашим данным.

Поскольку я сомневаюсь, что у вас есть профиль ICC или ICM для вашей камеры, вы можете просто выбрать один из многих бесплатных, доступных в Интернете. Подходящий профиль вывода градаций серого может быть немного сложнее найти.

Если вы не можете применить специфичные для устройства профили, вы можете обнаружить, что ImageMagick может делать то, что вам нужно, с помощью команды -colorspace.

В ICC (International Color Consortium) есть несколько программ и информации, которые могут оказаться полезными для вас.

алгоритм установки порога для преобразования серого изображения в чистое растровое изображение

Если ничего не помогает, вы можете получить значение из гистограммы изображения в градациях серого?

(Ваш пост немного сбивает с толку, когда вы заявляете, что ваша камера выводит цветное изображение, но вы хотите, чтобы это изображение выглядело так, как если бы оно было пропущено через черно-белый сканер. Затем вы заявите, что вам нужен алгоритм для преобразования изображения в градациях серого в "чистый" растр."Пожалуйста, уточните.)

Редактировать - если вы все еще ищете ответ, ImageMagick можно использовать для применения профиля ICC. Также эта страница информации о профиле сканера может помочь.

convert RGB.jpg -profile "Scanner.icc" BW.jpg
Другие вопросы по тегам