
今回は、CMT: Camera Matching Transformについて説明します。これは、Bカメ以降のサブカメラの色や階調を、メインカメラのAカメに合わせるための変換のことです。イン前に作成しておけば、撮影現場、編集、VFX、グレーディングにて、カメラ間の差が最小化された状態で作業を行えるため、クリエイティブに集中できる、というメリットがあります。
カメラの差を除去するためには、ACESのIDT(Input Device Transform)が知られており、皆さんも日常的に使用していると思います。IDTを適用してACESに変換すれば、どんなカメラも色空間としては共通のものになります。しかし、残念ながら、IDTを適用してもカメラの差は残っています。
例を示します。各カメラについて、同じ条件、同じ位置でマクベスチャートを撮影し、IDTを含む、ACESの標準パイプラインでRec.709に変換しました。
Venice2をメインカメラとします。

このマクベスチャートの各色の中央部を四角に切り抜き、下記の画像を作成します。

この画像を他のカメラの画像の上に貼り付けて、違いを確認してみようと思います。いくつかのカメラを列挙します。
Alexa35をResolveで現像&IDT適用
まずはAlexa35です。カラーパイプラインは下記です。基本的には他のカメラも同じです。
Venice2の画像を重ねたAlexa35の画像は下記です。他のカメラも同様に作成しています。

各パッチの中央部に見える、正方形の内側がVenice2、外側がAlexa35のデータです。この画像でわかるように、グレーパッチも含め、すべての色で有意な差が観察されます。
DJI X9 CinemaDNGをResolveで現像&IDT適用

GoPro HERO12 GPLogにNetflix作成のCustom IDTを適用

iPhone15Pro AppleLogにResolveでIDT適用

いかがでしょうか。かなりの差に感じるのではないでしょうか。これらはすべて、メーカー、あるいはユーザーが作成したIDTを適用し、共通のACESの色空間を経由してRec.709に変換されています。これらの違いは、いろいろな要因がありますが、大きくは露出とホワイトバランスの差である、と考えられます。
露出とホワイトバランスを合わせる
次に、マクベスチャートの18%グレーを使って、露出およびホワイトバランスを完全に一致させてみます。具体的には、ACES AP0(リニアの色空間)上で、グレーを一致させる係数を求め、画像全体に適用する、という方法です。撮影時に絞りおよびホワイトバランスを調整するのと、ほぼ同じ結果となる方法です。
「Exp/WB」は上記方法でグレーを一致させたもの、「IDT only」は先のIDTのみ適用したものを表示します。比較してみてください。
Alexa35のグレー一致
まずはAlexa35から見てみましょう。カラーパイプラインは下記になります
Venice2の画像を重ねたAlexa35の画像は下記です。他のカメラも同様に作成しています。
右下から左へ三番目のグレーチャートが完全に一致するように、露出およびホワイトバランスを調整する変換を適用しました。グレースケールだけでなく、カラーチャートの差も、かなり小さくなっていることがわかります。このカメラの場合は、露出およびホワイトバランスの調整で、大部分の誤差は除去できることがわかります。しかしながらカラーチャートには若干の差異が確認できます。
DJI X9 CinemaDNGのグレー一致
GoPro HERO12 GPLogのグレー一致
iPhone15Pro AppleLogのグレー一致
いかがでしょうか。露出、ホワイトバランスを合わせただけで、かなりVenice2に近づいたことが確認できました。カメラによっては色の違いがまだ大きいものもありますが、少なくともグレースケールはかなり近い状態になっていることがわかります。
ここで行った、露出・ホワイトバランス調整変換は、メーカーの違い、レンズの違い、個体の違いを反映しており、これを適用するだけでも、カメラ間の違いをかなり低減できていることがわかります。
リニアマトリクスを加える
さらに残存する色の違いを低減するために、リニアマトリクス、という手法を追加してみます。ACESリニアの色空間で、メインカメラのVenice2の色になるべく近づけるために、RGB 3×3のマトリクス、というものを算出して適用します。カラーパイプラインは下記です。
「CMT(MTX)」はマトリクスを使用して誤差を最小化したもの、「Exp/WB」は露出・ホワイトバランスのみでグレーを一致させたもの、「IDT only」はIDTのみ適用したものです。比較してみてください。
Alexa35のCMTによる一致
DJI X9 CinemaDNGのCMTによる一致
GoPro HERO12 GPLogのCMTによる一致
iPhone15Pro AppleLogのCMTによる一致
いかがでしょうか。残存していた微妙な色の違いも、かなり削減されたのではないでしょうか。
もちろん、実際の撮影では、カメラの画角の違いや、タイミングの違いにより、さまざまなばらつきが乗ってきます。ですが、上記のようにカメラそのものの違いを除去しておくことで、後工程の作業のしやすさ、余計な調整の手間の削減につながってくると思います。
CMT作成ツールを試す
実際にCMTを作成するプロセスを体験していただくために、ツールを用意しました。メインカメラをAlexa35として、各種カメラのデータを用意しました。カメラで撮影したマクベスチャート素材があれば、それをアップロードして使用することもできます。
ページを開くと、手順を説明するダイアログが表示されます。基本的にはその指示にしたがっていけば、動的にCMTを作成し、適用するプロセスを体験できます。

露出や色温度をわざと動かす手段も用意しており、差が大きい場合のシミュレーションもできます。

作成したCMTを適用して、メインカメラとどの程度一致したか、グラフで確認できます。

CMTのオン・オフを切り替えて画像の違い、グラフの違いを確認できます。生成されたCMTはローカルにダウンロードすることもできます。

CMTはCLFという新しいタイプのLUTフォーマットで記載されています。原則、ACES AP0入出力が前提になっています。露出補正、ホワイトバランス補正、リニアマトリクス調整はそれぞれ別のブロックに記載されているので、編集して一部の補正のみ利用することもできます。
CAMERA MATCHING TRANSFORM · CLF
CMTを構成する3つの補正
<?xml version="1.0" encoding="UTF-8"?>
<ProcessList id="2aeb9b79-72f8-4e72-a070-c99d82526649" compCLFversion="3">
<Description>Source image: iPhone15ProBM AppleLogRec2020.dpx; IDT: AppleLog to AP0.clf; PixCal CMT mode=3 pureBlackCV=153.937444657</Description>
<InputDescriptor>ACES2065-1</InputDescriptor>
<OutputDescriptor>ACES2065-1</OutputDescriptor><Matrix id="030.Calculated LinearMTX to AP0" inBitDepth="32f" outBitDepth="32f">
<Array dim="3 3">
1.14911856164 -0.0527749477846 -0.104443380555
0.0302447391232 1.05919955118 -0.0912936221523
0.0589312427103 8.33630994501e-06 0.944403952714
</Array>
</Matrix><ASC_CDL id="050.matching exposure with MainCam" inBitDepth="32f" outBitDepth="32f" style="FwdNoClamp">
<SOPNode><Slope>2.53799189272 2.53799189272 2.53799189272</Slope><Offset>0 0 0</Offset><Power>1 1 1</Power></SOPNode>
<SatNode><Saturation>1</Saturation></SatNode>
</ASC_CDL><ASC_CDL id="060.matching white balance with MainCam" inBitDepth="32f" outBitDepth="32f" style="FwdNoClamp">
<SOPNode><Slope>1.02260577919 1 0.899897488624</Slope><Offset>0 0 0</Offset><Power>1 1 1</Power></SOPNode>
<SatNode><Saturation>1</Saturation></SatNode>
</ASC_CDL></ProcessList>CMTを本格的に導入したい方は是非ご相談ください。
