Instagramのようなフィルターのもっともらしい再構築

ユーザーがさまざまなカラーフィルターを写真に適用できるようにするソフトウェアがたくさんあります。 Instagramはこの問題の先駆者であり、時々、アプリケーションでユーザーに馴染みのあるフィルターを作成したいと考えています。 そして、半自動モードでアプリケーション内の他のアプリケーションのカラーフィルターを非常に正確に再現できるユーティリティのセットを紹介したいと思います。







https://github.com/homm/color-filters-reconstruction



Instagramフィルターが好きな人。 彼らは何度もそれらを再現しようとます。 そして 度も 。 そして 度も 。 これらの試みの問題は、元のフィルターが行うことと少なくとも多少似た色補正を手動で選択しようとすることです。 私にとっては、より信頼性の高い方法と数学に基づいてフィルターを再現しようとすることは非常に興味深いものでした。 そして、これがカラーフィルターを本当に正確に再現する唯一の試みのようです。







たとえば、Instagram自体の元の画像Clarendon



フィルターを使用して次の画像の1つが取得され、復元されたフィルターを適用して他の画像が取得されました。 どれが復元されるか推測してみてください。













比較のために、これは「Instagramのようなフィルター」の商用セットから同じフィルターを適用した結果であり、簡単にグーグルで検索できます。













ストレッチ付きのこのフィルターは、元のフィルターと同様に呼び出すことができます。







仕組み



この方法は、 3次元カラー検索テーブル (3DカラーLUT)とその2次元表現-Haldイメージに基づいています 。 基本的な考え方は非常に単純です-均一な色分布を持つHaldaイメージのサンプルは、元のフィルターを使用して処理され、その色変換が再現されます。 この方法で処理されたチャルドの画像は、元のフィルターの色変換を非常に正確に近似するために使用できます。







結果のHaldイメージは、GraphicsMagickやPhotoshopなどの多くのプログラムやライブラリで使用できます。 CocoaLUTライブラリを使用するmacOSおよびiOSアプリケーションでも使用できます。 さらに、Hald画像は3D LUTキューブ形式に変換できます。これは、ビデオ処理アプリケーションで非常に一般的です。 そして少しネタバレ:3DカラーLUTのサポートは、 Pillow 5.2 for Pythonの次のバージョンで登場します。







制限事項



この方法では、均一な色変換のみをキャプチャできます。 画像に適用されたスクラッチ、グラデーション、ケラレ、およびその他のテクスチャは、再構成に入らず、正しい再構成を妨げることさえあります。 また、元のフィルタが画像の異なる領域で異なる動作をする場合、再構成はあまり妥当ではありません。







それにもかかわらず、私の意見では、この方法は40のInstagramフィルターのうち32個をもっともらしい形で復元し(処理後に簡単に適用できるケラレを除く)、さまざまな成功を収めて、残りの8つについて同様のことを達成できます。







必要条件



Haldイメージを生成および変換するには、pipを備えたPythonインタープリターが必要です。







 $ git clone https://github.com/homm/color-filters-reconstruction.git $ cd color-filters-reconstruction $ pip install -r requirements.txt
      
      





Haldイメージを受け取った後、このリポジトリからソフトウェアは必要なくなります。 ただし、それらの使用方法を知っている何らかの種類のライブラリが必要です。 それは、Python、Ruby、PHP、JavaScript™などのほとんどの一般的な言語のバインダーとコマンドラインインターフェイスを備えたGraphicsMagickです。







ガイド



  1. 最初に、単一のイメージを作成する必要があります。 ただやる:







     $ ./bin/generate.py
          
          





    hald.5.png



    というファイルが表示されhald.5.png



    。 ファイル名の数字は、ルックアップテーブルのサイズの平方根です。 つまり、5は、ファイルに25×25×25



    要素のサイズのテーブルが含まれていることを意味します。















    このファイルは、Haldの画像の通常のプレゼンテーションとは少し異なります。 テーブルを4回複製し、パディングを追加します。 さらに、表の各セルは1ピクセルではなく、8×8ピクセルの正方形を占有します。 これはすべて、元のフィルターとJPEG圧縮の両方のさまざまな歪みに耐えるために行われます。







  2. ソースフィルターを使用して単一の画像を処理します。 Instagramについて話している場合は、単一の画像をモバイルデバイスにダウンロードし、スーパーインポーズフィルターで公開する必要があります。 その後、処理された単一の画像が写真ストリームに表示されます。 また、デバイスから取り戻す必要があります。















    フィルターを使用した結果の画像の解像度が、元の単一画像の解像度と正確に同じであることが重要です。







  3. フィルターを使用して画像を実際のHald画像に変換します。







     $ ./bin/convert.py raw/1.Clarendon.jpg halds/
          
          





    ここで、 halds/



    はフィルターが取得するディレクトリです。













  4. あなたは素晴らしいです! 結果のフィルターは、他の画像にすぐに適用できます。







     $ gm convert sample.jpg -hald-clut halds/1.Clarendon.png out.jpeg
          
          













追加のヒント



ほとんどの場合、デフォルト設定では高品質のHuldフィルターを取得できますが、これでは不十分な場合があります。







ソースフィルターの画像の中央に強い局所的歪みまたは顕著な勾配がある場合、望ましくない効果が発生する可能性があります。 最も顕著な不快な効果は、モノクロストライプです。 ここで、たとえば、元の画像と、復元されたHudson



フィルターを処理した後に取得された画像。これらの問題が最も顕著になります。







 #        $ ./bin/convert.py raw/15.Hudson.jpg halds/ #       $ gm convert girl.jpg -hald-clut halds/15.Hudson.png girl.15.jpg
      
      











処理された画像では、オブジェクトは平らで低温殺菌されています。顔、髪、背景の椅子。 低温殺菌は画像処理でかなり一般的な効果ですが、元のHudson



フィルターの一部ではありませんでした。







ハドソンフィルターを適用した単一の画像をよく見ると、かなりノイズが多いことに気付くでしょう。 そして、それが問題の原因です。















幸いなことに、 convert.py



ユーティリティに、変換中に3次元ガウスぼかしをルックアップテーブルに適用するように依頼できます。これにより、ノイズが削減されます。 これを行うには、 SciPyパッケージ(デフォルトでmacOSに含まれています)をインストールする必要があります。







 #        $ pip install scipy $ ./bin/convert.py raw/15.Hudson.jpg halds/ --smooth 1.5 $ gm convert girl.jpg -hald-clut halds/15.Hudson.png girl.15.fixed.jpg
      
      











ご覧のとおり、不快な効果はすべてなくなりました。 ./bin/convert.py --help



実行すると、 convert.py



他のオプションを見つけることができます。







リバースエンジニアリングで頑張ってください!








All Articles