画像内のグラデーションで塗りつぶされたコーナーをブレンドするアルゴリズム
-
01-07-2019 - |
質問
画像の周りにアルファブレンドされたグラデーションの境界線を配置する必要があります。私の問題は、水平方向と垂直方向のグラデーションが交わる部分が滑らかになるように角をブレンドすることです。この問題を解決する標準アルゴリズムがあると思います。何年も前に学校でも遭遇したと思います。しかし、Web 検索を何度か行っても、その言及を見つけることができませんでした。
(隅に放射状の塗りつぶしパターンを実装しましたが、遷移はまだ十分に滑らかではありません。)
私の質問:
この問題に標準アルゴリズムがある場合、その名前は何ですか、さらに良いことに、どのように実装されていますか?
標準のアルゴリズムを差し引いて、コーナーで滑らかな勾配を生成するために望ましいピクセル値を決定する最良の方法は何ですか?(垂直勾配から水平勾配への滑らかな遷移を行います。)
編集:そこで、大きな画像の上に挿入する画像があると想像してください。大きい画像は黒一色で、小さい画像は白一色です。挿入する前に、小さい画像にアルファ値を設定してその周りに透明な「境界線」を作成し、大きい画像に「フェード」することで、小さい画像を大きい画像にブレンドしたいと考えています。正しく行うと、黒から白への滑らかなグラデーションが得られます。角と内側の端を除くすべての場所でこれを行います。
画像の中心近くのグラデーション境界の端では、値は 255 (不透明) になります。境界線が外側のエッジに近づくと、アルファ値は 0 に近づきます。画像の垂直方向と水平方向の境界線が交わる隅に、対角線に相当するものが表示されます。その境界線をなくして、スムーズに移行したいと考えています。
私が必要とするのは、画像の隅で水平エッジと垂直エッジが交わるときに重なる各ピクセルのアルファ値 (0 ~ 255) を決定するアルゴリズムです。
解決
おそらく 2 つのグラデーションが重なる部分で乗算しているのでしょう?
標準的なアルゴリズムについてはわかりません。ただし、線形の代わりにサイン型のグラデーションを使用すると、2 つのグラデーションが重なっている部分に表示されるエッジが削除されるはずです。
単純なシグモイド関数は、smoothstep(t) = t です。t(3 - 2*t) ここで、0 <= t <= 1
他のヒント
サイズを変更する必要がない場合は、単純なアルファ マップを使用することができます。
ただし、私はかつて、完全に不透明なピクセルの最後になるようにしたい位置の平均値を使用して、単純なガウス フェードを使用しました。それが理にかなっていれば。