4

Photoshop のような液化フィルタを Java で実装するための最も基本的なアプローチは何ですか?

4

2 に答える 2

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)を浮動小数点にしたら、その浮動小数点に重なる4つのピクセルをブレンドして色を計算します。オーバーラップの比率で調整します。

整数ピクセル

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

フローティングpt。ピクセルオーバーレイ

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

結果の色は、4 つのピクセルが重なり合う比率でブレンドされたものです。

これはまさにサイズ変更 (リサンプル) のアルゴリズムです。メッシュは変形されず、拡大されるだけなので、三角形のステップは不要ですが、考え方は同じです。

于 2010-10-17T15:21:57.840 に答える
5

あなたが探しているのは基本的にワープフィルターです、あなたはチェックアウトすることができます:http ://www.jhlabs.com/ip/filters/ そして私はあなたが探しているものはhttp://www.jhlabs.com/ipだと思います/filters/WarpFilter.html

お役に立てば幸い

于 2010-10-24T11:13:05.573 に答える