У меня есть изображения sRGB с цветовыми оттенками. Чтобы удалить его вручную, я обычно использую Photoshop Level Adjustments. В Photoshop также есть инструменты для этого: Автоконтраст или, что еще лучше, Автотон, который также учитывает тени, средние тона и блики.
Если я удаляю приведение вручную, я настраиваю каждый из каналов RGB по отдельности, чтобы самые темные пиксели устанавливались как чисто черные, а самые светлые — как чисто белые, а затем перераспределялись все остальные значения (расширяя гистограмму). Это простой подход, но он показывает хорошие результаты для моих изображений.
В моем приложении node.js я использую sharp для обработки изображений, использующей libvips в качестве механизма обработки. Я пытался удалить приведение с помощью .normalize()
, но эта команда работает на всех каналах вместе, а не отдельно для каждого из каналов RGB. Так что это не работает для меня. Я тоже задавал этот вопрос на странице проекта Sharp. Я протестировал предложение от lovell, чтобы попробовать его с hist_local
, но результаты мне непригодны.
Теперь я хотел бы узнать, как это можно сделать с помощью родных libvips. Я играл с графическим интерфейсом nip2 и различными командами, но не мог понять, как этого можно достичь:
- Гистограмма > Выровнять гистограмму > Глобальный => Изображение выглядит слишком насыщенным
- Изображение> Уровни> Масштабировать до 0–255 => Не все каналы распространяются от 0 до 255 (я не совсем понимаю, что делает эта команда?)
Спасибо за каждую подсказку!
Дополнение Вот пример с картинками из фотошопа, чтобы показать, что я хочу.
Исходное изображение представляет собой изображение кадра с пленочного негатива. Изображение до обработки
Шаг 1 Инвертировать изображение Изображение после инверсии
Шаг 2 с использованием автоматического тона в Photoshop (работает так же, как в моем описании выше о ручном удалении цветового оттенка) Изображение после автоматического тона
Последняя картинка меня устраивает.