金子邦彦研究室プログラミング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
    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");
    rgb2 = imread("/tmp/fruits.jpg");
    rgb3 = imread("/tmp/test.bmp");
    
    colormap(gray(256));
    imshow(rgb);
    imshow(rgb2);
    imshow(rgb3 * 255);
    
元画像 [image] [image] [image]

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

Octave でのカラー画像の輝度平坦化

各画素の RGB 値を輝度で割る

カラー画像の輝度平坦化を行う Octave プログラム例


rgb = imread("/tmp/lena_std.jpg");
mono = rgb2gray( rgb );
r(:,:,1) = ( double(rgb(:,:,1)) + 0.00001 ) ./ ( double(mono) + 0.00001 );
r(:,:,2) = ( double(rgb(:,:,2)) + 0.00001 ) ./ ( double(mono) + 0.00001 );
r(:,:,3) = ( double(rgb(:,:,3)) + 0.00001 ) ./ ( double(mono) + 0.00001 );
colormap(gray(256));
imshow(r); 

◆ 実行結果の例

[image] [image] [image]

Octave でのカラー画像のヒストグラム平坦化

カラー画像のヒストグラム平坦化を行う Octave プログラム例


rgb = imread("/tmp/lena_std.jpg");
mono = rgb2gray( rgb );
MA = double( max(max(mono)) );
eq = histeq( double(mono)/MA );
r(:,:,1) = ( double(rgb(:,:,1)) + 0.00001 ) .* eq ./ ( double(mono) + 0.00001 );
r(:,:,2) = ( double(rgb(:,:,2)) + 0.00001 ) .* eq ./ ( double(mono) + 0.00001 );
r(:,:,3) = ( double(rgb(:,:,3)) + 0.00001 ) .* eq ./ ( double(mono) + 0.00001 );
colormap(gray(256));
imshow(r); 

これは,各画素の RGB 値を輝度で割ったのち,ヒストグラム平坦化の結果得られる濃淡画像の画素値をかけるもの.

照明条件の緩和(照明条件が変化し輝度が変わるが,照明条件の変化前の輝度の大小関係が、照明条件の変化後も一致するような場合)

◆ 実行結果の例

[image] [image] [image]