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
Форумы портала PHP.SU :: Версия для печати :: Фильтр неравномерности яркости [4]
Форумы портала PHP.SU » » Графика в PHP » Фильтр неравномерности яркости

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

46. Алтенрион - 31 Декабря, 2012 - 15:12:47 - перейти к сообщению
Пункт 1 - Done Улыбка
47. Алтенрион - 31 Декабря, 2012 - 17:20:17 - перейти к сообщению
Работа идет на мой взгляд продуктивно, но ввиду отсутствия опыта разработки подобных проектов, приходится многое изучать и осваивать попутно.

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

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


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




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




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


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



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



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

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




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

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

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

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

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

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

Та же ситуация и со значениями пиков и провалов (не буду повторно отвечать в ту тему).
50. Алтенрион - 09 Января, 2013 - 00:19:34 - перейти к сообщению
Папка temp будет для всех сессий? Картинки будем помечать как временные и удалять при окончании сессии? Или она просто как отстойник для ненужного и будет в свободное время пустой?

А по поводу пиков и провалов вопрос вроде несколько другой был, там все числа массива необходимо просто вывести как массив на экран. Есть еще там пара вопросов. лучше не буду сливать вместе темы.
51. NoPaper - 09 Января, 2013 - 21:04:09 - перейти к сообщению
Алтенрион пишет:
Папка temp будет для всех сессий? Картинки будем помечать как временные и удалять при окончании сессии? Или она просто как отстойник для ненужного и будет в свободное время пустой?

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

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

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

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

Вопрос, как прицепить эти два кадра, что бы по отдельной команде можно было бы эту парочку кинуть в базу. В последствии требуется попарно отображать на соседней странице. Вроде как выгрузка из базы
53. Алтенрион - 02 Февраля, 2013 - 05:15:47 - перейти к сообщению
Я арендовал выделенный сервер, развернул там LAMP и запулил туда фильтр.

filter.altenrion.ru

Волнует работа коэффициента. Если коэффициент отвечает за удаление в значения яркости пикселя в + и в -, от высчитанного среднего значения, тогда его допустимый диапазон для каждого изображения будет разным, так как и среднее значение будет меняться. Иными словами в лучшем случае его значение будет равно 127,5 , а в худшем менее 30.
54. NoPaper - 02 Февраля, 2013 - 11:11:40 - перейти к сообщению
Может так будет лучше:
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));



Еще как вариант добавить второй ползунок, который будет отвечать за яркость (светлее/темнее)
(Добавление)
И еще, если картинка не загружена, текст перекрывает окно выбора файла, браузер опера
55. Алтенрион - 02 Февраля, 2013 - 18:09:37 - перейти к сообщению
Ну под оперу еще не оптимизировал, у меня ее на 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 раз одно и то же выдавал. С чем связано не пойму...


Осталось реализовать загрузку в бд, либо по кнопке сразу и исходный и итоговый пхать ( можно только их пути) , либо просто при загрузке на страницу грузим в бд один кадр, при обработке второй.
56. NoPaper - 02 Февраля, 2013 - 19:52:20 - перейти к сообщению
Тут алгоритм такой: cравнивается среднее значение со значением пикселя и, если их разница менее k, уравнивается.
Может нужен алгоритм другой

p.s. Я тоже сижу на убунту =)
57. Алтенрион - 03 Февраля, 2013 - 15:04:22 - перейти к сообщению
Пересмотрел мног графиков гистограмм яркости в сети и начал сомневатся в правильности своего понимания.

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

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

В случаях если К = 0, он попросту не будет учтен, либо создать отдельное условие если К=0, то просто везде сделать новую яркость = Δ.

 

Powered by ExBB FM 1.0 RC1