![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Вот тут есть алгоритм акварелизации
Могу ли я в PixelBender Toolkit в одном kernel это сделать или же нужно 2 kernel-а создавать и последовательно применять их к картинке ? Перефразирую вопрос: Я написал такой код, отталкиваясь от алгоритма по ссылке выше <languageVersion : 1.0;> kernel akvarel_Filter_1 < namespace : "akvarel_Filter"; vendor : "div0"; version : 1; description : "akvarel_Filter"; > { input image4 src; output pixel4 dst; void evaluatePixel() { dst = sampleLinear(src,outCoord()); float2 pos = outCoord(); pixel4 col = sampleLinear(src,float2(0.0,0.0)); float denominator = 9.0; float amount = 5.0; float del = 1.0/16.0; float2 singlePixel = pixelSize(src); col += sampleLinear(src, pos + float2(0.0,0.0)*4.0); // Center col += sampleLinear(src, pos + float2(-singlePixel.x,-singlePixel.y)*1.0); // UL col += sampleLinear(src, pos + float2(-singlePixel.x,0.0)*2.0); // L col += sampleLinear(src, pos + float2(-singlePixel.x,singlePixel.y)*1.0); // UD col += sampleLinear(src, pos + float2(0.0,-singlePixel.y)*2.0); // U col += sampleLinear(src, pos + float2(0.0,singlePixel.y)*2.0); // D col += sampleLinear(src, pos + float2(singlePixel.x,-singlePixel.y)*1.0); //UR col += sampleLinear(src, pos + float2(singlePixel.x,0.0)*2.0); // R col += sampleLinear(src, pos + float2(singlePixel.x,singlePixel.y)*1.0); // DR // ----------------------------------------------------------------------- //// col=col*del; // îäíà øåñòíàäöàòàÿ col +=sampleLinear(src, pos + float2(0.0,0.0))*(amount); // Center col += sampleLinear(src, pos + float2(-singlePixel.x,-singlePixel.y)*-amount/10.0); // UL col += sampleLinear(src, pos + float2(-singlePixel.x,0.0)*-amount/10.0); // L col += sampleLinear(src, pos + float2(-singlePixel.x,singlePixel.y)*-amount/10.0); // UD col += sampleLinear(src, pos + float2(0.0,-singlePixel.y)*-amount/10.0); // U col += sampleLinear(src, pos + float2(0.0,singlePixel.y)*-amount/10.0); // D col += sampleLinear(src, pos + float2(singlePixel.x,-singlePixel.y)*-amount/10.0); //UR col += sampleLinear(src, pos + float2(singlePixel.x,0.0)*-amount/10.0); // R col += sampleLinear(src, pos + float2(singlePixel.x,singlePixel.y)*-amount/10.0); // DR dst = col/denominator; } } Но что-то результат не очень похож на акварельный рисунок Правильно ли я объединил эти 2 преобразования в кернеле ? Последний раз редактировалось djyamato; 23.11.2010 в 05:02. |
|
|||||
|
Lorem ipsum
|
Проделав эти операции в фотошопе (Filter > Other > Custom), я сделал открытие: это нифига не акварельный фильтр =)
Поэтому у тебя, вероятнее всего, правильно реализован алгоритм, который заведомо не должен давать ожидаемого результата.
__________________
Поймай яблоко 2! |
|
|||||
|
для начала, упростите алгоритм
Flash Player всегда работает с объектом размером 1х1 пиксел. Функция pixelSize() всегда возвращает (1.0, 1.0), а pixelAspectRatio() всегда возвращает 1.0. так что переменая не нужна. Ноль умноженный на 4 )))) константа вычисляется для каждого пикселя? флоат умножается на 1.0 Касательно фильтра - да, два kernel понадобится, так как обработка идет в два прохода (сначала вся картинка сглаживается, потом увеличивается резкость перехода цветов. получаются цветовые границы четкие, как от кисти) Последний раз редактировалось TERRORist; 27.11.2010 в 03:33. |
|
|||||
|
спасибо, буду переделывать
|
![]() |
![]() |
Часовой пояс GMT +4, время: 23:16. |
|
|
« Предыдущая тема | Следующая тема » |
|
|