iOS Примеры точек /баланса белого /настройки баланса белого

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

.

Я выполнил первые два шага, но третий шаг на самом деле не работает.

Сначала я подумал, что, согласно документации Apple, CIWhitePointAdjust должно быть именно тем, что нужно для достижения этой цели, но, хотя оно и меняет изображение, оно не делает то, что я хотел бы /ожидаю.

Тогда казалось, что CIColorMatrix должен быть чем-то, что могло бы помочь мне сместить цвета, но я был (и все еще остаюсь) в недоумении, что вводить в него с этими противными векторами. Я перепробовал почти все (одинаковые значения RGB для всех векторов, соответствующие значения (R для R и т. Д.) Для каждого вектора, 1 - соответствующее значение, 1 + соответствующее значение, 1 /соответствующее значение. Значения RGB и различные (1 - х , 1 + x, 1 /x).

Я также встречал CITemperaAndTint , что, согласно документации Apple, также должно помочь, но я еще не выяснил, как преобразовать RGB в температуру и оттенок. Я видел алгоритмы и формулы для преобразования из RGB в Temperatur, но ничего относительно оттенка. Я продолжу немного экспериментировать с этим.

Любая помощь очень ценится!

4 голоса | спросил juhan_h 10 PMpWed, 10 Apr 2013 16:15:31 +040015Wednesday 2013, 16:15:31

1 ответ


0

После долгих экспериментов и математики я наконец-то заставил свое приложение работать почти так, как я хочу.
Если кто-то еще столкнется с подобной проблемой, вот что я сделал.
В итоге я использовал фильтр CITemperaAndTint , предоставляющий цвет в Кельвинах, рассчитанный на основе значения RGB для выбранных пикселей и допустимого для пользователя значения оттенка.
Чтобы добраться до Кельвина I:
- сначала преобразовал RGB в XYZ с помощью источника света D65 (т.е. дневного света).
- затем конвертируется из XYZ в Yxy. Оба эти преобразования были сделаны с использованием алгоритмов, найденных на EasyRGB .
- Затем я вычислил Келвинс по Yxy, используя формулу Маккамри, которую я нашел в статье здесь

Эти шаги получили изображение в приблизительном поле, но не совсем там, поэтому я добавил UISlider для пользователя, чтобы указать значение оттенка от -100 до 100.

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

Я указал рассчитанную температуру и выбранный пользователем оттенок в виде inputNeutral векторных значений.
6500 (дневной свет D65) и 0 как inputTargetNeutral векторных значений для фильтра CITTemperaAndTint .

ответил juhan_h 12 PMpFri, 12 Apr 2013 17:11:40 +040011Friday 2013, 17:11:40

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132