|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
25.03.2012, 11:46 | #1 |
Форумчанин
Регистрация: 18.10.2010
Сообщений: 419
|
алгоритм Desaturate (насыщеность)
как бы нам превратить цветную картинку в черно-белую?
ну ScanLine - это понятно... но вот что с ним делать? по какому алгоритму обрабатывать пиксели? я вот подумал и решил что это будет среднее арифметическое между тремя составляющими цвета одного пиксела... наваял такой вот код: Код:
непонятно другое: сравнил результат проги и результат фотошопа. они отличаются. хоть и совсем немного, но отличаются. у меня в проге картинка получается светлее, чем в фотошопе... предположил что это может быть связано с использованием Round, что он 5.5 округлит в 6, а в фотошопе округляется до меньшего, в результате значния цвета становятся меньше и картинка в целом темнее... попробовал использовать Trunc вместо Round, но результат тот же... я вот думаю что операция обесцвечивания картинки должна дать однозначный результат - черно-белую картинку, причем всегда одинаковую. а получается что разные программы дают разный результат. в чем дело? у меня алгоритм неправильный? |
25.03.2012, 12:06 | #2 |
Форумчанин
Регистрация: 03.02.2010
Сообщений: 178
|
g = 0.299R + 0.587G + 0.114B
|
25.03.2012, 12:24 | #3 |
Форумчанин
Регистрация: 18.10.2010
Сообщений: 419
|
что это???
т.е. я понял что это, но почему так сложно? я имею в виду не реализовать сложно, а сам алгоритм... откуда берется именно такое соотношение? |
25.03.2012, 13:15 | #4 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
потому что глаз по разному воспринимает разные цвета.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
25.03.2012, 13:21 | #5 |
Форумчанин
Регистрация: 03.02.2010
Сообщений: 178
|
Такое преобразование учитывает разную чувствительность глаза к красной, зеленой и синей составляющей и в результате яркость изображения воспринимается одинаково.
|
25.03.2012, 13:47 | #6 |
Форумчанин
Регистрация: 18.10.2010
Сообщений: 419
|
сделал g = 0.299R + 0.587G + 0.114B...
различий еще больше, чем с моим вариантом... ... ну ладно, с обесцвечиванием разобрались... а как увеличить насыщенность? если говорить простым языком, то насыщенность - это когда красный краснее, зеленый зеленее и т.д. но если просто увеличивать значение цветовых составляющих, то мы получим осветление картинки (она будет белеть), а не насыщеность Последний раз редактировалось xrob; 25.03.2012 в 15:49. |
25.03.2012, 15:48 | #7 |
Форумчанин
Регистрация: 18.10.2010
Сообщений: 419
|
перенес в предыдущий пост
|
08.04.2012, 09:56 | #9 | |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
Цитата:
Т.е. нужно "растаскивать" цвета не от 0, а в разные стороны от некоторого среднего. В качестве этого среднего должен быть серый цвет определенной интенсивности, в качестве которого можно попробовать разные варианты: - (127,127,127), - вместо "127" : 0.29R + 0.60G + 0.11B, - вместо "127" : (R + G + B)/3. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Разветвляющийся алгоритм,циклический алгоритм и Многомерные массивы (Pascal) | TrapperPTZ | Помощь студентам | 1 | 26.01.2012 08:58 |
Разработайте алгоритм методом пошаговой детализации и программу, реализующую этот алгоритм. | iamhated | Помощь студентам | 1 | 15.01.2012 16:24 |
Разработайте алгоритм методом пошаговой детализации и программу, реализующую этот алгоритм | iamhated | Помощь студентам | 1 | 14.01.2012 16:22 |
Алгоритм TMDS (Алгоритм передачи данных интерфейса DVI) | Pro4RE | Помощь студентам | 2 | 24.04.2011 21:55 |
Волновой алгоритм (алгоритм Ли) | MrRockchip | Общие вопросы C/C++ | 4 | 10.05.2010 13:26 |