measureChromaticAberration
傾斜したエッジでの色収差の測定
構文
説明
esfrChart
オブジェクト
Imatest® eSFR テスト チャートの強調版または拡張版の傾斜したエッジ関心領域 (ROI) を自動的に検出する場合は、esfrChart
オブジェクトを使用します[1]。
は、Imatest テスト チャートの強調版または拡張版のすべての傾斜したエッジ ROI における色収差を測定します。aberrationValues
= measureChromaticAberration(chart
)
は、名前と値の引数を使用して、測定する ROI のサブセットを指定します。aberrationValues
= measureChromaticAberration(chart
,Name=Value
)
テスト チャート イメージ (R2024a 以降)
esfrChart
オブジェクトでサポートされていないその他のタイプのテスト チャートの場合、テスト チャート イメージを使用します。傾斜したエッジ ROI の位置を特定しなければなりません。
は、テスト チャート イメージ aberrationValues
= measureChromaticAberration(im
,roiPositions
)im
の位置 roiPositions
におけるすべての傾斜したエッジ ROI における色収差を測定します。
例
eSFR チャートの傾斜したエッジの色収差の測定
eSFR チャートのイメージをワークスペースに読み取ります。
I = imread("eSFRTestImage.jpg");
esfrChart
オブジェクトを作成し、ROI 注釈を含むチャートを表示します。60 個の傾斜したエッジ ROI には緑色の数字でラベル付けされています。
chart = esfrChart(I);
displayChart(chart,displayColorROIs=false,...
displayGrayROIs=false,displayRegistrationPoints=false)
すべての傾斜したエッジの ROI で色収差を測定します。単一の ROI について、返されたテーブル chTable
の内容を調べます。
chTable = measureChromaticAberration(chart); ROIIndex = 3; chTable(3,:)
ans=1×5 table
ROI aberration percentAberration edgeProfile normalizedEdgeProfile
___ __________ _________________ _____________ _____________________
3 1.7983 0.13956 {332x4 table} {332x4 table}
わかりやすくするために、正規化されたエッジ プロファイルを別の変数 edgeProfile
に格納します。edgeProfile
の最初と最後のピクセルの正規化された色強度を調べます。
edgeProfile = chTable.normalizedEdgeProfile{ROIIndex}; edgeProfile([1 end],:)
ans=2×4 table
normalizedEdgeProfile_R normalizedEdgeProfile_G normalizedEdgeProfile_B normalizedEdgeProfile_Y
_______________________ _______________________ _______________________ _______________________
0.003784 0.0026729 0.011565 0.0041317
0.98932 0.98978 1.0076 0.99009
ROI の正規化された強度値をプロットします。
npix = length(edgeProfile.normalizedEdgeProfile_R); plot(1:npix,edgeProfile.normalizedEdgeProfile_R,"r", ... 1:npix,edgeProfile.normalizedEdgeProfile_G,"g", ... 1:npix,edgeProfile.normalizedEdgeProfile_B,"b") xlabel("Pixel") ylabel("Normalized Intensity") title("ROI "+ROIIndex+" with Aberration "+chTable.aberration(ROIIndex))
青のチャネルは、エッジ直前で赤および緑のチャネルよりも強度が大きく、エッジ直後で赤および緑のチャネルよりも強度が小さくなります。この強度の差が色収差の測定値に寄与します。
このエッジの aberration
と percentAberration
の測定値は比較的小さくなっています。イメージを目視検査すると、エッジの両側には強い色調がないことが確認されます。
カスタム テスト チャートの傾斜したエッジの色収差の測定
傾斜したエッジ ROI を含むカスタム テスト チャートのイメージを読み取って表示します。
I = imread("slantedSquare.jpg");
imshow(I)
上部を起点として時計回りにエッジの ROI を描画します。
numROIs = 4; roiPos = zeros(numROIs,4); for cnt = 1:numROIs hrect = drawrectangle; roiPos(cnt,:) = hrect.Position; end
選択した ROI の色収差を計算します。
aberrationValues = measureChromaticAberration(I,roiPos)
aberrationValues=4×6 table
ROI aberration percentAberration edgeProfile normalizedEdgeProfile ROIPosition
___ __________ _________________ _____________ _____________________ ________________________
1 0.16281 0.080547 {316×4 table} {316×4 table} 218 83 247 78
2 0.30988 0.15219 {376×4 table} {376×4 table} 512 171 93 240
3 0.16296 0.082423 {316×4 table} {316×4 table} 262 479 262 78
4 0.19353 0.098824 {388×4 table} {388×4 table} 114 207 96 256
いずれかの ROI について、赤、緑、および青のカラー チャネルの正規化された強度をプロットします。
ROIIndex = 3; edgeProfile = aberrationValues.normalizedEdgeProfile{ROIIndex}; p = plot(edgeProfile, ... ["normalizedEdgeProfile_R" "normalizedEdgeProfile_G" "normalizedEdgeProfile_B"]); p(1).Color = "r"; p(2).Color = "g"; p(3).Color = "b"; xlabel("Pixel") ylabel("Normalized Intensity") title("ROI "+ROIIndex+" with Aberration "+aberrationValues.aberration(ROIIndex))
入力引数
chart
— eSFR チャート
esfrChart
オブジェクト
eSFR チャート。esfrChart
オブジェクトとして指定します。
im
— テスト チャート イメージ
RGB イメージ
R2024a 以降
テスト チャート イメージ。RGB イメージとして指定します。
roiPositions
— ROI の位置
n 行 4 列の数値配列
R2024a 以降
ROI の位置。n 行 4 列の数値配列として指定します。ここで、n は ROI の数です。各 ROI の形式は [X Y Width Height]
です。ここで、X
と Y
は ROI の左上隅の座標です。Width
と Height
は ROI の幅と高さ (ピクセル単位) です。
水平方向のエッジの場合、横方向の (高さよりも幅が大きい) 縦横比をもつ ROI を指定します。同様に、垂直方向のエッジの場合、縦方向の (幅よりも高さが大きい) 縦横比をもつ ROI を指定します。
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで、Name
は引数名で、Value
は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
例: aberrationValues = measureChromaticAberration(chart,ROIIndex=2)
は、ROI 2 の色収差のみを測定します。
R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name
を引用符で囲みます。
例: aberrationValues = measureChromaticAberration(chart,"ROIIndex",2)
は、ROI 2 の色収差のみを測定します。
ROIIndex
— ROI インデックス
数値スカラー | 数値ベクトル
測定に含める ROI インデックス。1 と ROI 数の間の値を含む数値スカラーまたは数値ベクトルとして指定します。既定では、関数 measureChromaticAberration
はすべての ROI インデックスを測定に含めます。
メモ
measureChromaticAberration
は、ROIIndex
と ROIOrientation
によって指定された ROI の交点を使用します。
この引数は、チャート オブジェクト chart
を使用する場合にのみ指定できます。
例: 29:32
データ型: single
| double
| int8
| int16
| int32
| uint8
| uint16
| uint32
ROIOrientation
— ROI の方向
"both"
(既定値) | "vertical"
| "horizontal"
出力引数
aberrationValues
— 色収差の測定値
table
色収差の測定値。table として返されます。この table には、各 ROI での測定値が 1 行ずつ格納されます。この table には常に次の変数 (列) が含まれます。
変数 | 説明 |
---|---|
ROI | サンプリングされた ROI のインデックス。ROI の値は範囲 [1, 60] の整数です。 |
aberration | 色収差。赤色、緑色、青色のエッジの強度プロファイルの最大値と最小値の間の領域として測定されます。測定された色収差は、知覚的な色収差を示します。 |
percentAberration | 収差。イメージの中心と ROI の中心との間の距離 (ピクセル単位) をパーセント比で表します。 |
edgeProfile | ROI 内のエッジ全体の各カラー チャネルの強度プロファイル。 輝度 (Y) は、次に基づいて、赤 (R)、緑 (G)、青 (B) チャネルを線形結合したものです。 Y = 0.213R + 0.715G + 0.072B
メモ 色収差測定のサンプリング レートは、イメージのサンプリング レートの約 4 倍です。
|
normalizedEdgeProfile | 強度プロファイル。データの最前部と最後部の 5% を使用して [0, 1] の間で正規化されています。 |
テスト チャート イメージ im
を指定した場合、この table にはさらに次の変数が含まれます。
変数 | 説明 |
---|---|
ROIPositions | ROI の位置。[X Y Width Height] の形式の 4 要素ベクトルとして返されます。X と Y は ROI の左上隅の座標です。Width と Height は ROI の幅と高さ (ピクセル単位) です。 |
詳細
色収差の測定値へのアクセス
色収差テーブル内の変数の順序は、テスト チャート イメージ im
とチャート オブジェクト chart
のどちらを入力するかによって異なります。色収差テーブル内の変数にアクセスする必要がある場合、数値インデックスではなく変数名を参照します。
たとえば、色収差テーブル内の変数 aberration
にアクセスするには、次のようなコードを使用します。
aberration = aberrationValues.aberration;
別の例として、インデックスが 3 の ROI で測定された色収差の値にアクセスするには、次のようなコードを使用します。最初のコマンドは、インデックスが 3 の ROI のテーブルに含まれる変数 normalizedEdgeProfile
を返します。2 番目のコマンドは、このテーブルを数値行ベクトルに変換します。
edgeProfiles = aberrationValues.normalizedEdgeProfile{ROIIndex}; edgeProfilesRGB = measuredRGB3{1,:};
詳細については、table 内のデータへのアクセスおよび cell 配列のデータへのアクセスを参照してください。
ヒント
色収差は、以下のような傾斜したエッジで最もうまく測定されます。
イメージの中心と ROI の中心とを結ぶ線におおよそ直交します
イメージの中心から最も遠くなります
色収差はイメージの中心から放射状に増加するため、イメージの中心付近の傾斜したエッジでの測定値は無視できます。
変数
aberration
で報告される絶対色収差は、水平方向または垂直方向に測定されます。しかし、色収差は放射状の現象であり、放射状の測定の方がより正確です。
参照
[1] Imatest. "Esfr". https://www.imatest.com/mathworks/esfr/.
バージョン履歴
R2017b で導入R2024a: 追加のテスト チャートのサポート
Imatest eSFR テスト チャートの強調版または拡張版以外のテスト チャートの傾斜したエッジにおける色収差を測定できるようになりました。追加のタイプのテスト チャートの鮮鋭度を測定するには、テスト チャート イメージ im
、および傾斜したエッジ ROI の位置 roiPositions
を指定します。
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)