ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

imseggeodesic

測地線距離ベースの色のセグメンテーションを使用したイメージの 2 または 3 領域へのセグメント化

構文

L = imseggeodesic(RGB,BW1,BW2)
L = imseggeodesic(RGB,BW1,BW2,BW3)
[L,P] = imseggeodesic(___)
[L,P] = imseggeodesic(___,Name,Value,...)

説明

L = imseggeodesic(RGB,BW1,BW2) は入力イメージ RGB (有効な RGB イメージでなければならない) をセグメント化し、セグメント化されたバイナリ イメージを返します。このとき、セグメントのラベルはラベル行列 L で指定されます。BW1BW2 は、"スクリブル" と呼ばれる、2 領域 (前景と背景) に応じた初期シード領域の位置を指定するバイナリ イメージです。imseggeodesicBW1BW2 に指定されたスクリブルを、セグメンテーションで使用する各領域の統計量の計算に代表サンプルとして使用します。BW1BW2で指定されるスクリブル (論理値 true の領域) はオーバーラップしないようにします。基礎となるアルゴリズムは、セグメンテーション用のスクリブルでマークされた領域に関して推定した統計量を使用します。スクリブルでマークするピクセルの数を大きくすると、領域の統計量をより正確に推定でき、一般的にセグメンテーションの精度がより高くなります。そのため、可能な限り多くのスクリブルを指定することをお勧めします。通常は、領域ごとに最小で数百個のピクセルをスクリブルとして指定します。

L = imseggeodesic(RGB,BW1,BW2,BW3) は、入力イメージ RGB をセグメント化し、3 つのセグメントをもつセグメント化されたイメージを返します (3 値セグメンテーション)。領域ラベルはラベル行列 Lで指定されます。BW1BW2 および BW3 は、3 つの領域の初期シード領域またはスクリブルの位置を指定するバイナリ イメージです。BW1BW2 および BW3 (論理値 true の領域) で指定されるスクリブルはオーバーラップしないようにします。

[L,P] = imseggeodesic(___) は、行列 P の各ラベルに各ピクセルが属する確率を返します。

[L,P] = imseggeodesic(___,Name,Value,...) は、セグメンテーションの特性を制御する名前と値のペアを使用してイメージをセグメント化します。パラメーター名には省略形を使用できます。

すべて折りたたむ

イメージをワークスペースに読み取って表示します。

RGB = imread('yellowlily.jpg');
imshow(RGB,'InitialMagnification',50)
hold on

前景オブジェクトの初期シード領域または "スクリブル" を [left_topR left_topC bottom_rightR bottom_rightC] の形式で指定します。

bbox1 = [700 350 820 775];
BW1 = false(size(RGB,1),size(RGB,2));
BW1(bbox1(1):bbox1(3),bbox1(2):bbox1(4)) = true;

背景オブジェクトの初期シード領域または "スクリブル" を指定します。

bbox2 = [1230 90 1420 1000];  
BW2 = false(size(RGB,1),size(RGB,2));
BW2(bbox2(1):bbox2(3),bbox2(2):bbox2(4)) = true;

シード領域を表示します。前景は赤、背景は青にします。

visboundaries(BW1,'Color','r');
visboundaries(BW2,'Color','b');

イメージをセグメント化します。

[L,P] = imseggeodesic(RGB,BW1,BW2);

結果を表示します。

figure
imshow(label2rgb(L),'InitialMagnification', 50)
title('Segmented image')

  
figure
imshow(P(:,:,1),'InitialMagnification', 50)
title('Probability that a pixel belongs to the foreground')

イメージをワークスペースに読み取って表示します。

RGB = imread('yellowlily.jpg'); 
imshow(RGB,'InitialMagnification', 50)
hold on

3 つの領域のスクリブルを作成します。スクリブルは、roipolyimfreehandimrectimpolyimellipse などのツールを使用して対話形式で指定できます。領域 1 は黄色の花です。領域 2 は緑色の葉です。領域 3 は背景です。

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;

シード領域を表示します。

visboundaries(BW1,'Color','r');
visboundaries(BW2,'Color','g');
visboundaries(BW3,'Color','b');

