ゴッホの「星空」のキャンバスをWolfram言語(Mathematica)で拡大する







Piotr Wendykierの「Inpaintingによるヴァンゴッホの星空の延長

翻訳はMathematicaドキュメントとしてダウンロードできます。このドキュメントには、記事で使用されているすべてのコードが含まれています(アーカイブ、約8 MB)。



コンピューターはゴッホのように描くことを学ぶことができますか? 間違いなくはい、ある程度まで! これを行うには、コピーアーティストのように、アルゴリズムは最初に何らかのオリジナルの作業を行う必要があり、次にそれ自体に基づいて何かを作成できるようになります。 彼はこれをどれだけうまく処理できますか? 自分で判断してください。



ExtendingVanGoghStarryNightInpainting_1.gif

ZEISS Photo Contestで2位



最近、ケンブリッジ大学の工学部は、「工学の技術:技術のフロンティアからの画像」というタイトルの毎年恒例の写真コンテストの受賞者を発表しました。 2位は、上記の画像に示されているヴァンゴッホの「星空の夜」の外挿について、機械学習の分野の大学院生であるヤリンガルに行きました。 Yarina Extrapolated Artの Webサイトで、これと同様の「強化された」コンピューターイメージを見ることができます。 これらの人工絵画の作成では、PatchMatchと呼ばれる外挿スケッチアルゴリズムが使用されました。この投稿では、 Wolfram言語Mathematica )を使用して同様の効果を作成する方法を説明します。



「デジタル修復」という用語は、SIGGRAPH 2000カンファレンスの記事「 画像修復」で初めて紹介されました。「スケッチ」の主な目的は、画像の損傷した領域を修復することです。 ただし、このアルゴリズムは、画像内の選択したオブジェクトを削除または移動するためにも広く使用されています。



Wolfram言語にはこのアルゴリズムを実装するInpaint関数があります。 「スケッチ」(レタッチ)する領域は、画像、一連のグラフィックプリミティブ(ベクターグラフィックス)、またはマトリックスの形式で指定できます。



[1]で:=



ExtendingVanGoghStarryNightInpainting_2.gif



アウト[1] =



ExtendingVanGoghStarryNightInpainting_3.gif



Inpaint関数は5つのアルゴリズムで動作し、 Methodオプションを使用して特定のアルゴリズムを指定できます。「Diffusion」、「TotalVariation」、「FastMarching」、「NavierStokes」、および「TextureSynthesis」(デフォルト)。 「TextureSynthesis」は、他のアルゴリズムとは異なり、各カラーチャネルで個別に動作せず、新しいピクセルカラー値を作成しません。 つまり、「スケッチ」に関与する各ピクセルは、マスク値がゼロの元のイメージの部分から取得されます(つまり、より簡単に言えば、マスクの黒いピクセルです)。 以下の例は、「TextureSynthesis」メソッドが画像から大きなオブジェクトを削除するのに最適であることを明確に示しています。



[2]で:=



ExtendingVanGoghStarryNightInpainting_4.gif



アウト[2] =



ExtendingVanGoghStarryNightInpainting_5.gif



「TextureSynthesis」メソッドは、論文「 Image Texture Tools 」(P。Harrison)に記載されているアルゴリズムに基づいています。 このアルゴリズムは、1981年に博士論文「 テクスチャ解析とテクスチャ合成の計算モデル 」(D. Garber)で提案された最良の近似法を改良したものです。 「TextureSynthesis」アルゴリズムのパラメーターは、「NeighborCount」(デフォルト、30)と「MaxSamples」(デフォルト、300)の2つのサブオプションを使用して設定できます。 最初のパラメーターは、テクスチャの比較に使用される近くのピクセル数を決定します。2番目のパラメーターは、最適なテクスチャを選択するための最大サンプルサイズを設定します。



ゴッホの絵画の外挿に戻りましょう。 まず、画像をインポートしてフレームを削除します。



[3]で:=



ExtendingVanGoghStarryNightInpainting_6.gif



アウト[4] =



ExtendingVanGoghStarryNightInpainting_7.gif



次に、白いフィールドを追加して画像フィールドを拡大し、「スケッチ」用のマスクを作成する必要があります。



[5]で:=



ExtendingVanGoghStarryNightInpainting_8.gif



アウト[8] =



ExtendingVanGoghStarryNightInpainting_9.gif



これで、「TextureSynthesis」メソッドを使用して画像を推定できます



[9]で:=



ExtendingVanGoghStarryNightInpainting_11.png



アウト[9] =



ExtendingVanGoghStarryNightInpainting_12.gif



そんなに悪くない。 「NeighborCount」および「MaxSamples」パラメーターの値を変更することにより、異なる結果を得ることができます。



[10]で:=



ExtendingVanGoghStarryNightInpainting_13.png



アウト[10] =



ExtendingVanGoghStarryNightInpainting_14.gif



他のパラメーター値や他の芸術作品を試すこともできます。 *



[11]で:=



ExtendingVanGoghStarryNightInpainting_15.gif



アウト[16] =



ExtendingVanGoghStarryNightInpainting_16.gif



この手法を使用すると、元の新年の贈り物を作成できると思います。 個人の写真や写真から本当に面白いものを作ることができます。 または、14歳の少女の絵に基づいて上記で行われたように、彼のの主題について即興を見せることで、子供を驚かせることができます。 それはすべてあなたの想像力次第です!



ロシア語でWolfram言語(Mathematica)を学習するためのリソース: http//habrahabr.ru/post/244451



All Articles