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

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

2 ответа

Решение

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

  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) в плавающей точке, рассчитайте его цвет, смешав четыре пикселя, которые перекрывают эту плавающую точку. координата в соотношении перекрытия.

Целые пиксели

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

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

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

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

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

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

надеюсь, это поможет

Другие вопросы по тегам