Main Content

measureColor

テスト チャートを使用した色再現の測定

説明

esfrChart オブジェクトまたは colorChecker オブジェクト

テスト チャートのカラー関心領域 (ROI) を自動的に検出する場合は、esfrChart オブジェクトまたは colorChecker オブジェクトを使用します。esfrChart オブジェクトは、Imatest® eSFR テスト チャートの強調版または拡張版をサポートしています[1]esfrChart オブジェクトは、Calibrite ColorChecker® Classic テスト チャートをサポートしています[2]

colorValues = measureColor(chart) は、Imatest eSFR テスト チャートまたは Calibrite ColorChecker Classic テスト チャートのすべてのカラー ROI における色の値を測定します。

[colorValues,colorCorrectionMatrix] = measureColor(chart) は、線形最小二乗近似を使用して計算された色補正行列も返します。

テスト チャート イメージ (R2024a 以降)

esfrChart オブジェクトまたは colorChecker オブジェクトでサポートされていないその他のタイプのテスト チャートの場合、テスト チャート イメージを使用します。カラー ROI の位置を特定しなければなりません。

colorValues = measureColor(im,roiPositions,refLAB) は、テスト チャート イメージ im の位置 roiPositions におけるすべてのカラー ROI におけるカラー値を測定します。各 ROI の基準 L*a*b* の値は、refLAB で与えられます。

colorValues = measureColor(im,roiPositions,refLAB,Name=Value) は、オプションで、名前と値の引数を使用して色空間と白色点を指定します。

[colorValues,colorCorrectionMatrix] = measureColor(___) は、前の構文の入力引数の任意の組み合わせを使用し、線形最小二乗近似を使って計算された色補正行列も返します。

すべて折りたたむ

eSFR チャートのイメージをワークスペースに読み取ります。

I = imread("eSFRTestImage.jpg");

esfrChart オブジェクトを作成し、ROI 注釈を含むチャートを表示します。16 個のカラー パッチ ROI には白色の数字でラベル付けされています。

chart = esfrChart(I);
displayChart(chart,displayEdgeROIs=false, ...
    displayGrayROIs=false,displayRegistrationPoints=false)

すべてのカラー パッチ ROI で色を測定します。

colorTable = measureColor(chart)
colorTable=16×8 table
    ROI    Measured_R    Measured_G    Measured_B    Reference_L    Reference_a    Reference_b    Delta_E
    ___    __________    __________    __________    ___________    ___________    ___________    _______

     1         67            57            58          38.586           7.541         7.0812       15.15 
     2        156           127           122          62.182          13.225         13.826      9.8745 
     3         73            95           152          49.369        -0.51463        -20.062      18.455 
     4         62            79            58          43.926         -6.8587         17.278      14.849 
     5        104           109           171          53.415           9.457        -22.822       12.99 
     6        118           175           187           69.95         -20.889       -0.21752      13.123 
     7        214           192            69          78.643          1.8052         67.091      9.2399 
     8        154            73           138          46.853          41.998        -17.056      5.1282 
     9         62           120           182           51.05         -15.166        -22.416      22.813 
    10         55            80           185          40.811          8.7346        -44.265      22.782 
    11         79           135            72          55.716         -23.419         28.839      9.4826 
    12        152            53            77          42.759          44.167         7.9536      5.4168 
    13        169            91            52          58.211           27.58         47.578      15.988 
    14        142            63            87          47.012           39.15         8.5453      11.651 
    15         91            67           102          40.591          17.951         -9.525      10.897 
    16        152           183            80          70.505         -16.318         49.811      10.253 

色精度の測定値を表示します。各正方形のカラー パッチは測定色であり、周囲の太い境界線はその ROI の基準色です。各色精度測定値は、Delta_E として表示されます。これは、CIE 1976 L*a*b* 色空間における測定色と基準色との間のユークリッド距離です。精度の高い色ほど、Delta_E が小さくなります。

figure
displayColorPatch(colorTable)

色精度測定の別の表現方法として、CIE 1976 L*a*b* 色空間の測定色と基準色を色度ダイアグラム上にプロットします。赤色の円は基準色を示します。緑色の円は、各カラー パッチの測定色を示します。色度ダイアグラムは色の明度は表しません。

figure
plotChromaticity(colorTable)

基準点と測定点との間の距離が短い ROI は、色度の差が小さくなり、Delta_E の値が小さくなる場合があります。ただし、明度も Delta_E の値に寄与します。たとえば、ROI 13 の基準点と測定点が色度ダイアグラム上で互いに近接していても、明度の差が大きいためにそれらの Delta_E は大きくなります。

ColorChecker® チャートのイメージをワークスペースに読み取ります。

I = imread("colorCheckerTestImage.jpg");

colorChecker オブジェクトを作成し、ROI 注釈を含むチャートを表示します。

chart = colorChecker(I);
displayChart(chart)

