色特徴とスーパーピクセルを使用した地表の分類のプロット
この例では、k-means クラスタリングとスーパーピクセルを使用し、色特徴に基づいた地表タイプの分類を行う方法を説明します。セグメンテーションや分類を行う場合、特に大規模なイメージを取り扱う場合は、スーパーピクセルが非常に便利な手法となります。スーパーピクセルを使用すると、イメージを構造的に意味のある一連の領域に分割できます。この場合、各領域の境界には元のイメージのエッジ情報が考慮されます。イメージをスーパーピクセル領域に分割すると、分類アルゴリズムを使用して各領域を分類でき、フル グリッドで構成された元のイメージの分類問題を解く必要がありません。スーパーピクセルを使用すると、イメージの分類問題を解く際にパフォーマンス上で多大な利点があり、同時に質の高いセグメンテーションの結果が得られます。
イメージをワークスペースに読み取ります。パフォーマンスを向上させるため、この例ではイメージのサイズを半分に縮小します。視覚的に、色特徴のみに基づいて Brue Marble イメージ内で区別できる地表は森林地帯、乾燥/砂漠地帯、凍結地帯および水域の 4 種類あります。
url = "https://eoimages.gsfc.nasa.gov/images/imagerecords/74000/74192/" ... + "world.200411.3x5400x2700.jpg"; A = imread(url); A = imresize(A,0.5); imshow(A)
イメージを L*a*b* 色空間に変換します。
Alab = rgb2lab(A);
元のイメージのスーパーピクセル オーバーセグメンテーションを計算して表示します。
[L,N] = superpixels(Alab,20000,isInputLab=true);
BW = boundarymask(L);
imshow(imoverlay(A,BW,"cyan"))
領域ごとに一連のピクセルの cell 配列を作成します。
pixelIdxList = label2idx(L);
L*a*b* 色空間で各スーパーピクセル領域の色の中央値を決定します。
[m,n] = size(L); meanColor = zeros(m,n,3,"single"); for i = 1:N meanColor(pixelIdxList{i}) = mean(Alab(pixelIdxList{i})); meanColor(pixelIdxList{i}+m*n) = mean(Alab(pixelIdxList{i}+m*n)); meanColor(pixelIdxList{i}+2*m*n) = mean(Alab(pixelIdxList{i}+2*m*n)); end
関数 imsegkmeans
を使用して各スーパーピクセルの色特徴をクラスタリングします。
numColors = 4; [Lout,cmap] = imsegkmeans(meanColor,numColors,numAttempts=2); cmap = lab2rgb(cmap); imshow(label2rgb(Lout))
クラスターの中心を主題地図のカラーマップとして使用します。k-means クラスタリングで検出された色の平均値をカラーマップとして直接使用すると、地表の分類に関する森林地帯、凍結地帯、乾燥地帯および水域の割り当てを視覚的により自然に理解できます。
imshow(double(Lout),cmap)