イメージをセグメント化します。

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

結果を表示します。

figure
imshow(label2rgb(L),'InitialMagnification', 50)
title('Segmented image with three regions')

  
figure
imshow(P(:,:,2),'InitialMagnification', 50)
title('Probability that a pixel belongs to region/label 2')

入力引数

すべて折りたたむ

セグメント化するイメージ。有効な RGB イメージとして指定します。imseggeodesic は入力 RGB イメージを YCbCr 色空間に変換してからセグメンテーションを実行します。

例: RGB = imread('peppers.png');

データ型: double | uint8 | uint16

スクリブル イメージ。論理行列として指定します。BW1 は行数と列数が入力イメージ RGB と同じでなければなりません。スクリブルを対話形式で指定するには、roipolyimfreehandimrectimpolyimellipse のいずれかを使用します。

例: bbox1 = [700 350 820 775]; BW1 = false(size(RGB,1),size(RGB,2)); BW1(bbox1(1):bbox1(3),bbox1(2):bbox1(4)) = true;

データ型: logical

スクリブル イメージ。論理行列として指定します。BW2 は行数と列数が入力イメージ RGB と同じでなければなりません。スクリブルを対話形式で指定するには、roipolyimfreehandimrectimpolyimellipse のいずれかを使用します。

例: bbox2 = [1230 90 1420 1000]; BW2 = false(size(RGB,1),size(RGB,2)); BW2(bbox2(1):bbox2(3),bbox2(2):bbox2(4)) = true;

データ型: logical

スクリブル イメージ。論理行列として指定します。BW3 は行数と列数が入力イメージ RGB と同じでなければなりません。スクリブルを対話形式で指定するには、roipolyimfreehandimrectimpolyimellipse のいずれかを使用します。

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

データ型: logical

名前/値のペアの引数

オプションの Name,Value 引数のペアをコンマ区切りで指定します。ここで、Name は引数名で、Value は対応する値です。Name は単一引用符 (' ') で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を任意の順番で指定できます。

例: [L,P] = imseggeodesic(RGB,BW1,BW2,BW3, 'AdaptiveChannelWeighting', true);

すべて折りたたむ

適応チャネル重み付けの使用。論理スカラーとして指定します。true の場合、imseggeodesic は、入力として指定されたスクリブルに基づき、セグメンテーションに有用な識別情報の保有量に応じてチャネルを重み付けします。false (既定の設定) の場合、imseggeodesic はすべてのチャネルを均等に重み付けします。

例: [L,P] = imseggeodesic(RGB,BW1,BW2,BW3, 'AdaptiveChannelWeighting', true);

データ型: logical

出力引数

すべて折りたたむ

ラベル行列。double 行列として返されます。この場合、要素は 0 以上の整数値です。0 のラベルが付いたピクセルは背景となり、1 のラベルが付いたピクセルによりセグメント化された領域が識別されます。3 値セグメンテーションでは、2 のラベルが付いたピクセルにより、もう 1 つのセグメント化された領域が識別されます。

ピクセルがラベル付き領域に属する確率。2 値セグメンテーションでは M x N x 2 の行列、3 値セグメンテーションでは M x N x 3 の行列として指定します。M と N は入力イメージの行数と列数です。P(i,j,k)(i,j) の位置にあるピクセルがラベル k に属する確率を指定します。Pdouble クラスになります。

ヒント

  • 2つ (または 3 つ) の領域のスクリブルは互いにオーバーラップしないようにします。各スクリブル行列 (BW1BW2 および BW3) は空にしないでください。すなわち、それぞれのスクリブルに論理値 true としてマークされるピクセルが少なくとも 1 つ (できればそれ以上) 存在しなければなりません。

アルゴリズム

imseggeodesic は、測地線距離ベースの色のセグメンテーション アルゴリズムを使用します ([1] と同様)。

参照

[1] A. Protiere and G. Sapiro, Interactive Image Segmentation via Adaptive Weighted Distances, IEEE Transactions on Image Processing, Volume 16, Issue 4, 2007.

R2015a で導入

この情報は役に立ちましたか?