2017-09-23 4 views
0

私はJavaScriptの3DカラーLUT(カラールックアップテーブル)を使っています.2つ以上の3D LUTを組み合わせて1つのファイルにエクスポートする方法があるのでしょうか。 私に説明させてください:javascriptで3D LUTを組み合わせる

私は.cube(3Dカラー検索ファイル)を取得します。私はそれを解析し、解析されたカラー値を配列に格納し、それを既存のイメージに適用します。その後、既存の(変更された)画像に新しい3D LUTを適用し、もう一度新しいLUTを適用します。だから、私は3つの異なる3D LUTが互いに当てはめられた元の画像を持っています。

ここで、すべての3D LUTを個別のファイルにエクスポートしてダウンロードできますが、それらを1つの.cubeファイルに結合する方法はわかりません。 異なるLUTを1つのファイルに「結合」するアルゴリズムが必要だと思いますか?

これはPhotoshopがそれをしない方法の例です:

LUT1:

0.024536 0.000183 0.000244 
0.049103 0.000336 0.000458 

LUT2:

0.041260 0.021149 0.009125 
0.067230 0.023804 0.009125 

と結びついLUT(結果):

0.035034 0.020660 0.009308 
0.054810 0.022766 0.009430 

ありがとうございます!

答えて

0

いくつかの調査の後、私は解決策を見つけました。 基本的に、最初のLUTの出力を2番目のLUTの入力にパイプする必要がありました。これには、プログラム内補間機能(3D LUTシェーダだけでなく)が必要です。その3次元LUTとパイプのすべてのポイントを介して各点のアイデンティティの色を選択したサイズ(何も変更せずにデフォルトのLUT) 2.反復の新しいアイデンティティのLUTを作成し 1:

プロセスは、このような何かを行きます最初のLUTのColorFromColor、次に2番目のLUTのColorFromColorを通過します。最終的な値を新しいLUTに格納します。結果が書き込まれるバッファ 画像 - - 画像データ形式 CLUTの画像を含むバッファー - 私たちのカラーLUTアウト :機能はいくつかの引数を受け付け

function mapColorsFast(out, image, clut, clutMix){ 
    let od = out.data, 
     id = image.data, 
     w = out.width, 
     h = out.height, 
     cd = clut.data, 
     cl = Math.floor(Math.pow(clut.width, 1/3)+0.001), 
     cs = cl*cl, 
     cs1 = cs-1; 

    var x0 = 1 - clutMix, x1 = clutMix; 
    for(var y = 0; y < h; y++) { 
     for(var x = 0; x < w; x++) { 
      let i = (y*w+x)*4, 
       r = id[i]/255*cs1, 
       g = id[i+1]/255*cs1, 
       b = id[i+2]/255*cs1, 
       a = id[i+3]/255, 
       ci = (dither(b)*cs*cs+dither(g)*cs+dither(r))*4; 

      od[i] = id[i]*x0 + x1*cd[ci]; 
      od[i+1] = id[i+1]*x0 + x1*cd[ci+1]; 
      od[i+2] = id[i+2]*x0 + x1*cd[ci+2]; 
      od[i+3] = a*255; 
     } 
    } 
} 

機能は次のようになります画像に適用する clutMix - 効果の強さに影響する(0-1)

この場合、同一性のLUTを作成して画像として保存し、それを画像の引数として関数に渡す必要がありました。新しいLUTをそれ。次に、結果を再び同じ関数にパイプし、新しいLUTをその関数に適用します。私たちは他のLUTとミックスしたいすべてのLUTについてこれを行います。

この機能はhttps://github.com/jwagner/analog-film-emulator/blob/master/src/image-processing.js - Javascript Film Emulationプロジェクトで見つかりました。

キャンバス2D画像処理で作業している場合は見つけるための興味深い材料の多くがあります、そして含ま実施例でもあります: https://29a.ch/film-emulator/ は、それが将来的に誰かを助けることを願っています!

関連する問題