Графические фильтры

Тема в разделе "WASM.DirectX", создана пользователем NaZGuL, 27 окт 2005.

  1. NaZGuL

    NaZGuL New Member

    Публикаций:
    0
    Регистрация:
    28 апр 2004
    Сообщения:
    41
    Адрес:
    Russia
    Народ помогите разобраться с реализацией графических фильтров(twirl,mapdist,etc ...)

    В Hugi все что было прочитал, но ничего не понял. SineDist удалось сделать, а вот уже дальше мозгов не хватает. Может кто хоть алгоритмом поделитсь?!

    PS: И вообще кроме статей из Hugi кто нибудь что видел путное?
     
  2. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    NaZGuL



    Ну ты бы чтоли формулы привел и указал бы что именно непонятно.
     
  3. Unknowed

    Unknowed New Member

    Публикаций:
    0
    Регистрация:
    10 окт 2005
    Сообщения:
    10
    Адрес:
    Ukraine
    А де ты вообще ету *** нашёл?

    Дай ссылку, тоже почитаю.
     
  4. NaZGuL

    NaZGuL New Member

    Публикаций:
    0
    Регистрация:
    28 апр 2004
    Сообщения:
    41
    Адрес:
    Russia
    _DEN_

    Там очень прикольно про Twirl написано - "Это сложно объяснить...:derisive:"

    Так что формул нет.
     
  5. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    NaZGuL



    Ты со школьной математикой дружишь?
     
  6. NaZGuL

    NaZGuL New Member

    Публикаций:
    0
    Регистрация:
    28 апр 2004
    Сообщения:
    41
    Адрес:
    Russia
    _DEN_

    А причем здесь школьная математика?!

    Насколько я помню в школе фильтр Twirl не проходят не по одному предмету...
     
  7. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    NaZGuL



    Да при том. При том что надо свою фантазию хоть немного применять. Что такое twirl? Это закрутка. На какой угол? На угол, зависящий от радиуса. Первое приближение:



    new_x = x * cos(a * r) + y * sin(a * r)

    new_y = y * cos(a * r) - x * sin(a * r)



    Пишешь, смотришь что получилось. Начинаешь дальше выдумывать. Как сгладить, какую фильтрацию применить, как там еще какие эффекты наложить.

    Надо же уметь применить то, чему в школе научился.
     
  8. NaZGuL

    NaZGuL New Member

    Публикаций:
    0
    Регистрация:
    28 апр 2004
    Сообщения:
    41
    Адрес:
    Russia
    _DEN_

    Огромное тебе спасибо, за толчок под зад в нужном направлении... Реализовал Twirl, дальше думаю RotoZOOM сделать, хотя чего там делать почти все есть :derisive:

    Насчет сглаживания, в хуге хорошо написано (как брать точку с дробным смещением). Осталось привести все более - менее в божеский вид и можно ... Так что прощаюсь, но не надолго.
     
  9. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    NaZGuL



    Ну мои поздравления ;) Желаю творческих успехов :)
     
  10. NaZGuL

    NaZGuL New Member

    Публикаций:
    0
    Регистрация:
    28 апр 2004
    Сообщения:
    41
    Адрес:
    Russia
    _DEN_

    .... Такая проблема, фильтрация которая была расмотрена в Hugi, почемуй-то не работает. Может чем поможешь!? Вот исходняк ....
    Код (Text):
    1.  
    2. void Twirl(byte *tex,int amount)
    3. {
    4.  byte *tmp = new byte[256*256*4];
    5.  int offset=0;
    6.  for(int i=0;i<256;i++)
    7.  for(int j=0;j<256;j++)
    8.  {
    9.   int x = i - 127;
    10.   int y = j - 127;
    11.   float rad = 1 - sqrt(x*x + y*y)/127;
    12.   float offx,offy;
    13.   offx = 127 + x*cos(MPI*rad*amount) - y*sin(MPI*rad*amount);
    14.   offy = 127 + x*sin(MPI*rad*amount) + y*cos(MPI*rad*amount);
    15.   byte dx = int (offx);
    16.   byte dy = int (offy);
    17.   byte dx1 = dx + 1;
    18.   byte dy1 = dy + 1;
    19.   float c1 = offx - int (offx);
    20.   float c2 = offy - int (offy);
    21.   float c3 = 1 - c1;
    22.   float c4 = 1 - c2;
    23.   int col;
    24.   for (int cc=0;cc<4;cc++)
    25.   {  col = int (c1*c2*tex[(dx *256+dy )*4+cc]+
    26.                 c1*c4*tex[(dx *256+dy1)*4+cc]+
    27.                 c3*c2*tex[(dx1*256+dy )*4+cc]+
    28.                 c3*c4*tex[(dx1*256+dy1)*4+cc]);
    29.      if (col>255) col=255;
    30.      if (col<0) col=0;
    31.      tmp[offset+cc] = byte (col);
    32.   }
    33.   offset+=4;
    34.  }
    35.  CopyMemory(tex,tmp,256*256*4);
    36.  delete tmp;
    37. }
    38.  


    Может я зря на Hugi гоню, может у меня руки кривые???
     
  11. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    NaZGuL



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



    for (int cc=0;cc<4;cc++) и далее.



    Покажи скрины, до фильтра и после.
     
  12. NaZGuL

    NaZGuL New Member

    Публикаций:
    0
    Регистрация:
    28 апр 2004
    Сообщения:
    41
    Адрес:
    Russia
    [​IMG]



    /forum/img/attach.gif] [url=http://www.wasm.ru/forum/files/_1481431887__plasma.JPG]_1481431887__plasma.JPG[/url]



    <img src="http://wasm.ru/forum/files/1218254125__plasma(twirl).JPG



    [​IMG] 1218254125__plasma(twirl).JPG
     
  13. NaZGuL

    NaZGuL New Member

    Публикаций:
    0
    Регистрация:
    28 апр 2004
    Сообщения:
    41
    Адрес:
    Russia
    Дальше я сделал Twirl на противоположный угол, вот что получилось...
     
  14. NaZGuL

    NaZGuL New Member

    Публикаций:
    0
    Регистрация:
    28 апр 2004
    Сообщения:
    41
    Адрес:
    Russia
  15. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    NaZGuL



    EDIT: Я трезвый :)



    Все нормально. Twirl туда-обратно и не должен давать изначальную картинку.
     
  16. NaZGuL

    NaZGuL New Member

    Публикаций:
    0
    Регистрация:
    28 апр 2004
    Сообщения:
    41
    Адрес:
    Russia
    _DEN_А как тебе билинейная фильтрация? При большом количестве повторений получается такая каша ... ,а в нормальных прогах почему-то получается серый цвет!?
     
  17. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    NaZGuL



    Не могу сказать - сейчас нет времени проверять... :dntknw: Сейчас ваще на wasm времени нет - сздади неожинанно подкралась сессия :dntknw:((
     
  18. tylerdurden

    tylerdurden New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    322
    Какая это каша ? Получается "цвет" "0" :)
     
  19. NaZGuL

    NaZGuL New Member

    Публикаций:
    0
    Регистрация:
    28 апр 2004
    Сообщения:
    41
    Адрес:
    Russia
    tylerdurden А ты проверял!? У меня цвет "0", ну никак не получется! Сам алгоритм хоть правельный? А то я уже сомневаться стал.
     
  20. tylerdurden

    tylerdurden New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    322
    так иначе и не может быть.

    матрица весовых коэффициентов такая:

    010

    111

    010

    для билинейной фильтрайии...