Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Фильтр неравномерности яркости [2]
Покинул форум
Сообщений всего: 180
Дата рег-ции: Сент. 2012 Откуда: Москва, Россия
Помог: 0 раз(а)
NoPaper пишет:
Тогда можно "поизвращаться"
Создать массив с данными о каждом пикселе ($arr[$x][$y]=array(red, green, blue))
найти среднее значение каждого цвета
все, что ярче - усреднить
Если работать именно с R G B, то мне кажется при усреднении будут меняться сами цвета, а не компонента отвечающая за яркость.
Иными словами просто усредняя полученный из пикселя цвет, мы модифицируем цвет. разве нет?
KingStar
Отправлено: 23 Декабря, 2012 - 13:27:03
Участник
Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011 Откуда: Беларусь
----- То что программа работает, не означает что она написана правильно!
Алтенрион
Отправлено: 23 Декабря, 2012 - 13:30:58
Частый гость
Покинул форум
Сообщений всего: 180
Дата рег-ции: Сент. 2012 Откуда: Москва, Россия
Помог: 0 раз(а)
KingStar пишет:
делаем Ps на php
Ну Ps конечно не получится, но фильтр как онлайн сервис замутить нужно. Если интересно, то совершенно не коммерческие цели.
DlTA
Отправлено: 23 Декабря, 2012 - 19:28:19
Постоянный участник
Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010
Помог: 53 раз(а)
Алтенрион пишет:
просто как с гистограммами работать в php я не в курсе
так же как и на всех остальных языках в мире,
объявляем массив целых положительных чисел длинной 256 элеметнов пробегаемся по каждому пикселю изображения получаем его яркость, обычно это значение в пределах 0-255
и соответствующую ячейку массива инкрементируем
в итоге мы получаем заполненный массив, что и есть гистограмма.
теперь нужно ее преобразовать, выкинуть те участки где есть "пустышки" (ячейки с нулевым количеством или очень маленькие значения) а то что останется растянуть так чтоб в итоге у нас получалась максимально заполненая кривая без пробелов, см. первый и второй рис.
ну а дальше делаем обратное преобразование изображение
пробегаемся по всем пикселям изображения, получаем его яркость, смотрим куда оно попадало раньше и куда должно попасть теперь и изменяем эту ярскость тоесть записываем иное значение(+ преобразуем обратно в RGB)
собсно и все.
как видите как таковой пыхи тут и нет, а точнее пофигу на чем делать
алгоритм и наглядные графики выложил, вам осталось найти формулы преобразования из RGB в LAB и обратно, а для всего остального осталось немного пораскинуть моцком. удачи.
Алтенрион
Отправлено: 23 Декабря, 2012 - 19:38:21
Частый гость
Покинул форум
Сообщений всего: 180
Дата рег-ции: Сент. 2012 Откуда: Москва, Россия
Помог: 0 раз(а)
В итоге работа переходит из разряда кода, в разряд поиска или разработки математического алгоритма фильтра... ух как меня это еще на с++ бесило... какж неохото тоже самое воротить на php...
DlTA
Отправлено: 23 Декабря, 2012 - 19:56:55
Постоянный участник
Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010
Помог: 53 раз(а)
Алтенрион пишет:
из разряда кода, в разряд поиска или разработки математического алгоритма
а что вы тогда делаете в программировании? (риторический вопрос)
Алтенрион
Отправлено: 23 Декабря, 2012 - 20:13:31
Частый гость
Покинул форум
Сообщений всего: 180
Дата рег-ции: Сент. 2012 Откуда: Москва, Россия
Помог: 0 раз(а)
Да не в этом суть, просто есть же библиотеки для работы с графикой, их нельзя применить в каком либо виде?
DlTA
Отправлено: 23 Декабря, 2012 - 20:29:46
Постоянный участник
Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010
нафига вам методы поиска границ и прочей лабуды?! это высший пилотаж, и явно не для тех кто не может закодить простые вещи.
NoPaper
Отправлено: 23 Декабря, 2012 - 21:52:42
Посетитель
Покинул форум
Сообщений всего: 315
Дата рег-ции: Янв. 2012 Откуда: Минск
Помог: 9 раз(а)
Алтенрион пишет:
Если работать именно с R G B, то мне кажется при усреднении будут меняться сами цвета, а не компонента отвечающая за яркость.
Иными словами просто усредняя полученный из пикселя цвет, мы модифицируем цвет. разве нет?
Погуглив, узнал, что яркость определяется так: I = 0.11R+0.59G+0.30B
Обратно получить значения rgb не получится.
Немного переделал скрипт, подсунул цветные картинки.
Вот картинки обработаны родной функцией imagefilter _https://docs.google.com/open?id=0BxG_9AZqsNLZWGdQLWotMzVQZzQ
А вот по моему алгоритму_https://docs.google.com/open?id=0BxG_9AZqsNLZT3hlQ1RGZVhmcHc
Результат разный
DlTA
Отправлено: 23 Декабря, 2012 - 21:59:07
Постоянный участник
Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010
Помог: 53 раз(а)
NoPaper пишет:
Обратно получить значения rgb не получится.
вы ж еще 2 компонены цвета потеряли.
NoPaper
Отправлено: 23 Декабря, 2012 - 22:09:21
Посетитель
Покинул форум
Сообщений всего: 315
Дата рег-ции: Янв. 2012 Откуда: Минск
Помог: 9 раз(а)
DlTA пишет:
NoPaper пишет:
Обратно получить значения rgb не получится.
вы ж еще 2 компонены цвета потеряли.
a и b ?
Алтенрион
Отправлено: 23 Декабря, 2012 - 22:30:57
Частый гость
Покинул форум
Сообщений всего: 180
Дата рег-ции: Сент. 2012 Откуда: Москва, Россия
Помог: 0 раз(а)
NoPaper пишет:
Немного переделал скрипт, подсунул цветные картинки.
Вот картинки обработаны родной функцией imagefilter _https://docs.google.com/open?id=0BxG_9AZqsNLZWGdQLWotMzVQZzQ
А вот по моему алгоритму_https://docs.google.com/open?id=0BxG_9AZqsNLZT3hlQ1RGZVhmcHc
Второй вариант на мой взгляд очень близок к правде. Как задается коэффициент?
NoPaper
Отправлено: 23 Декабря, 2012 - 22:53:10
Посетитель
Покинул форум
Сообщений всего: 315
Дата рег-ции: Янв. 2012 Откуда: Минск
Помог: 9 раз(а)
Сначала в цикле все пиксели переносятся в массив, там же рассчитывается среднее значение red, green и blue (тупо сложить все значение определенного цвета и поделить на кол-во пикселей).
Второй цикл сравнивает каждый пиксель со средним значением, и, если значения rgb сильно расходятся со средним, цвет пикселя делается менее ярким.
Вот картинки вместе со скриптом _https://docs.google.com/folder/d/0BxG_9AZqsNLZN2U0d05tQkFwUTA/edit
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.