Main Content

bfscore

イメージのセグメンテーションのための輪郭マッチング スコア

説明

score = bfscore(prediction,groundTruth) は、prediction 内の予測セグメンテーションと groundTruth 内のトゥルース セグメンテーションとの間の BF (Boundary F1) 輪郭マッチング スコアを計算します。predictiongroundTruth は、バイナリ セグメンテーションのための logical 配列ペア、あるいはマルチクラス セグメンテーションのためのラベルまたは categorical 配列ペアの可能性があります。

[score,precision,recall] = bfscore(prediction,groundTruth) は、groundTruth イメージと比較した prediction イメージの精度値および再現率値も返します。

[___] = bfscore(prediction,groundTruth,threshold) は、指定されたしきい値を距離許容誤差として使用して BF スコアを計算し、境界点が一致するかどうかを判定します。

すべて折りたたむ

セグメント化するオブジェクトを含むイメージを読み取ります。イメージをグレースケールに変換し、結果を表示します。

A = imread('hands1.jpg');
I = im2gray(A); 
figure
imshow(I)
title('Original Image')

動的輪郭 (snakes) 法を使用して手をセグメント化します。

mask = false(size(I));
mask(25:end-25,25:end-25) = true;
BW = activecontour(I, mask, 300);

グラウンド トゥルース セグメンテーションを読み取ります。

BW_groundTruth = imread('hands1-mask.png');

動的輪郭セグメンテーションの BF スコアをグラウンド トゥルースと比較して計算します。

similarity = bfscore(BW, BW_groundTruth);

マスクを重ねて表示します。色はマスクの違いを示します。

figure
imshowpair(BW, BW_groundTruth)
title(['BF Score = ' num2str(similarity)])

この例では、イメージを複数の領域にセグメント化する方法を説明します。その後、各領域の BF スコアを計算します。

セグメント化する複数の領域を含むイメージを読み取ります。

RGB = imread('yellowlily.jpg');

典型的な色の特性を区別する 3 つの領域用にスクリブルを作成します。最初の領域には黄色の花が分類されます。2 番目の領域には、緑色の茎および葉が分類されます。最後の領域には、茶色の土が2 つのイメージのパッチに分かれて分類されます。領域は、要素が ROI の左上隅の x 座標と y 座標、ROI の幅、および ROI の高さを示す 4 要素ベクトルで指定されます。

region1 = [350 700 425 120]; % [x y w h] format
BW1 = false(size(RGB,1),size(RGB,2));
BW1(region1(2):region1(2)+region1(4),region1(1):region1(1)+region1(3)) = true;

region2 = [800 1124 120 230];
BW2 = false(size(RGB,1),size(RGB,2));
BW2(region2(2):region2(2)+region2(4),region2(1):region2(1)+region2(3)) = true;

region3 = [20 1320 480 200; 1010 290 180 240]; 
BW3 = false(size(RGB,1),size(RGB,2));    
BW3(region3(1,2):region3(1,2)+region3(1,4),region3(1,1):region3(1,1)+region3(1,3)) = true;
BW3(region3(2,2):region3(2,2)+region3(2,4),region3(2,1):region3(2,1)+region3(2,3)) = true;

イメージの上にシード領域を表示します。

figure
imshow(RGB)
hold on
visboundaries(BW1,'Color','r');
visboundaries(BW2,'Color','g');
visboundaries(BW3,'Color','b');
title('Seed regions')

測地線距離ベースの色のセグメンテーションを使用して、イメージを 3 領域にセグメント化します。

L = imseggeodesic(RGB,BW1,BW2,BW3,'AdaptiveChannelWeighting',true);

イメージのグラウンド トゥルース セグメンテーションを読み込みます。

L_groundTruth = double(imread('yellowlily-segmented.png'));

セグメンテーションの結果をグラウンド トゥルースと視覚的に比較します。

figure
imshowpair(label2rgb(L),label2rgb(L_groundTruth),'montage')
title('Comparison of Segmentation Results (Left) and Ground Truth (Right)')

セグメント化された領域ごとに BF スコアを計算します。

similarity = bfscore(L, L_groundTruth)
similarity = 3×1

    0.7992
    0.5333
    0.7466

BF スコアは 2 番目の領域で顕著に小さくなります。この結果は、イメージの右下隅の土を葉として誤って分類するセグメンテーション結果の視覚的な比較と一致しています。

入力引数

すべて折りたたむ

予測セグメンテーション。2 次元または 3 次元の logical、数値、または categorical 配列として指定します。prediction が数値配列の場合、ラベル配列を表し、データ型 double の非負の整数を含まなければなりません。

データ型: logical | double | categorical

グラウンド トゥルース セグメンテーション。prediction と同じサイズとデータ型の、2 次元または 3 次元の logical、数値、または categorical 配列として指定します。groundTruth が数値配列の場合、ラベル配列を表し、データ型 double の非負の整数を含まなければなりません。

データ型: logical | double | categorical

ピクセル単位の距離許容誤差のしきい値。正のスカラーとして指定します。しきい値は、境界点が一致するかどうかを決定します。threshold を指定しない場合、既定値はイメージの対角線の長さの 0.75% になります。

例: 3

データ型: double

出力引数

すべて折りたたむ

BF スコア。範囲 [0, 1] の数値を持つスカラーまたはベクトルとして返されます。score が 1 の場合、prediction および groundTruth に含まれる対応するクラスのオブジェクトの輪郭が完全一致であることを意味します。入力配列に応じて、次のようになります。

  • logical 配列。score はスカラーであり、前景の BF スコアを表します。

  • ラベルまたは categorical 配列。score はベクトルです。score の 1 つ目の係数は 1 番目の前景クラスの BF スコア、2 つ目の係数は 2 番目の前景クラスのスコアとなり、以下同様です。

精度。範囲 [0, 1] の数値を持つスカラーまたは数値ベクトルとして返されます。各要素は、対応する前景クラスのオブジェクトの輪郭の精度を示します。

"精度" とは、予測境界の長さに対する、グラウンド トゥルース セグメンテーションの境界に十分に近い予測セグメンテーションの境界上の点の数の比率です。言い換えれば、精度とは、偽陽性ではなく真陽性である検出の割合です。

再現率。範囲 [0, 1] の数値を持つスカラーまたは数値ベクトルとして返されます。各要素は、対応する前景クラスのオブジェクトの輪郭の再現率を示します。

"再現率" とは、グラウンド トゥルース境界の長さに対する、予測セグメンテーションの境界に十分に近いグラウンド トゥルース セグメンテーションの境界上の点の数の比率です。言い換えれば、再現性とは、検出漏れではない、検出された真陽性の割合です。

詳細

すべて折りたたむ

BF (Boundary F1) スコア

BF スコアは、オブジェクトの予測境界がグラウンド トゥルース境界にどのくらい近いかを測定します。

BF スコアは、予測境界上の点が、グラウンド トゥルース境界上に一致する点を持つかどうかを決定するために、距離許容誤差を使用して precisionrecall の値の調和平均 (F1-measure) として定義されます。

score = 2 * precision * recall / (recall + precision)

参照

[1] Csurka, G., D. Larlus, and F. Perronnin. "What is a good evaluation measure for semantic segmentation?" Proceedings of the British Machine Vision Conference, 2013, pp. 32.1-32.11.

拡張機能

バージョン履歴

R2017b で導入

すべて展開する

参考

|