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 :: Фильтр неравномерности яркости [4]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (4): « 1 2 3 [4]   

> Описание: фильтр для выравнивания яркости изображения,
Алтенрион
Отправлено: 31 Декабря, 2012 - 15:12:47
Post Id



Частый гость


Покинул форум
Сообщений всего: 180
Дата рег-ции: Сент. 2012  
Откуда: Москва, Россия


Помог: 0 раз(а)




Пункт 1 - Done Улыбка
 
 Top
Алтенрион
Отправлено: 31 Декабря, 2012 - 17:20:17
Post Id



Частый гость


Покинул форум
Сообщений всего: 180
Дата рег-ции: Сент. 2012  
Откуда: Москва, Россия


Помог: 0 раз(а)




Работа идет на мой взгляд продуктивно, но ввиду отсутствия опыта разработки подобных проектов, приходится многое изучать и осваивать попутно.

Итак,
Пункт 1: Реализация загрузки изображения на сайт, отображение его на странице, и сохранение в файлах сайта.

Вставка в head:
Спойлер (Отобразить)


Вставка в тело страницы:
Спойлер (Отобразить)




Код обработчика php:
Спойлер (Отобразить)




По первому пункту вопрос: как можно реализовать из этого привязку загруженного изображения к php переменной? Иначе говоря, как ее можно по команде передать обработчику?


Пункт 2: Реализация ползунка, для выбора коэффициента. Передача значения ползунка php обработчику фильтра.
Спойлер (Отобразить)



Ползунок - Слайдер jQuery UI | Материалы сайта RUSELLER.COM . Слегка адаптировал под себя.



Я элементы загрузки и ползунок реализовал на отдельных страничках чтобы разобраться сначала с отдельными процессами. В процессе работы понял что нужно использовать сессии, так как при отправке загруженного изображения на обработку, первичный кадр будет пропадать, и ползунок передав значение php скрипту тоже будет сбрасываться на ноль.

Прошу помощи по поводу оптимизации этих двух процессов и применения в данном случае сессий . Сам в них только сейчас начал ковыряться вычитав об их применимости для решения моих задач.




Как должна выглядеть совместная работа этих пунктов проекта: на странице сайта нажимают кнопку выбора файла, выбирают картинку на компе, нажимают кнопку загрузки, она появляется на странице и в файлах сайта.
Затем с помощью ползунка выбирают коэфициент выравнивания и нажимают "обработать". По этой команде само изображение и коэффициент передается скрипту фильтра, разработанного ранее NoPaper'ом, который рядом с загруженным кадром выводит обработанный.

(Отредактировано автором: 31 Декабря, 2012 - 17:20:47)

 
 Top
Алтенрион
Отправлено: 08 Января, 2013 - 16:57:15
Post Id



Частый гость


Покинул форум
Сообщений всего: 180
Дата рег-ции: Сент. 2012  
Откуда: Москва, Россия


Помог: 0 раз(а)




Комплекс усреднения яркости изображения на базе интерфейса сайта реализован.

Ссылку напишу сюда когда протестирую полноценно и выложу на доступный хостинг, (если предложите хранилище которое знаете - буду рад).

Вопрос: как реализовать идентификацию пользователя, который вошел на сайт, и который занимается собственно обработкой яркости картинок на этом сайте.

Суть в чем: пользователь загружает картинку => обрабатывает => ему не понравилось => обрабатывает еще раз с другим коэффициентом => ему опять не понравилось => обрабатывает еще раз с другим коэффициентом => ему понравилось => но он хочет посмотреть варианты получившихся кадров и понравившиеся сохранить.

Таким образом, хочу в конкретной сессии конкретного пользователя эту информацию сохранять, а при ее окончании информацию не нужную удалять.

Как это реализовать? Какие варианты? Есть ли возможность хранить кадры в сессии или в базу все таки заливать?
 
 Top
NoPaper
Отправлено: 08 Января, 2013 - 20:21:31
Post Id



Посетитель


Покинул форум
Сообщений всего: 315
Дата рег-ции: Янв. 2012  
Откуда: Минск


Помог: 9 раз(а)