各カラー パッチ ROI で色を測定します。

colorTable = measureColor(chart)
colorTable=24×9 table
    ROI         Color          Measured_R    Measured_G    Measured_B    Reference_L    Reference_a    Reference_b    Delta_E
    ___    ________________    __________    __________    __________    ___________    ___________    ___________    _______

     1     {'DarkSkin'    }       160           129           120           37.54          14.37          14.92       20.193 
     2     {'LightSkin'   }       229           200           191           64.66          19.27           17.5       22.587 
     3     {'BlueSky'     }       146           191           241           49.32          -3.82         -22.54       27.312 
     4     {'Foliage'     }       130           161           117           43.46         -12.74          22.72       20.404 
     5     {'BlueFlower'  }       175           187           248           54.94           9.61         -24.79       23.073 
     6     {'BluishGreen' }       155           232           226           70.48         -32.26          -0.37       18.284 
     7     {'Orange'      }       255           161            99           62.73          35.83           56.5       16.114 
     8     {'PurplishBlue'}       130           164           254           39.43          10.75         -45.17       28.889 
     9     {'ModerateRed' }       252           146           160           50.57          48.64          16.67       23.601 
    10     {'Purple'      }       139           118           175            30.1          22.54         -20.87       24.672 
    11     {'YellowGreen' }       187           226           110           71.77         -24.13          58.19        15.21 
    12     {'OrangeYellow'}       241           194            76           71.51          18.24          67.37       14.148 
    13     {'Blue'        }        96           131           255           28.37          15.42          -49.8        33.34 
    14     {'Green'       }       118           209           130           54.38         -39.72          32.27       22.461 
    15     {'Red'         }       234           116           114           42.43          51.05          28.62        21.87 
    16     {'Yellow'      }       241           227           105            81.8           2.67          80.41       23.495 
      ⋮

カラー パッチ ROI を含むカスタム テスト チャートのイメージを読み取って表示します。この例では、Imatest eSFR テスト チャートをトリミングし、カスタムのテスト チャート イメージをシミュレートします。

I = imread("RGBColorPatches.jpg");
imshow(I)

Figure contains an axes object. The axes object contains an object of type image.

赤、緑、および青のカラー パッチの ROI を描画します。

numROIs = 3;
roiPos = zeros(numROIs,4);
for cnt = 1:numROIs
    hrect = drawrectangle;
    roiPos(cnt,:) = hrect.Position;
end  

Figure contains an axes object. The axes object contains 4 objects of type image, images.roi.rectangle.

カラー パッチの基準 L*a*b* の値を読み込みます。これらの値は RGBColorPatches_refLab.mat というファイルに保存されます。基準値の白色点は CIE 標準光源 D50 です。

load("RGBColorPatches_refLab.mat");

白色点を指定して、これら選択したエッジの色再現の値を計算します。

colorValues = measureColor(I,roiPos,refLab,ReferenceLABWhitePoint="d50");

カラー パッチ ダイアグラムに、測定色および基準色と、色の誤差を表示します。

displayColorPatch(colorValues)

Figure Visual Color Comparison contains an axes object. The axes object contains 4 objects of type image, text.

入力引数

すべて折りたたむ

テスト チャート。esfrChart オブジェクトまたは colorChecker オブジェクトとして指定します。

R2024a 以降

テスト チャート イメージ。RGB イメージとして指定します。

データ型: single | double | uint8 | uint16

R2024a 以降

ROI の位置。n 行 4 列の数値行列として指定します。ここで、n は ROI の数です。

R2024a 以降

選択した各 ROI の基準 L*a*b* の値。n 行 3 列の数値行列として指定します。ここで、n は ROI の数です。

データ型: single | double

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

例: colorValues = measureColor(im,roiPositions,refLAB,InputColorSpace="adobe-rgb-1998") は、Adobe RGB 1998 色空間を指定します。

R2024a 以降

テスト チャート イメージ im の入力色空間。"srgb""adobe-rgb-1998"、または "prophoto-rgb" として指定します。この名前と値の引数は、テスト チャート イメージ im を使用する場合にのみ指定できます。

チャート オブジェクト chart を指定した場合、関数 measureColor は sRGB 色空間を使用します。

R2024a 以降

基準 L*a*b* の値で使用される白色点。1 行 3 列の数値ベクトル、または次の表のいずれかの CIE 標準光源として指定します。この名前と値の引数は、テスト チャート イメージ im を使用する場合にのみ指定できます。

白色点
"a"

CIE 標準光源 A [1.0985, 1.0000, 0.3558]。相関色温度 2856 K で典型的な家庭用のタングステン製フィラメントの照明をシミュレートしたものです。

"c"CIE 標準光源 C [0.9807, 1.0000, 1.1822]。相関色温度 6774 K で平均天空または北空の昼光をシミュレートしたものです。CIE では推奨されていません。
"e"等エネルギー放射体、[1.000, 1.000, 1.000]。理論的参照値として有用。
"d50"CIE 標準光源 D50 [0.9642, 1.0000, 0.8251]。相関色温度 5003 K で日の出または日没時の暖か味のある昼光をシミュレートしたものです。"地平光" とも呼ばれます。

"d55"

CIE 標準光源 D55 [0.9568, 1.0000, 0.9214]。相関色温度 5500 K で午前または午後の中ごろの昼光をシミュレートしたものです。

"d65"CIE 標準光源 D65 [0.9504, 1.0000, 1.0888]。相関色温度 6504 K で正午の昼光をシミュレートしたものです。
"icc"ICC プロファイルで使用される PCS (プロファイル接続空間) の輝度。小数ビットが 16 ビットの 32 ビット符号付き固定小数点数による [0.9642, 1.000, 0.8249] の近似。実際の値: [31595,32768, 27030]/32768

  • chartesfrChart オブジェクトとして指定した場合、関数 measureColor は CIE 標準光源 D65 を使用します。

  • chartcolorChecker オブジェクトとして指定した場合、関数 measureColor は CIE 標準光源 D50 を使用します。基準 L*a*b* 値は、ColorChecker チャートの "After November 2014" バージョン用です。

出力引数

すべて折りたたむ

各カラー パッチ ROI に含まれるカラー値。table として返されます。この table には、各 ROI での測定値が 1 行ずつ格納されます。この table には常に次の変数 (列) が含まれます。

変数説明
ROIサンプリングされた ROI のインデックス。
Measured_R

ROI 内の赤のチャネル ピクセルの平均値。Measured_R は、chart.Image または im と同じデータ型のスカラーです。

Measured_G

ROI 内の緑のチャネル ピクセルの平均値。Measured_G は、chart.Image または im と同じデータ型のスカラーです。

Measured_B

ROI 内の青のチャネル ピクセルの平均値。Measured_B は、chart.Image または im と同じデータ型のスカラーです。

Reference_L

ROI の基準 L* の値。Reference_L はデータ型 double のスカラーです。

Reference_a

ROI の基準 a* の値。Reference_a はデータ型 double のスカラーです。

Reference_b

ROI の基準 b* の値。Reference_b はデータ型 double のスカラーです。

Delta_E

L*a*b* 色空間における測定カラー値と基準カラー値との間の色のユークリッド距離。Delta_E はデータ型 double のスカラーです。

テスト チャート オブジェクト chart を指定した場合、色の距離は CIE 1976 で記述されているとおりになります。テスト チャート イメージ im を指定した場合、色差は CIE DE2000 規格に基づきます。

テスト チャート イメージ im を指定した場合、この table にはさらに次の変数が含まれます。

変数説明
ROIPositionsROI の位置。[X Y Width Height] の形式の 4 要素ベクトルとして返されます。XY は ROI の左上隅の座標です。WidthHeight は ROI の幅と高さ (ピクセル単位) です。

table 内の測定値へのアクセスに関する詳細については、色の測定値へのアクセスを参照してください。

色補正係数。4 行 3 列の行列として返されます。colorCorrectionMatrix は、アフィン変換を表し、テスト チャート イメージと同様のライティング条件下で取得されたイメージを色補正するのに使用できます。例については、色補正行列を使用した色補正を参照してください。

テスト チャート イメージ im を指定した場合、関数 measureColor は線形色空間内の色補正行列を計算します。

データ型: double

詳細

すべて折りたたむ

色の測定値へのアクセス

カラー テーブル内の変数の順序は、テスト チャート イメージ im とチャート オブジェクト chart のどちらを入力するかによって異なります。カラー テーブル内の変数にアクセスする必要がある場合、数値インデックスではなく変数名を参照します。

たとえば、カラー テーブル内の変数 Delta_E にアクセスするには、次のようなコードを使用します。

deltaE = colorValues.Delta_E;

別の例として、インデックスが 3 の ROI で測定された RGB 値にアクセスするには、次のようなコードを使用します。最初のコマンドは、インデックスが 3 の ROI のテーブルに含まれる変数 Measured_RMeasured_G、および Measured_B を返します。2 番目のコマンドは、このテーブルを数値行ベクトルに変換します。

measuredRGB3 = colorValues(colorValues.ROI==3,["Measured_R" "Measured_G" "Measured_B"])
measuredRGB3vec = measuredRGB3{1,:};

なお、これらの 2 つの操作は以下の 1 つのコマンドで実行できます。

measuredRGB3vec = colorValues{colorValues.ROI==3,["Measured_R" "Measured_G" "Measured_B"]}

詳細については、table 内のデータへのアクセスおよび cell 配列のデータへのアクセスを参照してください。

参照

[2] Calibrite. "ColorChecker Classic". https://calibrite.com/us/product/colorchecker-classic/.

バージョン履歴

R2017b で導入

すべて展開する