Параметры фотошопа не хороши на графике
Я пытаюсь перевести настройки Photoshop для повышения резкости изображений в graphicsmagick. Поэтому я нашел эту полезную статью: https://redskiesatnight.com/2005/04/06/sharpening-using-image-magick/
Проблема в том, что если я использую для фотошопа эквивалентные значения, описанные в статье в graphicsmagick, изображения не будут такими четкими и четкими, как в фотошопе.
Например, я использую эти настройки в фотошопе: Сила: 500% Радиус: 2.0 Порог пикселей: 8
В статье параметры объясняются так:
Параметр радиуса
Параметр radius указывает (официальная документация)
"Радиус гауссова, в пикселях, не считая центральный пиксель"
Нечеткое маскирование, как и многие другие фильтры обработки изображений, является операцией ядра свертки. Фильтр обрабатывает изображение попиксельно. Для каждого пикселя он проверяет блок пикселей, окружающих его (ядро), и выполняет некоторые вычисления для них, чтобы отобразить значение выходного пикселя. Параметр radius определяет, какие пиксели, окружающие центральный пиксель, будут рассматриваться в ядре свертки: (представьте, что круг): чем больше радиус, тем больше пикселей необходимо обработать для каждого отдельного пикселя.
Радиус Image Magick похож на тот же параметр в Photoshop, GIMP и других графических редакторах. В практическом плане это влияет на размер "ореолов", созданных для увеличения контраста по краям изображения, увеличения остроты и, следовательно, видимой резкости.
Как вы знаете, какой большой радиус использовать? С одной стороны, это зависит от вашего целевого разрешения. Это также зависит от ваших личных предпочтений, а также от конкретных потребностей изображения под рукой. Что касается проблемы с разрешением, Руководство пользователя GIMP рекомендует установить радиус нерезкой маски следующим образом:
radius = (output ppi / 30) * 0.2 Which is very similar to another commonly found rule of thumb: radius = output ppi / 150 So for a monitor with 72 PPI resolution, you’d use a radius of approximately 0.5; if your targeting a printer
при 300 PPI вы бы использовали значение 2,0. Используйте их в качестве отправной точки; разные изображения имеют разные требования к резкости, и индивидуальные предпочтения также учитываются. [В сторону: в сети есть несколько публикаций (включая ссылки в этой статье), которые предполагают, что Image Magick принимает, но не учитывает дробные радиусы; то есть, если вы укажете радиус 0,5 или 1,2, он округляется, или по умолчанию целое число, или игнорируется, молниеносно и т. д. Это не так, по крайней мере, для версии 5.4.7, которой я являюсь. используя, как я пишу эту статью. Вы можете легко убедиться в этом, выполнив что-то вроде следующего:
$ convert -unsharp 1.2x1.2 + 5 + 0 test.tif testo1.tif $ convert -unsharp 1.4x1.4 + 5 + 0 test.tif testo2.tif $ композитный -составить разницу test01.tif testo2.tif diff.tif $ display diff.tif вы также можете загрузить их в GIMP или Photoshop в разные слои и изменить режим наложения на "Разница"; результирующее изображение не черное (вам может понадобиться присмотреться к разнице в радиусе 0,2). Нет, это ошибочное впечатление, вероятно, связано с тем, что существует связь между параметрами радиуса и сигмы, и если вы не укажете сигма должным образом по отношению к радиусу, радиус может действительно измениться или, по крайней мере, работать не так, как ожидалось, Читайте дальше, чтобы узнать больше.]
Обратите внимание, что радиус по умолчанию (если вы ничего не указали) равен 0, специальное значение, которое указывает алгоритму нерезкой маски "выбрать подходящее значение для радиуса"!.
Параметр сигма
Параметр sigma указывает (официальная документация)
"Стандартное отклонение по Гауссу, в пикселях"
Это наиболее запутанный параметр из четырех, возможно, потому что он "невидим" в других реализациях нерезкого маскирования и наиболее редко документируется. Лучшее объяснение, которое я нашел для этого, было от поиска Google, который раскопал заархивированную ветку списка рассылки, у которой был следующий фрагмент:
Сравнивая результаты
конвертировать -unsharp 1.2x1+4+0 тестовый тест1.2x1 + 4 + 0
а также
конвертировать -unsharp 30x1+4+0 test test30x1+4+0
не приводит к значительным различиям, но последний занимает ок. 50 раз дольше для завершения.
Это не удивительно. Радиус 30 включает порядка 61х61 входных пикселей в свертку каждого выходного пикселя. Радиус 1,2 включает 3х3 или 5х5 пикселей.
Пожалуйста, кто-нибудь может дать мне какие-нибудь подсказки, что означает "сигма"?
Он описывает относительный вес пикселей как функцию их расстояния от центра ядра свертки. Для маленькой сигмы внешние пиксели имеют небольшой вес. Еще одна важная подсказка - документация для опции -unsharp для преобразования (выделено мной):
Опция -unsharp повышает резкость изображения. Мы сворачиваем изображение с помощью гауссовского оператора заданного радиуса и стандартного отклонения (сигма). Для получения разумных результатов радиус должен быть больше сигмы. Используйте радиус 0, чтобы метод выбрал подходящий радиус.
Объединение двух подсказок дает некоторое хорошее представление: сигма - это параметр, который дает вам некоторый контроль над тем, как сила (заданная параметром количества) повышения резкости "градуируется" или уменьшается, когда вы излучаете от данного пикселя в центре матрица свертки до предела, определяемого радиусом. Мое тестирование подтверждает этот вывод, а именно, что большая сигма вызывает более выраженную резкость для данного радиуса. Вот почему постер в вопросе списка рассылки (выше) не видел существенной разницы в повышении резкости, даже если он использовал величину 400% (!!) и порог 0%; при сигме всего 1,0 сила фильтра падает слишком быстро, чтобы это можно было заметить, несмотря на большую разницу в радиусе между двумя вызовами. Вот почему на странице руководства написано: "для получения разумных результатов радиус должен быть больше сигмы"; если это не так, то параметр сигма не имеет постепенного эффекта, как задумано, для "смягчения" ореолов к их краям; вместо этого он просто применяет сумму равномерно к краю радиуса (что может быть тем, что вы хотите в некоторых обстоятельствах). Общее эмпирическое правило для выбора сигмы может быть:
если радиус< 1, то сигма = радиус, иначе сигма = sqrt (радиус). Сводка: сначала выберите свой радиус, затем выберите сигму, меньшую или равную этой. Экспериментирование даст лучшие результаты. Обратите внимание, что сигма по умолчанию (если вы ничего не указали) - 1.0. Это является основной причиной того, что большинство людей не видят такого большого эффекта с оператором нерезкой маски Image Magick, как с другими реализациями нерезкой маски, если они используют больший радиус: если вы не увеличите этот параметр, вы не получите полное преимущество большего радиуса!
[В сторону: вам может быть интересно, что произойдет, если сигма указана больше радиуса. Ответ, как говорится в документации, заключается в том, что результат может быть не "разумным". В моем тестировании обычный результат заключается в том, что повышение резкости распространяется на заданную величину до края указанного радиуса, а большие значения сигмы практически не дают никакого эффекта. В некоторых случаях (например, для радиуса< 0) указание большей сигмы увеличивает эффективный радиус (например, до 1); это может быть результатом "проверки работоспособности" параметров в коде. В любом случае имейте в виду, что алгоритм рассчитан на то, чтобы сигма была меньше или равна радиусу, и результаты могут быть неожиданными, если используется иначе.]
Параметр количества
Параметр количества указывает (официальная документация)
"Процент разницы между оригиналом и размытым изображением, которое добавляется обратно в оригинал"
Параметр количества можно рассматривать как "силу" повышения резкости: более высокие значения увеличивают контраст в ореолах больше, чем более низкие. Очень большие значения могут вызвать засветку ореолов или затенение теней на них. Если это произойдет, рассмотрите возможность использования меньшего количества с большим радиусом.
сумма должна быть указана в виде десятичного значения с указанием процента. Так, например, если в Photoshop вы будете использовать сумму 170 (170%), в Image Magick вы будете использовать 1,7.
Обратите внимание, что сумма по умолчанию (если вы ничего не указали) составляет 1,0 (т.е. 100%).
Пороговый параметр
Параметр порога указывает (официальная документация)
"Как часть MaxRGB, необходимо применить разницу"
Порог определяет минимальную разницу между центральным пикселем и окружающими пикселями в ядре свертки, необходимую для применения усиления локального контраста. Увеличение этого значения приводит к тому, что алгоритм становится менее чувствительным к различиям, которые могут определять ребра. Указание положительного порога часто используется, чтобы избежать резкости гладких областей, которые могут содержать шум (например, область голубого неба). Если у вас шумное изображение, настоятельно рекомендуется повысить порог или использовать вместо него какую-нибудь умную технику повышения резкости.
Пороговый параметр должен быть указан как десятичное значение, указывающее этот процент. Это отличается от GIMP или Photoshop, которые задают порог в фактических уровнях пикселей от 0 до максимума (для 8-битных изображений - 255).
Обратите внимание, что порог по умолчанию (если вы ничего не указали) составляет 0,05 (т. Е. 5%; это соответствует порогу 0,05 * 255 = 12-13 в Photoshop). В Photoshop используется пороговое значение по умолчанию, равное 0 (то есть без порога), а нечеткое маскирование применяется равномерно по всему изображению. Если это то, что вы хотите, вам нужно будет указать значение 0,0 для порога Image Magick. Это, несомненно, еще один источник путаницы в отношении алгоритма повышения резкости Image Magick.
Вот так я и сделал, чем подошел к этой команде:
gm convert file1.jpg -unsharp 2x1.41+5+0.03 file1_2x1.41+5+0.03.jpg
Но, как я уже сказал, изображения не становятся настолько резкими, как в фотошопе. Мы также экспериментировали со многими другими значениями, но без хороших изображений. Так можно ли сделать заточку фотошопа с помощью Graphicsmagick? Или это просто плохая библиотека? Основная проблема простого использования Photoshop для повышения резкости заключается в том, что мы хотим улучшить изображения на нашем сервере Linux, и Photoshop не очень хорошо работает на Linux.