在java中实现lihopify过滤器的最基本方法是什么?

时间:2010-10-17 11:05:29

标签: java image-processing filter image-manipulation morphing

在java中实现lihopify过滤器的最基本方法是什么,如Photoshop中的那个?

2 个答案:

答案 0 :(得分:6)

基本上,你有一个源图像和一个网格。网格以具有完美正方形的网格开始,但变形。算法是

  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  |    |
   |    |    |    |
   +----+----+----+
   |    |    |    |
   |    |    |    |
   +----+----+----+

结果颜色是四个像素的重叠比例。

这正是调整大小(重新采样)的算法 - 网格没有变形,只是放大了,所以三角形步骤是不必要的,但它是相同的想法。

答案 1 :(得分:5)

您正在寻找的基本上是一个变形过滤器,您可以查看:http://www.jhlabs.com/ip/filters/我猜您要找的是http://www.jhlabs.com/ip/filters/WarpFilter.html

希望有所帮助