Каков наиболее простой подход к реализации фильтра сжижения, подобного тому, который есть у фотошопа в Java? - PullRequest
4 голосов
/ 17 октября 2010

Какой самый базовый подход для реализации жидкостного фильтра, как у фотошопа, в java?

Ответы [ 2 ]

6 голосов
/ 17 октября 2010

По сути, у вас есть исходное изображение и сетка.Сетка начинается как сетка с идеальными квадратами, но деформируется.Алгоритм:

  For Each section of the mesh
     For Each pixel of the section
         (x, y) = Location in original photo for this pixel // (floating point)
         color = ColorFromOriginal(x, y) // this needs to blend neighboring pixels if fractional
         setColor(color)

. Выяснить (x, y) - простая геометрия - сопоставить центр деформированного квадрата с центром оригинала, а затем выяснить, в каком треугольнике вы находитесь (N,S, E, W) и сопоставьте деформированный треугольник с оригиналом.

  +---------+
  |\       /|
  | \  N  / |
  |  \   /  |
  |   \ /   |
  | W  X  E |
  |   / \   |
  |  /   \  |
  | /  S  \ |
  |/       \|
  +---------+

Когда у вас есть (x, y) в плавающей точке, рассчитайте его цвет, смешав четыре пикселя, которые перекрывают этот плавающий pt,координата в соотношении перекрытия.

Целочисленные пиксели

   +----+----+----+
   |    |    |    |
   |    |    |    |
   +----+----+----+
   |    |    |    |
   |    |    |    |
   +----+----+----+
   |    |    |    |
   |    |    |    |
   +----+----+----+

Плавающая точка.наложенный на него пиксель

   +----+----+----+
   |    |    |    |
   |   x|xx  |    |
   +----+----+----+
   |   x|xx  |    |
   |    |    |    |
   +----+----+----+
   |    |    |    |
   |    |    |    |
   +----+----+----+

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

Это в точности алгоритм изменения размера (повторной выборки) - сетка не деформируется, а просто увеличивается, поэтому шаг треугольника не нужен, но это та же идея.

5 голосов
/ 24 октября 2010

То, что вы ищете, это в основном фильтр деформации, вы можете проверить: http://www.jhlabs.com/ip/filters/, и я думаю, что вы ищете, это http://www.jhlabs.com/ip/filters/WarpFilter.html

Надежда, которая помогает

...