金子邦彦研究室プログラミング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
    curl -O https://www.kkaneko.jp/sample/test.bmp
    
  2. Octave の起動
    octave
    
  3. 確認のため,表示してみる。

    画像ファイルを変数 に読み込み表示

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

    rgb = imread("/tmp/lena_std.jpg");
    frgb = imread("/tmp/fruits.jpg");
    rgb3 = imread("/tmp/test.bmp");
    
    colormap(gray(256));
    imshow(rgb);
    imshow(rgb2);
    imshow(rgb3 * 255);
    
元画像 [image] [image] [image]

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

事前準備

http://www.eecs.berkeley.edu/Research/Projects/CS/vision/bsds/ で,「Util」をクリック. 「Lab2RGB.m」と 「RGB2Lab.m」をダウンロード.わかりやすいディレクトリに置いておく.

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

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

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

source "RGB2Lab.m"
source "Lab2RGB.m"
rgb = imread("/tmp/lena_std.jpg");
[lab(:,:,1), lab(:,:,2), lab(:,:,3)] = RGB2Lab(rgb);
flab = imsmooth(lab, "Gaussian", sigma = 6); 
frgb = Lab2RGB( flab(:,:,1), flab(:,:,2), flab(:,:,3) );
colormap(gray(256));
imshow(rgb2);

◆ 実行結果の例

[image] [image] [image]

種々の平滑化 (Isotropic Gaussian Smoothing)

事前準備

http://www.eecs.berkeley.edu/Research/Projects/CS/vision/bsds/ で,「Util」をクリック. 「Lab2RGB.m」と 「RGB2Lab.m」をダウンロード.わかりやすいディレクトリに置いておく.

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

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

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

source "RGB2Lab.m"
source "Lab2RGB.m"
rgb = imread("/tmp/lena_std.jpg");
[lab(:,:,1), lab(:,:,2), lab(:,:,3)] = RGB2Lab(rgb);
flab = imsmooth(lab, "Bilateral", sigma_d = 8, sigma_r = 20/255); 
frgb = Lab2RGB( flab(:,:,1), flab(:,:,2), flab(:,:,3) );
colormap(gray(256));
imshow(rgb2);

◆ 実行結果の例

[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 で動作確認済み.

source "RGB2Lab.m"
source "Lab2RGB.m"
rgb = imread("/tmp/lena_std.jpg");
[lab(:,:,1), lab(:,:,2), lab(:,:,3)] = RGB2Lab(rgb);
flab = imsmooth(lab, "Perona and Malik", 10, 0.25); 
frgb = Lab2RGB( flab(:,:,1), flab(:,:,2), flab(:,:,3) );
colormap(gray(256));
imshow(rgb2);

◆ 実行結果の例

[image] [image] [image]

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

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

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

source "RGB2Lab.m"
source "Lab2RGB.m"
rgb = imread("/tmp/lena_std.jpg");
[lab(:,:,1), lab(:,:,2), lab(:,:,3)] = RGB2Lab(rgb);
flab = imsmooth(lab, "Average", [10 10]); 
frgb = Lab2RGB( flab(:,:,1), flab(:,:,2), flab(:,:,3) );
colormap(gray(256));
imshow(rgb2);

◆ 実行結果の例

[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 で動作確認済み.

source "RGB2Lab.m"
source "Lab2RGB.m"
rgb = imread("/tmp/lena_std.jpg");
[lab(:,:,1), lab(:,:,2), lab(:,:,3)] = RGB2Lab(rgb);
flab = imsmooth(lab, "Disk", 8); 
frgb = Lab2RGB( flab(:,:,1), flab(:,:,2), flab(:,:,3) );
colormap(gray(256));
imshow(rgb2);

◆ 実行結果の例

[image] [image] [image]

Median フイルタによる平滑化 (Octave program for smooting using median filtering)

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

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

source "RGB2Lab.m"
source "Lab2RGB.m"
rgb = imread("/tmp/lena_std.jpg");
[lab(:,:,1), lab(:,:,2), lab(:,:,3)] = RGB2Lab(rgb);
flab = imsmooth(lab, "Median", [8 8]); 
frgb = Lab2RGB( flab(:,:,1), flab(:,:,2), flab(:,:,3) );
colormap(gray(256));
imshow(rgb2);

◆ 実行結果の例

[image] [image] [image]