Хранить сами кадры в сессии не разумно, только если саму ссылку на изображение. Регистрация пользователей будет? Если нет, то обычных сессий будет достаточно.
Как вариант создать папку со временными картинками, назовем ее temp. При загрузке картинки, она будет сохраняться в ту папку с уникальным именем (будет генерироваться скриптом), в сессии будет переменная orig c ссылкой на изображение ($_SESSION['orig']='temp/123456789.png';). Если нужна оригинальная картинка - берем ее ссылку из сессии. При создании новой картинки создаем еще одну переменную, в которой будут храниться ссылки на новые изображения ($_SESSION['gen']=array('temp/23456789.png','temp/456789.png','temp/56789.png');)

Та же ситуация и со значениями пиков и провалов (не буду повторно отвечать в ту тему).
 
 Top
Алтенрион
Отправлено: 09 Января, 2013 - 00:19:34
Post Id



Частый гость


Покинул форум
Сообщений всего: 180
Дата рег-ции: Сент. 2012  
Откуда: Москва, Россия


Помог: 0 раз(а)




Папка temp будет для всех сессий? Картинки будем помечать как временные и удалять при окончании сессии? Или она просто как отстойник для ненужного и будет в свободное время пустой?

А по поводу пиков и провалов вопрос вроде несколько другой был, там все числа массива необходимо просто вывести как массив на экран. Есть еще там пара вопросов. лучше не буду сливать вместе темы.
 
 Top
NoPaper
Отправлено: 09 Января, 2013 - 21:04:09
Post Id



Посетитель


Покинул форум
Сообщений всего: 315
Дата рег-ции: Янв. 2012  
Откуда: Минск


Помог: 9 раз(а)




Алтенрион пишет:
Папка temp будет для всех сессий? Картинки будем помечать как временные и удалять при окончании сессии? Или она просто как отстойник для ненужного и будет в свободное время пустой?

Папка temp будет 'свалкой' временных картинок. И придется периодически ее чистить.
Можно, конечно, пописать эти действия в скрипт, но его придется периодически вызывать кроном, либо проверять эту папку при каждом вызове скрипта(нежелательно)
 
 Top
Алтенрион
Отправлено: 30 Января, 2013 - 01:57:14
Post Id



Частый гость


Покинул форум
Сообщений всего: 180
Дата рег-ции: Сент. 2012  
Откуда: Москва, Россия


Помог: 0 раз(а)




Чтот отвлекла меня обыденность от доработки данного детища. Ужас.

Вернувшись к работе уперся лбом в логику сохранения кадров.

Требуется сохранять исходный кадр и полученный в базу.
С сохранением как таковым проблем нет. Есть проблема с сохранением во первых синхронным, а во вторых по клику отдельной кнопки.

На данный момент кадр загружается на страницу=> попадает в отдельный обработчик=> показывается на странице=> после выбора коэффициента обрабатывается вторым обработчиком => показывается обработанный кадр, и исходный.

Вопрос, как прицепить эти два кадра, что бы по отдельной команде можно было бы эту парочку кинуть в базу. В последствии требуется попарно отображать на соседней странице. Вроде как выгрузка из базы
 
 Top
Алтенрион
Отправлено: 02 Февраля, 2013 - 05:15:47
Post Id



Частый гость


Покинул форум
Сообщений всего: 180
Дата рег-ции: Сент. 2012  
Откуда: Москва, Россия


Помог: 0 раз(а)




Я арендовал выделенный сервер, развернул там LAMP и запулил туда фильтр.

filter.altenrion.ru

Волнует работа коэффициента. Если коэффициент отвечает за удаление в значения яркости пикселя в + и в -, от высчитанного среднего значения, тогда его допустимый диапазон для каждого изображения будет разным, так как и среднее значение будет меняться. Иными словами в лучшем случае его значение будет равно 127,5 , а в худшем менее 30.
 
 Top
NoPaper
Отправлено: 02 Февраля, 2013 - 11:11:40
Post Id



Посетитель


Покинул форум
Сообщений всего: 315
Дата рег-ции: Янв. 2012  
Откуда: Минск


Помог: 9 раз(а)




