金子邦彦研究室プログラミングOctave の活用Octave で濃淡画像を扱う種々の処理

Octave で濃淡画像を扱う種々の処理

Octave で濃淡画像の二値化、エッジ抽出を説明する.

◆ このWeb ページで行うこと

Octave での画像ファイルの入出力については,別のページで説明している.

前準備

Octave のインストール

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

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

説明に使う濃淡画像  

この Web ページの手順をそのままなぞる場合には, 下記の手順で画像ファイルのダウンロードと確認を行う.

  1. 画像ファイルのダウンロード

    ◆ 使用する画像ファイルのダウンロード手順例

    cd /tmp
    curl -O https://www.kkaneko.jp/sample/lena_std.jpg
    curl -L https://github.com/opencv/opencv/blob/master/samples/data/fruits.jpg?raw=true -o fruits.jpg
    
  2. (オプション) MatlabFns を入手し、分かりやすいディレクトリ(例えば /usr/local/MatlabFns)に展開
  3. (オプション) MatlabFns を使うように .octaverc を設定する

    ◆ 設定例 

    setenv("CFLAGS", "-D__STDC_CONSTANT_MACROS");
    setenv("CXXFLAGS", "-D__STDC_CONSTANT_MACROS");
    addpath ("/usr/local/MatlabFns/FingerPrints");
    addpath ("/usr/local/MatlabFns/FrequencyFilt");
    addpath ("/usr/local/MatlabFns/GreyTrans");
    addpath ("/usr/local/MatlabFns/LineSegments");
    addpath ("/usr/local/MatlabFns/Match");
    addpath ("/usr/local/MatlabFns/Misc");
    addpath ("/usr/local/MatlabFns/PhaseCongruency");
    addpath ("/usr/local/MatlabFns/Projective");
    addpath ("/usr/local/MatlabFns/Robust");
    addpath ("/usr/local/MatlabFns/Rotations");
    addpath ("/usr/local/MatlabFns/Shapelet");
    addpath ("/usr/local/MatlabFns/Spatial");
    addpath ("/usr/local/share/octave/mex");
    
  4. Octave の起動
    octave
    
  5. 確認のため,表示してみる。

    MatlabFns を使わないときは mono3, mono4 を含む行(下記では太字)を無視すること

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

    rgb = imread("/tmp/lena_std.jpg");
    mono = rgb2gray( rgb );
    
    rgb2 = imread("/tmp/fruits.jpg");
    mono2 = rgb2gray( rgb2 );
    
    mono3 = uint8( step2line(100, -1) * 255 );
    mono4 = uint8( starsine( sze = 256, wavelength = 8, nScales = 1, ampExponent = 3 ) * 255 );
    
    colormap(gray(256));
    imshow(mono);
    imshow(mono2);
    imshow(mono3, [0 1]);
    imshow(mono4, [0 1]);
    
元画像 [image] [image]
濃淡画像 [image] [image] [image] [image]

◆ Ubuntu 11.10 での実行結果例

[image]

[image]

Octave で濃淡画像のヒストグラムとヒストグラム平坦化

種々の処理


以下、書きかけ

Octave の次の関数を使う.

ガウシアンフィルタの生成

  1. ガウシアンフィルタの生成
    s = 5;
    f = fspecial("gaussian", s * 5, s);
    surfl( f );
    

    [image]

    [image]
  2. ガウシアンフィルタの適用(値を正規化して表示)
    mono2 = imfilter(double(mono), f, "same");
    imshow( mono2, [min(min(mono2)) max(max(mono2))])
    

    ※ colormap がおかしいときは,「map = gray(256); colormap(map);」を実行してください.

    [image]

to be written. log, unsharp, motion, sobel, kirsch,

[image]

[image]

[image]

[image]

プログラムのソースコード(書きかけ)

rgb = imread("/tmp/lena_std.jpg");
mono = rgb2gray( rgb );
colormap(gray(256)); 

# ガウシアンフィルタ

s = 5;
f = fspecial("gaussian", s * 5, s);
surfl( f );

gray2 = filter2( f, mono, "same" );
colormap(map);

imagesc( mono );
w = input("please press Enter to proceed");

imagesc( gray2 );
w = input("please press Enter to proceed");

[Dx, Dy] = gradient(double(mono));
imagesc( Dx );
w = input("please press Enter to proceed");

imagesc( Dy );
w = input("please press Enter to proceed");

[Dx, Dy] = gradient(double(gray2));
imagesc( Dx );
w = input("please press Enter to proceed");

imagesc( Dy );
w = input("please press Enter to proceed");