Photoshop のような液化フィルタを Java で実装するための最も基本的なアプローチは何ですか?
2829 次
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 に答える