主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

L * a * b *色空間を使った色ベースのセグメンテーション

この例ではL * a * b *色空間を解析することで,布地内の異なる色を識別する方法を示します。布地のイメージは,图像采集工具箱™を使って収集されたものです。

手順1:イメージの取得

fabric.pngイメージを読み取ります。これはカラフルな布地のイメージです。fabric.pngを使用する代わりに,图像采集工具箱の以下の関数を使用してイメージを取得することもできます。

%访问一个附在Pulnix TMC-9700相机上的matrix (R)帧抓取器,并且%使用NTSC格式获取数据。%vidobj = videoinput( '的Matrox',1 'M_NTSC_RGB');打开实时预览窗口。把相机对准一块彩色的织物。%预览(vidobj);%捕获一帧数据。%的织物= getsnapshot(vidobj);% imwrite(织物、“fabric.png”、“png”);%删除和清除关联的变量。%删除(vidobj)%清楚vidobj;织物= imread ('fabric.png');imshow(织物)标题(“布”

手順2:各領域のL * a * b *色空間におけるサンプル色の計算

イメージ内には6つの主な色があります。背景色は赤,绿,紫,黄,およびマゼンタです。これらの色を视覚的に简単に区别できることに注目してください.L * A * B *色空间(CIELABまたはCIE的L * a * b *表)を使用すると,このような视覚的差异を定量化できます。

L * a * b *色空間はCIE XYZ三刺激値から導出されます。L * a * b *空間は,輝度的L *または明度レイヤー,赤-緑軸方向における色の位置を示す色度レイヤー‘*’,および青——黄軸方向における色の位置を示す色度レイヤー的b *から構成されます。

色ごとに小さなサンプル領域を選択し,“a * b *”空間における各サンプル領域の平均の色を計算する方法をとります。これらの色マーカーを使用して,各ピクセルを分類します。

この例を簡単にするために,垫ファイルに保存されている領域座標を読み込みます。

负载regioncoordinates;nColors = 6;sample_regions = false([size(fabric,1) size(fabric,2) nColors]);count = 1:nColors sample_regions(:,:,count) = roipoly(fabric,region_coordinates(:,1,count),...region_coordinates (:, 2));结束imshow (sample_regions(:: 2))标题(“红色样本区域”

rgb2labを使用して,布地のRGBイメージをL * a * b *イメージに変換します。

lab_fabric = rgb2lab(织物);

roipolyで抽出した領域ごとに,‘*’および的b *の平均値を計算します。これらの値は,“a * b *”空間の色マーカーとして使用されます。

一个= lab_fabric (:: 2);b = lab_fabric (:: 3);color_markers = 0 ([nColors, 2]);count = 1:nColors color_markers(count,1) = mean2(a(sample_regions(:,:,count)));color_markers(统计,2)=非常刻薄的(b (sample_regions (:,:,)));结束

たとえば 'A * B *' 空间での赤のサンプル领域の平均色は以下のようになります。

流(“[% 0.3 f, % 0.3 f] \ n”, color_markers (2, 1), color_markers (2, 2));
[69.828, 20.106]

手順3:最近傍ルールを使用した各ピクセルの分類

ここまでで,各色マーカーに‘*’および的b *値が設定されました。lab_fabricイメージ内の各ピクセルを分類するには,ピクセルと各色マーカーの間のユークリッド距離を計算します。最短距離は,ピクセルがその色マーカーに最も厳密に一致することを意味します。たとえば,ピクセルと赤の色マーカー間の距離が最小である場合,ピクセルは赤のピクセルとラベル付されます。

色ラベル(0 =背景,1 =赤,2 =緑,3 =紫,4 =マゼンタ,5 =黄)を含んでいる配列を作成します。

color_labels = 0:NCOLORS-1;

最近傍分类で使用される行列を初期化します。

一个=双(a);b =双(b);距离= 0 ([size(a), nColors]);

分類を実行します。

count = 1:nColors distance(:,:,count) = ((a - color_markers(count,1)))。^ 2 +...(二 -  color_markers(计数,2))^ 2)^ 0.5;。结束[〜,标号] = MIN(距离,[],3);标记= color_labels(标签);清除距离

手順4:最近傍分類の結果の表示

ラベル行列には,布地のイメージの各ピクセルの色ラベルが含まれています。ラベル行列を使用して,元の布地のイメージのオブジェクトを色分けします。

Rgb_label = repmat(label,[1 1 3]);segmented_images = zero ([size(fabric), nColors],“uint8”);数= 1:NCOLORS颜色=织物;颜色(rgb_label〜= color_labels(计数))= 0;segmented_images(:,:,:,计数)=颜色;结束

5つのセグメント化された色をモンタージュとして表示します。また,イメージ内で色として分類されていない背景ピクセルを表示します。

蒙太奇({segmented_images (:,:,: 2), segmented_images (:,:,: 3)...segmented_images (::: 4), segmented_images (:,:,: 5)...segmented_images (::,:, 6), segmented_images (:,:,: 1)});标题(红色、绿色、紫色、品红、黄色物体和背景的蒙太奇

手順5:ラベルの付いた色の‘*’値および的b *値の表示

最近傍分類により,ピクセルの‘*’値および的b *値が異なる色に分類,プロットされることによって,さまざまな色の母集団が非常にうまく分類されたことがわかります。表示のために,各点にその色ラベルを付けます。

紫色= [119/255 73/255 152/255];plot_labels = {“k”“r”‘g’、紫色、'M'“y”};数字nColors plot(a(label==count-1),b(label==count-1)),“。”“MarkerEdgeColor”...plot_labels {},“MarkerFaceColor”,plot_labels {计数});抓住结束标题(“a*b*”空间中分割像素的散点图”);包含('' 'A *'”值);ylabel (“b *”的价值观);