Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

countLabelValues

ラベル値のカウント

R2021a 以降

    説明

    cnt = countLabelValues(lss,lblname) は、lblname という名前のラベルの値をカウントし、結果をテーブル cnt に返します。cnt には、ラベル値のカウントと割合が含まれます。lblname が ROI またはポイント ラベルのとき、cnt には、特定のカテゴリの値を少なくとも 1 つもつメンバーの数も含まれます。countLabelValues は以下をサポートしていません。

    • サブラベル

    • LabelDataType プロパティが 'table' または 'timetable' に設定されたラベル定義

    • インスタンスの値を、カテゴリの離散集合をもつベクトルに変換できないラベル。一意の離散カテゴリのセットを使用して、ラベル値をグループ化できなければなりません。サポートされていないラベルの例は次のとおりです。

      • timetable の cell 配列

      • 異なるサイズの行列を含む cell 配列

    すべて折りたたむ

    クジラの歌の録音を含むラベル付き信号セットを読み込みます。

    load whales
    lss
    lss = 
      labeledSignalSet with properties:
    
                 Source: {2x1 cell}
             NumMembers: 2
        TimeInformation: "sampleRate"
             SampleRate: 4000
                 Labels: [2x3 table]
            Description: "Characterize wave song regions"
    
     Use labelDefinitionsHierarchy to see a list of labels and sublabels.
     Use setLabelValue to add data to the set.
    
    

    セット内のラベルの名前を取得します。

    getLabelNames(lss)
    ans = 3x1 string
        "WhaleType"
        "MoanRegions"
        "TrillRegions"
    
    

    セットの 2 つのメンバーがシロナガスクジラであることを確認します。

    countLabelValues(lss,"WhaleType")
    ans=3×3 table
        WhaleType    Count    Percent
        _________    _____    _______
    
        blue           2        100  
        humpback       0          0  
        white          0          0  
    
    

    各メンバーに 3 つのうめき声の領域があることを確認します。

    countLabelValues(lss,"MoanRegions")
    ans=2×4 table
        MoanRegions    Count    Percent    MemberCount
        ___________    _____    _______    ___________
    
           false         0          0           0     
           true          6        100           2     
    
    

    各メンバーに 1 つのふるえ声の領域があることを確認します。

    countLabelValues(lss,"TrillRegions")
    ans=2×4 table
        TrillRegions    Count    Percent    MemberCount
        ____________    _____    _______    ___________
    
           false          0          0           0     
           true           2        100           2     
    
    

    MATLAB® に MAT ファイルとして含まれているオーディオ信号セットへのパスを指定します。各ファイルには、信号変数とサンプル レートが格納されています。ファイル名をリストします。

    folder = fullfile(matlabroot,"toolbox","matlab","audiovideo");
    lst = dir(append(folder,"/*.mat"));
    nms = {lst(:).name}'
    nms = 7x1 cell
        {'chirp.mat'   }
        {'gong.mat'    }
        {'handel.mat'  }
        {'laughter.mat'}
        {'mtlb.mat'    }
        {'splat.mat'   }
        {'train.mat'   }
    
    

    指定したフォルダーを示す信号データストアを作成します。サンプル レート変数名を Fs に設定します。これは、すべてのファイルで共通です。ファイル mtlb.mat を除くデータストアのサブセットを生成します。サブセット データストアをlabeledSignalSetオブジェクトのソースとして使用します。

    sds = signalDatastore(folder,"SampleRateVariableName","Fs");
    sds = subset(sds,~strcmp(nms,"mtlb.mat"));
    lss = labeledSignalSet(sds);

    信号にラベルを付けるために、次の 3 つのラベル定義を作成します。

    • 人間の声を含む信号を真とする論理属性ラベルを定義。

    • 各信号の最大値の位置と振幅を示す数値ポイント ラベルを定義。

    • 各信号にオーバーラップのない、長さが均一なランダム領域を選択するためのカテゴリカル関心領域 (ROI) ラベルを定義。

    この信号ラベルの定義をラベル付き信号セットに追加します。

    vc = signalLabelDefinition("Voice",'LabelType','attribute', ...
        'LabelDataType','logical','DefaultValue',false);
    mx = signalLabelDefinition("Maximum",'LabelType','point', ...
        'LabelDataType','numeric');
    rs = signalLabelDefinition("RanROI",'LabelType','ROI', ...
        'LabelDataType','categorical','Categories',["ROI" "other"]);
    addLabelDefinitions(lss,[vc mx rs])

    信号にラベルを付けます。

    • 人間の声を含むものとして、'handel.mat''laughter.mat' にラベルを付けます。

    • 関数islocalmaxを使用して、各信号の最大値を求めます。その位置と値にラベルを付けます。

    • 関数 randROI を使用して、領域間の最小間隔が N/6 サンプルの場合に長さ N の信号に収まるだけの長さ N/10 サンプルの領域を生成します。それらの位置にラベルを付け、ROI カテゴリに割り当てます。

    点と領域にラベルを付けるときに、サンプル値を時間値に変換します。MATLAB® 配列のインデックス付けを考慮して 1 を減算し、サンプル レートで除算します。

    kj = 1;
    while hasdata(sds)
        
        [sig,info] = read(sds);
        fs = info.SampleRate;
    
        [~,fn] = fileparts(info.FileName);
        if fn=="handel" || fn=="laughter"
            setLabelValue(lss,kj,"Voice",true)
        end
        
        xm = find(islocalmax(sig,'MaxNumExtrema',1));
        setLabelValue(lss,kj,"Maximum",(xm-1)/fs,sig(xm))
    
        N = length(sig);
        rois = randROI(N,round(N/10),round(N/6));
        setLabelValue(lss,kj,"RanROI",(rois-1)/fs,repelem("ROI",size(rois,1)))
    
        kj = kj+1;
        
    end

    2 つの信号にのみ音声が含まれていることを確認します。

    countLabelValues(lss,"Voice")
    ans=2×3 table
        Voice    Count    Percent
        _____    _____    _______
    
        false      4      66.667 
        true       2      33.333 
    
    

    この 2 つの信号の最大振幅が 1 であることを確認します。

    countLabelValues(lss,"Maximum")
    ans=5×4 table
               Maximum            Count    Percent    MemberCount
        ______________________    _____    _______    ___________
    
        0.80000000000000004441      1      16.667          1     
        0.89113331915798421612      1      16.667          1     
        0.94730769230769229505      1      16.667          1     
        1                           2      33.333          2     
        1.0575668990330560071       1      16.667          1     
    
    

    各信号に、オーバーラップのない 4 つのランダムな関心領域があることを確認します。

    countLabelValues(lss,"RanROI")
    ans=2×4 table
        RanROI    Count    Percent    MemberCount
        ______    _____    _______    ___________
    
        ROI        24        100           6     
        other       0          0           0     
    
    

    ラベル付き信号セットのデータを使用して 2 つのデータストアを作成します。

    • signalDatastoreオブジェクト sd には信号データが格納される。

    • arrayDatastoreオブジェクト ld にはラベル付け情報が格納される。作成したすべてのラベルに対応する情報を含めるように指定します。

    [sd,ld] = createDatastores(lss,["Voice" "RanROI" "Maximum"]);

    データストアの情報を使用して、信号をプロットし、それらのラベルを表示します。

    • signalMaskオブジェクトを使用して、関心領域を青色で強調表示。

    • 最大値の位置を示すために黄色の線をプロット。

    • 人間の声を含む信号に対して赤色の軸ラベルを追加。

    tiledlayout flow
    
    while hasdata(sd)
    
        [sg,nf] = read(sd);
        
        lbls = read(ld);
        
        nexttile
        
        msk = signalMask(lbls{:}.RanROI{:},'SampleRate',nf.SampleRate);    
        plotsigroi(msk,sg)
        colorbar off
        xlabel('')
        
        xline(lbls{:}.Maximum{:}.Location, ...
            'LineWidth',2,'Color','#EDB120')
        
        if lbls{:}.Voice{:}
            ylabel('VOICED','Color','#D95319')
        end
    
    end

    Figure contains 6 axes objects. Axes object 1 contains 4 objects of type line, constantline. Axes object 2 contains 4 objects of type line, constantline. Axes object 3 with ylabel VOICED contains 4 objects of type line, constantline. Axes object 4 with ylabel VOICED contains 4 objects of type line, constantline. Axes object 5 contains 4 objects of type line, constantline. Axes object 6 contains 4 objects of type line, constantline.

    function roilims = randROI(N,wid,sep)
    
    num = floor((N+sep)/(wid+sep));
    hq = histcounts(randi(num+1,1,N-num*wid-(num-1)*sep),(1:num+2)-1/2);
    roilims = (1 + (0:num-1)*(wid+sep) + cumsum(hq(1:num)))' + [0 wid-1];
    
    end

    入力引数

    すべて折りたたむ

    ラベル付き信号セット。labeledSignalSet オブジェクトとして指定します。

    例: labeledSignalSet({randn(100,1) randn(10,1)},signalLabelDefinition('female')) は、属性 'female' を含むランダム信号の 2 つのメンバーのセットを指定します。

    ラベル名。文字ベクトルまたは string スカラーとして指定します。

    データ型: char | string

    出力引数

    すべて折りたたむ

    結果テーブル。次の変数を含むテーブルとして返されます。

    • Count — 特定のカテゴリのラベル値の数。

    • Percent — すべてのラベル値に対する特定のカテゴリのラベル値の数の割合。

    • MemberCount — 特定のカテゴリの値を少なくとも 1 つもつメンバーの数。この変数は、ROI またはポイント ラベルに対してのみ返されます。

    バージョン履歴

    R2021a で導入