Main Content

measureChromaticAberration

傾斜したエッジでの色収差の測定

説明

esfrChart オブジェクト

Imatest® eSFR テスト チャートの強調版または拡張版の傾斜したエッジ関心領域 (ROI) を自動的に検出する場合は、esfrChart オブジェクトを使用します[1]

aberrationValues = measureChromaticAberration(chart) は、Imatest テスト チャートの強調版または拡張版のすべての傾斜したエッジ ROI における色収差を測定します。

aberrationValues = measureChromaticAberration(chart,Name=Value) は、名前と値の引数を使用して、測定する ROI のサブセットを指定します。

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

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

aberrationValues = measureChromaticAberration(im,roiPositions) は、テスト チャート イメージ im の位置 roiPositions におけるすべての傾斜したエッジ ROI における色収差を測定します。

すべて折りたたむ

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))

青のチャネルは、エッジ直前で赤および緑のチャネルよりも強度が大きく、エッジ直後で赤および緑のチャネルよりも強度が小さくなります。この強度の差が色収差の測定値に寄与します。

このエッジの aberrationpercentAberration の測定値は比較的小さくなっています。イメージを目視検査すると、エッジの両側には強い色調がないことが確認されます。

傾斜したエッジ ROI を含むカスタム テスト チャートのイメージを読み取って表示します。

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

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

上部を起点として時計回りにエッジの ROI を描画します。

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

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

選択した 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))

Figure contains an axes object. The axes object with title ROI 3 with Aberration 0.16296, xlabel Pixel, ylabel Normalized Intensity contains 3 objects of type line.

入力引数

すべて折りたたむ

eSFR チャート。esfrChart オブジェクトとして指定します。

R2024a 以降

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

R2024a 以降

ROI の位置。n 行 4 列の数値配列として指定します。ここで、n は ROI の数です。各 ROI の形式は [X Y Width Height] です。ここで、XY は ROI の左上隅の座標です。WidthHeight は 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 の色収差のみを測定します。

測定に含める ROI インデックス。1 と ROI 数の間の値を含む数値スカラーまたは数値ベクトルとして指定します。既定では、関数 measureChromaticAberration はすべての ROI インデックスを測定に含めます。

メモ

measureChromaticAberration は、ROIIndexROIOrientation によって指定された ROI の交点を使用します。

この引数は、チャート オブジェクト chart を使用する場合にのみ指定できます。

例: 29:32

データ型: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32

ROI の方向。"both""vertical"、または "horizontal" として指定します。関数 measureChromaticAberration は、ROI について指定された方向でのみ測定を実行します。

メモ

measureChromaticAberration は、ROIIndexROIOrientation によって指定された ROI の交点を使用します。

この引数は、チャート オブジェクト chart を使用する場合にのみ指定できます。

データ型: char | string

出力引数

すべて折りたたむ

色収差の測定値。table として返されます。この table には、各 ROI での測定値が 1 行ずつ格納されます。この table には常に次の変数 (列) が含まれます。

変数説明
ROIサンプリングされた ROI のインデックス。ROI の値は範囲 [1, 60] の整数です。
aberration

色収差。赤色、緑色、青色のエッジの強度プロファイルの最大値と最小値の間の領域として測定されます。測定された色収差は、知覚的な色収差を示します。aberrationdouble 型のスカラーです。

percentAberration収差。イメージの中心と ROI の中心との間の距離 (ピクセル単位) をパーセント比で表します。
edgeProfile

ROI 内のエッジ全体の各カラー チャネルの強度プロファイル。edgeProfile は、s 行 4 列のテーブルで、s はエッジ全体でのサンプルの数です。4 つの列は、エッジに沿って平均化された赤、緑、青、および輝度の値を表します。

輝度 (Y) は、次に基づいて、赤 (R)、緑 (G)、青 (B) チャネルを線形結合したものです。

Y = 0.213R + 0.715G + 0.072B

メモ

色収差測定のサンプリング レートは、イメージのサンプリング レートの約 4 倍です。

normalizedEdgeProfile

強度プロファイル。データの最前部と最後部の 5% を使用して [0, 1] の間で正規化されています。normalizedEdgeProfile は、edgeProfile と同じ構造を持つ s 行 4 列のテーブルです。

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

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

詳細

すべて折りたたむ

色収差の測定値へのアクセス

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

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

aberration = aberrationValues.aberration;

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

edgeProfiles = aberrationValues.normalizedEdgeProfile{ROIIndex};
edgeProfilesRGB = measuredRGB3{1,:};

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

ヒント

  • 色収差は、以下のような傾斜したエッジで最もうまく測定されます。

    • イメージの中心と ROI の中心とを結ぶ線におおよそ直交します

    • イメージの中心から最も遠くなります

    色収差はイメージの中心から放射状に増加するため、イメージの中心付近の傾斜したエッジでの測定値は無視できます。

  • 変数 aberration で報告される絶対色収差は、水平方向または垂直方向に測定されます。しかし、色収差は放射状の現象であり、放射状の測定の方がより正確です。

参照

バージョン履歴

R2017b で導入

すべて展開する