Может так будет лучше:
PHP:
скопировать код в буфер обмена
  1. if(
  2. abs($pixels['red']-$red)>=$k ||
  3. abs($pixels['green']-$green)>=$k ||
  4. abs($pixels['blue']-$blue)>=$k
  5. ) imagesetpixel ($im, $x, $y,imagecolorallocate($im,
  6. ($pixels['red']+$red)/2,
  7. ($pixels['green']+$green)/2,
  8. ($pixels['blue']+$blue)/2));



Еще как вариант добавить второй ползунок, который будет отвечать за яркость (светлее/темнее)
(Добавление)
И еще, если картинка не загружена, текст перекрывает окно выбора файла, браузер опера
 
 Top
Алтенрион
Отправлено: 02 Февраля, 2013 - 18:09:37
Post Id



Частый гость


Покинул форум
Сообщений всего: 180
Дата рег-ции: Сент. 2012  
Откуда: Москва, Россия


Помог: 0 раз(а)




Ну под оперу еще не оптимизировал, у меня ее на ubuntu нету...

код щас добавлю проверю...

вставить вместо этого? :

Цитата:

//Второй цикл, определяцм цвет пиксела и наносим его на изображене
$k = $_SESSION['kof'];
for($y=0; $y<$height; $y++)
{
for($x=0; $x<$width; $x++)
{

$rgb = imagecolorat($im, $x, $y);

$pixels['red']=($rgb >> 16) & 0xFF;
$pixels['green']=($rgb >> 8) & 0xFF;
$pixels['blue']=($rgb & 0xFF);

if(
$pixels['red']-$red>$k ||
$pixels['green']-$green>$k ||
$pixels['blue']-$blue>$k
) imagesetpixel ($im, $x, $y, imagecolorallocate($im, ($pixels['red']+$red)/2,
($pixels['green']+$green)/2, ($pixels['blue']+$blue)/2));

}

}




(Добавление)
добавил abs, уш не знаю как подрихтовать его, что бы при одном значении ползунка хоть 5 - 7 раз одно и то же выдавал. С чем связано не пойму...


Осталось реализовать загрузку в бд, либо по кнопке сразу и исходный и итоговый пхать ( можно только их пути) , либо просто при загрузке на страницу грузим в бд один кадр, при обработке второй.

(Отредактировано автором: 02 Февраля, 2013 - 18:21:16)

 
 Top
NoPaper
Отправлено: 02 Февраля, 2013 - 19:52:20
Post Id



Посетитель


Покинул форум
Сообщений всего: 315
Дата рег-ции: Янв. 2012  
Откуда: Минск


Помог: 9 раз(а)




Тут алгоритм такой: cравнивается среднее значение со значением пикселя и, если их разница менее k, уравнивается.
Может нужен алгоритм другой

p.s. Я тоже сижу на убунту =)
 
 Top
Алтенрион
Отправлено: 03 Февраля, 2013 - 15:04:22
Post Id



Частый гость


Покинул форум
Сообщений всего: 180
Дата рег-ции: Сент. 2012  
Откуда: Москва, Россия


Помог: 0 раз(а)




Пересмотрел мног графиков гистограмм яркости в сети и начал сомневатся в правильности своего понимания.

У любого изображения можно вычислить яркость пикселя и построить гистограммку. Так вот на ней будут определенные пики, и впадины. это показывает, что яркость кадра неравномерна, с точки зрения цифр, но вполне может быть приемлимой или близка к идеальной с точки зрения человеческого глаза.

Так вот, по идее следует уравнивать яркость пикселей до среднего значения всего кадра, когда коэффициент равен нулю, а коэффициент (задаваемый ползунком) , в случае использования, уменьшает сглаживание. Иными словами , если K>0, то яркость новая = Δ яркости +- К, для тех пикселей где яркость выше среднего, новая яркость = Δ+К, для тех где яркость менее средней , нов ярк = Δ-К.

В случаях если К = 0, он попросту не будет учтен, либо создать отдельное условие если К=0, то просто везде сделать новую яркость = Δ.
 
 Top
Страниц (4): « 1 2 3 [4]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Графика в PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB