measureColor
テスト チャートを使用した色再現の測定
構文
説明
esfrChart
オブジェクトまたは colorChecker
オブジェクト
テスト チャートのカラー関心領域 (ROI) を自動的に検出する場合は、esfrChart
オブジェクトまたは colorChecker
オブジェクトを使用します。esfrChart
オブジェクトは、Imatest® eSFR テスト チャートの強調版または拡張版をサポートしています[1]。esfrChart
オブジェクトは、Calibrite ColorChecker® Classic テスト チャートをサポートしています[2]。
は、Imatest eSFR テスト チャートまたは Calibrite ColorChecker Classic テスト チャートのすべてのカラー ROI における色の値を測定します。colorValues
= measureColor(chart
)
[
は、線形最小二乗近似を使用して計算された色補正行列も返します。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 チャートの色精度の測定
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 チャートの色の測定
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)
赤、緑、および青のカラー パッチの ROI を描画します。
numROIs = 3; roiPos = zeros(numROIs,4); for cnt = 1:numROIs hrect = drawrectangle; roiPos(cnt,:) = hrect.Position; end
カラー パッチの基準 L*a*b* の値を読み込みます。これらの値は RGBColorPatches_refLab.mat
というファイルに保存されます。基準値の白色点は CIE 標準光源 D50 です。
load("RGBColorPatches_refLab.mat");
白色点を指定して、これら選択したエッジの色再現の値を計算します。
colorValues = measureColor(I,roiPos,refLab,ReferenceLABWhitePoint="d50");
カラー パッチ ダイアグラムに、測定色および基準色と、色の誤差を表示します。
displayColorPatch(colorValues)
入力引数
chart
— テスト チャート
esfrChart
オブジェクト | colorChecker
オブジェクト
テスト チャート。esfrChart
オブジェクトまたは colorChecker
オブジェクトとして指定します。
im
— テスト チャート イメージ
RGB イメージ
R2024a 以降
テスト チャート イメージ。RGB イメージとして指定します。
データ型: single
| double
| uint8
| uint16
roiPositions
— ROI の位置
n 行 4 列の数値行列
R2024a 以降
ROI の位置。n 行 4 列の数値行列として指定します。ここで、n は ROI の数です。
refLAB
— 基準 L*a*b* の値
n 行 3 列の数値配列
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 色空間を指定します。
ReferenceLABWhitePoint
— 白色点
"d65"
(既定値) | 1 行 3 列の数値ベクトル
R2024a 以降
基準 L*a*b* の値で使用される白色点。1 行 3 列の数値ベクトル、または次の表のいずれかの CIE 標準光源として指定します。この名前と値の引数は、テスト チャート イメージ im
を使用する場合にのみ指定できます。
値 | 白色点 |
---|---|
"a" | CIE 標準光源 A |
"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 で日の出または日没時の暖か味のある昼光をシミュレートしたものです。"地平光" とも呼ばれます。 |
| CIE 標準光源 D55 |
"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 。 |
chart
をesfrChart
オブジェクトとして指定した場合、関数measureColor
は CIE 標準光源 D65 を使用します。chart
をcolorChecker
オブジェクトとして指定した場合、関数measureColor
は CIE 標準光源 D50 を使用します。基準 L*a*b* 値は、ColorChecker チャートの "After November 2014" バージョン用です。
出力引数
colorValues
— カラー値
table
各カラー パッチ ROI に含まれるカラー値。table として返されます。この table には、各 ROI での測定値が 1 行ずつ格納されます。この table には常に次の変数 (列) が含まれます。
変数 | 説明 |
---|---|
ROI | サンプリングされた ROI のインデックス。 |
Measured_R | ROI 内の赤のチャネル ピクセルの平均値。 |
Measured_G | ROI 内の緑のチャネル ピクセルの平均値。 |
Measured_B | ROI 内の青のチャネル ピクセルの平均値。 |
Reference_L | ROI の基準 L* の値。 |
Reference_a | ROI の基準 a* の値。 |
Reference_b | ROI の基準 b* の値。 |
Delta_E | L*a*b* 色空間における測定カラー値と基準カラー値との間の色のユークリッド距離。 テスト チャート オブジェクト |
テスト チャート イメージ im
を指定した場合、この table にはさらに次の変数が含まれます。
変数 | 説明 |
---|---|
ROIPositions | ROI の位置。[X Y Width Height] の形式の 4 要素ベクトルとして返されます。X と Y は ROI の左上隅の座標です。Width と Height は ROI の幅と高さ (ピクセル単位) です。 |
table 内の測定値へのアクセスに関する詳細については、色の測定値へのアクセスを参照してください。
colorCorrectionMatrix
— 色補正係数
4 行 3 列の行列
色補正係数。4 行 3 列の行列として返されます。colorCorrectionMatrix
は、アフィン変換を表し、テスト チャート イメージと同様のライティング条件下で取得されたイメージを色補正するのに使用できます。例については、色補正行列を使用した色補正を参照してください。
テスト チャート イメージ im
を指定した場合、関数 measureColor
は線形色空間内の色補正行列を計算します。
データ型: double
詳細
色の測定値へのアクセス
カラー テーブル内の変数の順序は、テスト チャート イメージ im
とチャート オブジェクト chart
のどちらを入力するかによって異なります。カラー テーブル内の変数にアクセスする必要がある場合、数値インデックスではなく変数名を参照します。
たとえば、カラー テーブル内の変数 Delta_E
にアクセスするには、次のようなコードを使用します。
deltaE = colorValues.Delta_E;
別の例として、インデックスが 3 の ROI で測定された RGB 値にアクセスするには、次のようなコードを使用します。最初のコマンドは、インデックスが 3 の ROI のテーブルに含まれる変数 Measured_R
、Measured_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 配列のデータへのアクセスを参照してください。
参照
[1] Imatest. "Esfr". https://www.imatest.com/mathworks/esfr/.
[2] Calibrite. "ColorChecker Classic". https://calibrite.com/us/product/colorchecker-classic/.
バージョン履歴
R2017b で導入R2024a: 追加のテスト チャートのサポート
Imatest eSFR テスト チャートの強調版または拡張版および Calibrite ColorChecker Classic テスト チャート以外のテスト チャートのカラー ROI における色再現を測定できるようになりました。
追加のタイプのテスト チャートの色を測定するには、テスト チャート イメージ im
、カラー パッチ ROI の位置 roiPositions
、および基準 L*a*b* の値 refLAB
を指定します。
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)