1

必要に応じて、画像を黒から赤、青、緑などに変更するように処理しています。SetPixelメソッドを使用して、画像の各ピクセルの色を黒から赤に変更します。

画像内の境界線と一部の曲線を除いて、ほとんど正常に機能します。黒い色で塗りつぶされた画像を丸で囲んだとしましょう。丸で囲んだ画像の色は変わりますが、ズームすると、境界線の周りに黒っぽい点が表示されますが、完全に赤い色に置き換えられていません。調べてみたところ、アンチエイリアシングと関係があることがわかりました。

同様の問題に直面したり、この問題を解決する方法について考え/提案がありますか?

あなたの助けにadvnaceで感謝します!

よろしく、タヌーシュ

4

1 に答える 1

2

アンチエイリアシングに関連している可能性があります。アンチエイリアシングの本質は、より多くのピクセルがエッジ (何かの境界) に近づくほど、より多くのピクセルの色が背景色とブレンドされることです (または、より「透明」であると言えます)。したがって、問題は、元の色を目的の色に置き換えるだけでなく、元の色から背景色にブレンドされたピクセルも置き換える必要があることです。これを達成するには、次のものが必要です。

1) ある種のエッジ検出アルゴリズムを実行します -必要に応じて、単純なものでも高度なものでもかまいません。

2) ピクセルがエッジの近くにあり、ピクセルがソース カラーの他のピクセルの近くにある場合、その不透明度 (1-透明度) 係数を計算します。

不透明度 = (pixel_color-background_color)/(source_color-background_color)

3) 現在のアンチエイリアス処理されたピクセルを置き換える必要がある色を計算します。

new_color = background_color * (1-不透明度) + opacity * target_color

そして、アンチエイリアス処理されたピクセルの代わりに、この new_color を配置します。

要約すると、アンチエイリアス処理されたピクセルを検出し、それらをアンチエイリアス処理されたピクセルのバージョンに置き換える必要があります。

アルゴリズムの最も難しい部分は、アンチエイリアス処理されたピクセルの検出です。これは、100% の確率ですべてのエッジ ピクセルを見つけたと確信できないためです。また、ピクセルがアンチエイリアス処理されているか、最初にそのような色で作成されたかどうかもわかりません)。このため、最終製品に色ノイズが発生する場合があります。しかし、いずれにせよ、ただ座って待つよりは良いはずです:)

幸運を

于 2010-08-28T22:16:04.787 に答える