wi Octave での画像処理の例(二値画像を入力とする画像処理)

Octave での画像処理の例(二値画像を入力とする画像処理)

Octave での画像処理の例(二値画像を入力とする画像処理)の例を,プログラムと図解で説明する.

* 濃淡画像の場合は,別のページで説明している.
元画像
濃淡画像
二値画像
距離画像 bwdist
4隣接による境界抽出 bwborder
8隣接による境界抽出 bwborder( ,,,, 8)
接続領域の抽出 bwselect
白領域の膨張 dilate
白領域の収縮 erode
open
close
tophat
bothat
bridge
clean
diag
fill
hbreak
majority
remove
shrink
skel
skel-pratt
spur
thicken
thin

前準備

Octave のインストール

必見 Web ページ: http://www.csse.uwa.edu.au/~pk/Research/MatlabFns/

必見 Web ページ: http://www.eecs.berkeley.edu/Research/Projects/CS/vision/bsds/

* プロンプトを変えたいときは,次のように操作する.

PS1('> ')

* Octave のインストールによっては,Octave の起動時に毎回次の操作を行う必要があるかもしれない

pkg load image

この Web ページに登場する画像データの種類

説明に使う二値画像  

* Octave 3.2.4, Ubuntu の場合の実行例

fruits.jpg はOpenCV に同封のサンプル画像

curl -O https://www.kkaneko.jp/sample/lena_std.jpg
octave

[rgb, immap, alpha] = imread("/tmp/lena_std.jpg");
mono = rgb2gray( rgb );
bw = im2bw( mono, graythresh( mono ) );

[rgb2, immap2, alpha2] = imread("/usr/OpenCV-2.0.0/samples/c/fruits.jps");
mono2 = rgb2gray( rgb2 );
bw2 = im2bw( mono2, graythresh( mono2 ) );

map = gray(256);
colormap(map);
imshow(bw, [0 1]);
imshow(bw2, [0 1]);

* Windows の場合の実行例

Windows では「imread("r:/lena_std.jpg");」のようになる. ImageMagick は使わない.

[rgb, immap, alpha] = imread("r:/lena_std.jpg");
mono = rgb2gray( rgb );
bw = im2bw(mono, graythresh( mono ) );
map = gray(256);
colormap(map);
imshow(bw, [0 1]);

* Octave バージョン 3.2.4 で「warning: isstr is obsolete and will be removed from a future version of Octave, please use ischar instead」というエラーメッセージが出て,結局 plot での描画がうまくできないことがあります.

謝辞:http://www.tatsuromatsuoka.com/octave/jpn/OctaveWinMemo.html で公開されたいた「Octave for windows メモ」を参考にしました.ありがとうございます. プロットの前に,次の操作を行うことで,このエラーを回避できることがあります.


pkg unload oct2mat

double の配列を出力するもの

二値画像を出力するもの

4 隣接,8 隣接,接続領域

  1. 二値画像の 4 隣接による境界抽出 : bwborder

    4隣接画素のうち少なくとも1つが黒ならば境界であると判定する.

    imshow( bwborder( bw ) );
    
  2. 二値画像の 8 隣接による境界抽出 : bwperim( ..., 8)
    imshow( bwperim( bw, 8 ) );
    
  3. 接続領域 (connected region) の抽出 : bwselect

    座標値 i, j を指定し,(i, j) 画素と接続している領域を抽出する.

    imshow( bwselect( bw, 400, 400 ) );
    
  4. 二値画像の構造要素とのマッチング : bwhitmiss
  5. 二値画像の画素上 (on) にある領域の推定 : bwarea
    imshow( bwarea( bw ) );
    

二値画像のモルフォロジカル演算 : bwmorph

関連する外部ページ】: http://homepages.inf.ed.ac.uk/rbf/HIPR2/morops.htm

  1. "dilate" : dilation operation

    白領域の膨張

    imshow( bwmorph( bw, "dilate", 6 ) );
    
  2. "erode" : erosion operation

    白領域の収縮 (dilation の逆)

    imshow( bwmorph( bw, "erode", 6 );
    
  3. "open" : opening operation

    erosion の後 dilation.小さな白領域が除去される.Octave では,パラメータ数は 2 個である ( 3 個は NG である ) ことに注意

    imshow( bwmorph( bw, "open" );
    
  4. "close" : close operation

    dilation の後 erosion.小さな黒領域が除去される.Octave では,opening と同じく,パラメータ数は 2 個である ( 3 個は NG である ) ことに注意

    imshow( bwmorph( bw, "close" );
    
  5. "tophat" : tophat operation

    元画像からの opening 結果の減算(つまり,opening により除去された画像)

    imshow( bwmorph( bw, "tophat" );
    
  6. "bothat" : bottom hat operation

    closing 結果からの元画像の減算(つまり,closing により増えた画素)

    imshow( bwmorph( bw, "bothat" );
    
  7. "bridge" : bridge operation

    ブリッジ.隣接画素 (neighbours) のうち接続していない 2つ以上の画素が「1」のとき,画素値を「0」にセットする

    imshow( bwmorph( bw, "bridge" );
    
  8. "clean" : clean operation

    8隣接画素 (eight-connected neighbours) の全てが「0」のとき,画素値を「0」にセットする.孤立した「1」の画素が除去される.

    imshow( bwmorph( bw, "clean" );
    
  9. "diag" : diagonal fill operation

    背景の 8隣接性を除去するように,画素値を「1」にセットする.

    imshow( bwmorph( bw, "diag" );
    
  10. "fill" : integior fill operation

    4隣接画素 (four-connected neighbours) の全てが「1」のとき,画素値を「1」にセットする.孤立した「0」の画素が「1」になる.

    imshow( bwmorph( bw, "fill" );
    
  11. "hbreak" : H-break operation

    H-connected である画素を「0」にセットする.

  12. "majority" : majority black operation

    3x3 ウインドウ内の 5 個以上の画素が「1」であるとき,画素値を「1」にセットする

  13. "remove" : iterior pixel remove operation

    4隣接画素 (four-connected neighbours) の全てが「1」のとき,画素値を「0」にセットする.つまり,4隣接画素のうち少なくとも1つが黒ならば境界であると判定する.

    * bwborder と同じ.

  14. "shrink" : shrink operation

    細線化

    imshow( bwmorph( bw, "shrink", 6 ) );
    
  15. "skel" : skeltonization

    「median axis skeleton」によるスケルトン化

    imshow( bwmorph( bw, "skel", 6 ) );
    
  16. "skel-pratt" : skeltonization

    William K. Pratt の方法によるスケルトン化

    imshow( bwmorph( bw, "skel-pratt", 6 ) );
    
  17. "spur" : remove spur operation

    隣接画素の中に eight-connected であるような画素が 1 つだけあるとき,画素値を「0」にセットする.

    imshow( bwmorph( bw, "spur", 6 ) );
    
  18. "thicken" : thickening operation

    背景画素の細線化

    imshow( bwmorph( bw, "thicken", 6 ) );
    
  19. "thin" : thinning operation

    細線化

    imshow( bwmorph( bw, "thin", 6 ) );