金子邦彦研究室プログラミングOctave の活用Octave で濃淡画像の平滑化(濃淡画像を入力、出力とする)

Octave で濃淡画像の平滑化(濃淡画像を入力、出力とする)

Octave での濃淡画像の平滑化を扱います.

Octave の imsmooth パッケージを使う.詳しくは https://octave.sourceforge.io/image/function/imsmooth.html

◆ この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]

ガウシアン平滑化 (Isotropic Gaussian Smoothing)

ガウシアン平滑化を行う Octave プログラム例 (Octave program for Isotropic Gaussian Smoothing)

「"Bilateral"」は ガウシアン平滑化 「sigma = 6)」の部分は調整してください

※ Octave 3.6.1, Ubuntu 11.10 で動作確認済み.

rgb = imread("/tmp/lena_std.jpg");
mono = rgb2gray( rgb );
r = imsmooth(mono, "Gaussian", sigma = 6); 
colormap(gray(256));
imshow(r);

◆ 実行結果の例

[image] [image] [image] [image]

種々の平滑化 (Smoothing)

Bilateral 平滑化を行う Octave プログラム例 (Octave program for Gaussian Bilateral filtering)

「"Bilateral"」は Gaussian Bilateral filtering 「sigma = 6)」の部分は調整してください

※ Octave 3.6.1, Ubuntu 11.10 で動作確認済み.

rgb = imread("/tmp/lena_std.jpg");
mono = rgb2gray( rgb );
r = imsmooth(mono, "Bilateral", sigma_d = 8, sigma_r = 20/255); 
colormap(gray(256));
imshow(r);

◆ 実行結果の例

[image] [image] [image] [image]

Perona, Malik らの nonlinear isotropic diffusion 平滑化を行う Octave プログラム例 (Octave program for Perona and Malik's smoothing using nonlinear isotropic diffusion)

「"Perona and Malik"」は Perona, Malik らの nonlinear isotropic diffusion 平滑化 「10」, 「0.25」の部分は調整してください

※ Octave 3.6.1, Ubuntu 11.10 で動作確認済み.

rgb = imread("/tmp/lena_std.jpg");
mono = rgb2gray( rgb );
r = imsmooth(mono, "Perona and Malik", 10, 0.25); 
colormap(gray(256));
imshow(r);

◆ 実行結果の例

[image] [image] [image] [image]

Rectangular averaging linear フィルタによる平滑化を行う Octave プログラム例 (Octave program for smoothing using rectangular averaging linear filter)

「"Average"」は Rectangular averaging linear フィルタによる平滑化 「[6, 6]」の部分は調整してください

※ Octave 3.6.1, Ubuntu 11.10 で動作確認済み.

rgb = imread("/tmp/lena_std.jpg");
mono = rgb2gray( rgb );
r = imsmooth(mono, "Average", [6, 6]); 
colormap(gray(256));
imshow(r);

◆ 実行結果の例

[image] [image] [image] [image]

Cirtular averaging linear フィルタによる平滑化を行う Octave プログラム例 (Octave program for smoothing using rectangular circular linear filter)

「"Disk"」は Circular averaging linear フィルタによる平滑化 「8」の部分は調整してください

※ Octave 3.6.1, Ubuntu 11.10 で動作確認済み.

rgb = imread("/tmp/lena_std.jpg");
mono = rgb2gray( rgb );
r =  imsmooth(mono, "Disk", 8); 
colormap(gray(256));
imshow(r);

◆ 実行結果の例

[image] [image] [image] [image]

Median フイルタによる平滑化を行う Octave プログラム例 (Octave program for smooting using median filtering)

「"Median"」は Median フイルタによる平滑化. 「[8, 8]」の部分は調整してください

※ Octave 3.6.1, Ubuntu 11.10 で動作確認済み.

rgb = imread("/tmp/lena_std.jpg");
mono = rgb2gray( rgb );
r = imsmooth(mono, "Median", [8, 8]); 
colormap(gray(256));
imshow(r);

◆ 実行結果の例

[image] [image] [image] [image]