8

Photoshop にはクールなアーティスティック フィルターがたくさんあります。基礎となるアルゴリズムを理解したいと思っています。

特に興味深いアルゴリズムの 1 つはカットアウト フィルターです (上記のリンクの 2 番)。

これには、レベル数、エッジの単純さ、およびエッジの忠実度の 3 つの調整可能なパラメーターがあります。レベルの数は単純なポスタリゼーション アルゴリズムを駆動するように見えますが、他のスライダーが技術的に何をするかはわかりません。

彼らはボルノイ図や k-means 分割に関連する何かを行っていると思いますが、ウィキペディアをいじっても、特にフィルターのレンダリング速度を考えると、Photoshop が行っていることと明らかに一致するものは何も得られませんでした.

Photoshop フィルターの技術的な説明のソースはありますか? または、この特定のフィルターをどのように実装するかについて何か考えはありますか?

4

9 に答える 9

6

エッジ検出は通常、ソーベルまたはキャニー フィルターで行われ、エッジはチェーン コードで結合されます。詳細については、 OpenCVライブラリの
ようなものを見てください

于 2008-10-26T04:57:33.470 に答える
4

この投稿を見ましたか。ImageMagicを使用して同じ結果を得る方法が説明されており、IM はオープンソースです。

于 2009-03-03T23:09:53.087 に答える
3

ある種のセルシェーディングであるかどうかはわかりませんが、カーネルサイズが非常に大きいか、複数回適用されたメディアンフィルターのようにも見えます.

エッジの単純さ/忠実度は、現在のピクセルとの色の違いに基づいて、隣接するピクセル (またはカーネル内にあるピクセル) を考慮するかどうかを決定するのに役立つオプションです。

于 2008-11-26T19:05:07.323 に答える
3

非常に古い質問ですが、おそらく誰かが答えを探していて、これが役立つかもしれません。Opencv の findcontours および approxPolyDP 関数はこれを行うことができます。ただし、メインプロセスの前に画像を準備する必要があります。初め; k-means を使用して、最も使用されている N 色を見つけます。たとえば、8 つの色を見つけます。各色の輪郭を見つけてから、すべての色の輪郭面積を 1 つずつ計算します (N=8 層になります)。その後、事前に計算された色で最大の ContourArea から小さいものまで、色ごとに approxPolyDP の後に塗りつぶされた輪郭を描画します。私の別の提案は、contourArea の計算中に非常に小さな輪郭を削除することです。

Photoshop カットアウト エフェクト パラメータ; Number Of Levels=K-Means-最も使用されている N 色を見つけます。エッジの単純さ=ガウスぼかし、またはバイラテラルフィルターや平均シフトフィルターなどのエッジを保持するその他のノイズ除去フィルターがこのステップに役立つと思います。このステップは、K-Means の後、輪郭を見つける前に実行できます。Edge fidelity=openCV の approxPolyDP イプシロン パラメータ。

于 2020-08-29T13:45:44.820 に答える
0

探しているものとは正確には異なるかもしれませんが、フィルターの仕組みを知りたい場合は、GIMP のソース コードを確認してください。GIMP にあなたが言及したカットアウト フィルターに相当するものがあるかどうかはわかりませんが、この分野に本当に興味がある場合は一見の価値があります。

于 2008-10-26T02:56:17.863 に答える
0

レベルの数は、セル シェーディングが行われる方法に似ているように見えます。この場合、この部分を実装する方法は次のとおりです。この画像のヒストグラムを取得し、それを「レベル数」のセクション数に分割するだけです。各セクションの平均を計算します。ヒストグラムの各色は、元の色の代わりにその平均を使用します。

他の 2 つのパラメーターはもう少し考える必要がありますが、「エッジのシンプルさ」は、形状が構築されるセグメントの数を爆破するようです。むしろ、いくつかの粗い画像セグメンテーション アルゴリズムに適用される改良の数です。忠実度スライダーも同様のことをしているようです。それはおそらく、改良をいつ行うべきかについてのある種のしきい値を制御します。

これは役立つかもしれません

于 2008-10-28T02:28:07.093 に答える
0

それをいじくり回すと、次のことがわかりました。

  • それは決定論的です
  • 最終的な効果を得るために、ピクセルベースのポスタリゼーションは一切行いません
  • おそらく、ピクセルベースのエッジ検出は一切使用していません。エッジよりも領域で機能するようです。
  • 描画する閉じた多角形の形状を計算します (多角形のエッジの一部が画像のエッジと重なる場合があります)。
  • ポリゴンのエッジがわかっている場合、エッジで囲まれた各領域の色 (必ずしも 1 つのポリゴンに属しているとは限りません) は、領域がカバーする元の画像のピクセルの平均色で色付けされます。
  • ポリゴンのエッジはそれ自体と交差できます。 ハイエッジのシンプルさで特に目立ちます。
  • 「線の単純さ」が低下すると、ポリゴン エッジの数が増加しますが、ポリゴンの数も増加します。
  • エッジの忠実度はライン ポリゴンのエッジ数に影響しますが、ポリゴン数には影響しません
  • エッジの忠実度が高い (=3) と、単一のポリゴンに非常に長いエッジと非常に短いエッジが同時に存在し、忠実度が低い (=1) と、単一のポリゴンのすべてのエッジがほぼ同じ長さになります。
  • 高いエッジの単純さと低いエッジの忠実度は、正気を犠牲にしても、画像のエッジに固定されたポリゴンを好むようです。

全体として、曲線の代わりにポリゴンを使用する Adob​​e Illustrator のライブ トレース アルゴリズムの簡易版のように見えます。

... またはそうでないかもしれません。

于 2009-09-20T14:57:32.903 に答える
0

おそらく、しきい値処理、エッジ検出(ソーベル/キャニー/ロバーツなど)とポスタリゼーションだと思います。

于 2009-03-03T19:48:02.730 に答える
0

理論的にはそのフィルターに似たものを生成する簡単な解決策を得ました。Ismael Cが提案したものと何とか似ています。

Edge Simplicityは、ウィンドウ サイズを制御します。たぶん、ウィンドウに重みを付ける必要があります。

しかし、通常のウィンドウ フィルターで起こるのとは異なり、このフィルターは、このウィンドウからランダム ピクセルの固定サイズ部分のみを取得します。部分のサイズはFidelityパラメータで制御されます。

ピクセルの色をサンプルの中央値に設定します。

ポスタリゼーション アルゴリズムがある場合は、後で適用されます。

どうぞ!

実装したら結果報告お願いします。

PS。セグメンテーションがまったく使用されているとは思えません。

于 2009-03-03T19:31:33.847 に答える