23

この独創的なアイデアに基づいて、あなたの多くはおそらく以前に見たことがあるでしょう:http: //rogeralsing.com/2008/12/07/genetic-programming-evolution-of-mona-lisa/

別のアプローチを試してみたかったのです。

ターゲット画像があります。一度に1つの三角形を追加できるとしましょう。画像の類似性(適応度関数)を最大化するいくつかの三角形(または同点の場合は三角形)が存在します。考えられるすべての形や色を総当たり攻撃できれば、それを見つけることができます。しかし、それは法外に高価です。すべての三角形の検索は10次元空間です:x1, y1, x2, y2, x3, y3, r, g, b, a

シミュレーテッドアニーリングを使用したところ、かなり良い結果が得られました。しかし、私はこれをさらに改善できるかどうか疑問に思っています。一つの考えは、実際にターゲット画像と現在の画像の画像の違いを分析し、新しい三角形を配置するのに適した場所である可能性のある「ホットスポット」を探すことでした。

画像の類似性を最大化する最適な三角形(または他の形状)を見つけるために、どのアルゴリズムを使用しますか?

粗い詳細と細かい詳細を異なる方法で処理するために、アルゴリズムを変更する必要がありますか?より細かい画像の詳細を調整し始めるのに十分な時間実行させていません。実行時間が長くなるほど、新しい形状を追加することに「恥ずかしがり屋」になるようです...低いアルファ値(非常に透明な形状)を使用します。

ターゲット画像と再現画像(28個の三角形):

代替テキスト 代替テキスト 代替テキスト

編集!私は新しい考えを持っていました。形状座標とアルファ値が指定されている場合、現在の画像とターゲット画像のピクセルを分析することにより、形状に最適なRGBカラーを計算できます。これにより、検索スペースから3次元が排除され、使用している色が常に最適であることがわかります。これを実装し、三角形の代わりに円を使用して別の実行を試みました。

300個の円と300個の三角形:

代替テキスト 代替テキスト

4

4 に答える 4

2

頂点の色(頂点ごとに異なるRGBA値を持つ)の実験を開始します。これにより、複雑さが少し増しますが、ターゲット画像にすばやく一致する能力が大幅に向上します(自然なグラデーションが含まれる傾向がある写真画像を想定)。

あなたの質問は、遺伝的アプローチから離れることを示唆しているようです(つまり、進化させるのではなく、フィットする適切な三角形を見つけようとします)。しかし、それは両方の方法で解釈される可能性があるので、私は遺伝的アプローチから答えます。

突然変異に焦点を合わせる方法は、画像上にグリッドを適用し、ターゲット画像内の対応するグリッド正方形の最も一致しないグリッド正方形を計算し、そのグリッド正方形と交差する三角形を決定してから、それらにフラグを立てることです。突然変異の可能性を高めるために。

また、(同時に)最適なグリッド正方形に対してより小さなグリッドベースのチェックを実行することにより、詳細を改善することもできます。

たとえば、画像上で8x8グリッドを使用している場合:

  • 64個のグリッドの正方形のうち、最も一致が悪いものを特定し、交差する(または近くの/周囲の)三角形にフラグを立てて、突然変異の可能性を高めます。
  • 64個のグリッド正方形のどれが最適であるかを判断し、その正方形内の別の小さい8x8グリッド(つまり、その最適なグリッド正方形内の8x8グリッド)で繰り返します。これらは、新しい三角形を追加する可能性のあるスポット、または単に詳細を微調整するためにフラグを立てることができます。
于 2010-10-03T01:36:41.303 に答える
2

複数の実行を使用するアイデア:

  • オリジナルのアルゴリズムを最初の実行として使用し、所定のステップ数の後に停止します。
    • 最初の実行結果を分析します。画像のほとんどの部分で結果が非常に良好であるが、画像の小さな部分でうまく機能していない場合は、この部分の強調を増やします。
  • 2 番目の実行を実行するときは、強調された部分からの誤差の寄与を 2 倍にします (注を参照)。これにより、2 回目の実行がその領域でより適切に一致するようになります。一方、最初の実行に比べて、画像の残りの部分では悪化します。
  • 多くの実行を繰り返し実行します。

最後に、遺伝的アルゴリズムを使用して結果をマージします。以前のすべての実行から生成された三角形から選択することはできますが、新しい三角形を生成することはできません。

注: 実際には、エラーの寄与をどれだけ増やすべきかを計算するためのアルゴリズムがいくつかありました。http://en.wikipedia.org/wiki/Boostingと呼ばれます。ただし、数学的に正確な方法を使用しなくても、このアイデアは機能すると思います。

于 2010-10-03T01:16:18.350 に答える
1

アルゴリズムは実はとてもシンプルだと思います。

P = 200 # size of population 
max_steps = 100

def iteration
  create P totally random triangles (random points and colors)
  select one triangle that has best fittness
  #fitness computing is described here: http://rogeralsing.com/2008/12/09/genetic-programming-mona-lisa-faq/
  put selected triangle on the picture (or add it to array of triangles to manipulate them in future)
end

for i in 1..max_steps {iteration}
于 2010-10-04T11:25:26.313 に答える
1

非常に興味深い問題です。そのような問題を分析する私の方法は、進化戦略最適化アルゴリズムを使用することでした。高速ではなく、三角形の数が少ない場合に適しています。元の画像の適切な近似値を達成できませんでした-しかし、それは元の画像が複雑すぎたことが一因です-そのため、EVOが生成できる他の次善の結果を確認するために多くのアルゴリズムの再起動を試みませんでした...ケース - これは抽象芸術の生成方法としては悪くありません :-)

于 2010-10-03T16:02:36.410 に答える