Main Content

countEachLabel

各クラスのピクセル ラベル数をカウント

R2021a 以降

    説明

    counts = countEachLabel(bimds) は、ブロック化イメージ データストア bimds のすべてのブロックにおける各ピクセル ラベルの出現数をカウントします。

    counts = countEachLabel(___,Name,Value) は、追加の名前と値の引数を指定します。

    bimds が categorical データを含む場合、countEachLabel は、最初のブロック化されたイメージの InitialValue プロパティに指定されているカテゴリからクラス名を取得します。この場合、名前と値の引数 Classes および PixelLabelIDs は指定しないでください。bimds が数値データを含む場合は、名前と値の引数 Classes および PixelLabelIDs の値を指定しなければなりません。

    すべて折りたたむ

    サンプル ラベル イメージからブロック化されたイメージを作成します。

    bim = blockedImage("yellowlily-segmented.png",BlockSize=[512 512]);
    b = bigimageshow(bim);
    showlabels(b,bim)

    ブロック化されたイメージからブロック化イメージ データストアを作成します。

    bimds = blockedImageDatastore(bim);

    ブロック化イメージ データストアに含まれるラベルの数をカウントします。ラベル 0 および 3 はいずれも "Background" にマッピングされます。

    countEachLabel(bimds, ...
          Classes=["Background" "Flower" "Leaf" "Background"], ...
          PixelLabelIDs=[0 1 2 3])
    ans=3×3 table
            Name        PixelCount    BlockPixelCount
        ____________    __________    _______________
    
        "Background"    2.3706e+06      3.1457e+06   
        "Flower"        4.3349e+05      1.5729e+06   
        "Leaf"          3.4159e+05      2.0972e+06   
    
    

    ピクセル ラベル データを読み込みます。

    load("buildingPixelLabeled.mat");

    ピクセル ラベル データを管理する blockedImage を作成します。

    blockedLabeledImage = blockedImage(label,BlockSize=[200 150]);
    bigimageshow(blockedLabeledImage)

    blockedLabeledImage から最も細かい解像度レベルで 200×150 ピクセルのブロックを読み取る blockedImageDatastore を作成します。

    blockLabelDS = blockedImageDatastore(blockedLabeledImage);

    各クラスのピクセル ラベル数をカウントします。

    tbl = countEachLabel(blockLabelDS)
    tbl=4×3 table
           Name       PixelCount    BlockPixelCount
        __________    __________    _______________
    
        "building"    1.8036e+05        4.5e+05    
        "grass"            32983        1.5e+05    
        "sidewalk"         10491        1.5e+05    
        "sky"              81525        1.8e+05    
    
    

    一様な事前重み付けを使用して、クラスのバランスを調整します。

    prior = 1/height(tbl);
    uniformClassWeights = prior ./ tbl.PixelCount
    uniformClassWeights = 4×1
    10-4 ×
    
        0.0139
        0.0758
        0.2383
        0.0307
    
    

    逆頻度重み付けを使用して、クラスのバランスを調整します。

     totalNumberOfPixels = sum(tbl.PixelCount);
     freq = tbl.PixelCount / totalNumberOfPixels;
     invFreqClassWeights = 1./freq
    invFreqClassWeights = 4×1
    
        1.6931
        9.2580
       29.1067
        3.7456
    
    

    中央頻度重み付けを使用して、クラスのバランスを調整します。

    freq = tbl.PixelCount ./ tbl.BlockPixelCount;
    medFreqClassWeights = median(freq) ./ freq
    medFreqClassWeights = 4×1
    
        0.7743
        1.4114
        4.4373
        0.6852
    
    

    入力引数

    すべて折りたたむ

    ブロック化イメージ データストア。blockedImageDatastore オブジェクトとして指定します。

    名前と値の引数

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

    例: countEachLabel(lbimds,Classes=["Background","Flower","Leaf","Background"],PixelLabelIDs=[0,1,2,3])

    R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

    例: countEachLabel(lbimds,"Classes",["Background","Flower","Leaf","Background"],"PixelLabelIDs",[0,1,2,3])

    クラス名。string 配列、または文字ベクトルの cell 配列として指定します。

    例: ["Background","Flower","Leaf"]

    データ型: char | string | cell

    各ラベルの値。Classes と同じ長さの数値配列として指定します。この名前と値の引数により、数値がラベル クラスにマッピングされます。

    例: [0 1 2 3]

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

    新規または既存の並列プールの使用。数値または logical の 0 (false) または 1 (true) として指定します。アクティブな並列プールがない場合、countEachLabel は既定の並列設定に基づき、新しいプールを開きます。この引数を使用するには Parallel Computing Toolbox™ が必要です。

    データ型: logical

    出力引数

    すべて折りたたむ

    ブロック化されたイメージ データストアのすべてのブロックにおける各ピクセル ラベルの出現数のカウント。3 つの変数を含む table として返されます。

    ピクセル数の変数説明
    Nameピクセル ラベルのクラス名
    PixelCountすべてのブロックにおける所定のクラスのピクセル数
    BlockPixelCount所定のクラスのインスタンスをもつブロックに含まれているピクセルの総数

    ヒント

    countEachLabel によって返されたラベル情報を使用して、クラス バランス調整のために、クラスの重み付けを計算できます。たとえば、tbl に含まれる、ラベル付けされたピクセル データ情報の場合、次のようになります。

    • 一様なクラス バランス調整は、それぞれの事前確率が一様になるよう、各クラスに重み付けをします。

      numClasses = height(tbl)
      prior = 1/numClasses;
      classWeights = prior./tbl.PixelCount

    • 逆頻度バランス調整は、少数しか存在しないクラスの重みが大きくなるよう、各クラスに重み付けをします。

      totalNumberOfPixels = sum(tbl.PixelCount)
      frequency = tbl.PixelCount / totalNumberOfPixels;
      classWeights = 1./frequency

    • 中央頻度バランス調整は、中央頻度を使用して、各クラスに重み付けをします。各クラス c の重みは median(imageFreq)/imageBlockFreq(c) として定義されます。ここで、imageBlockFreq(c) は、指定されたクラスのピクセル数を、指定されたクラス c のインスタンスをもつイメージ ブロックに含まれているピクセルの総数で割ったものです。

      imageBlockFreq = tbl.PixelCount ./ tbl.BlockPixelCount
      classWeights = median(imageBlockFreq) ./ imageBlockFreq
      

    計算されたクラスの重みは pixelClassificationLayer (Computer Vision Toolbox) に渡せます。

    バージョン履歴

    R2021a で導入

    参考

    | | (Computer Vision Toolbox)