MATLAB,Python,Scilab,Julia比較 第3章 その13【グレースケール⑤】

MATLAB,Python,Scilab,Julia比較 第3章 その13【グレースケール⑤】 数値計算
MATLAB,Python,Scilab,Julia比較 第3章 その13【グレースケール⑤】

バックナンバーはこちら。
https://www.simulationroom999.com/blog/compare-matlabpythonscilabjulia3-backnumber/

はじめに

グレースケール化処理を各ツール、各言語で実施。
今回はScilabで実施する。

登場人物

博識フクロウのフクさん

指差しフクロウ

イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1

エンジニア歴8年の太郎くん

技術者太郎

イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1

使用する画像

太郎くん
太郎くん

まずは、使用する画像を再掲。

犬と自転車

ファイル名はdog.jpgとする。

フクさん
フクさん

今回は、Scilabによるグレースケール化の実施

Scilabコード

フクさん
フクさん

Scilabコードは以下になる。

function [] = grayscale_test()
    // 入力画像の読み込み
    img = imread('dog.jpg');
    
    r = img(:,:,1);
    g = img(:,:,2);
    b = img(:,:,3);
    
    // RGB平均グレースケール
    gray_ave = uint8([r/3 + g/3 + b/3 ]);
    // グレースケール画像の書き込み
    imwrite(gray_ave, 'dog_gray_ave.jpg');
    
    // SDTVグレースケール
    gray_sdtv = uint8([0.2990 * double(r) ...
                + 0.5870 * double(g) + 0.1140 * double(b) ]);
    // グレースケール画像の書き込み
    imwrite(gray_sdtv, 'dog_gray_sdtv.jpg');
endfunction

処理結果

フクさん
フクさん

そして処理結果

dog_gray_ave.jpg(RBG平均)

dog_gray_ave、犬と自転車、RGB平均、Scilab

dog_gray_sdtv.jpg(SDTV)

dog_gray_sdtv、犬と自転車、SDTV、Scilab

考察

太郎くん
太郎くん

まぁ、コードとしてはMATLABに似た感じかな。

太郎くん
太郎くん

ただ、MATLABの時のようなfixによる0方向丸めってのは無いね。

フクさん
フクさん

Scilabの場合、デフォルトで0方向の丸めになる。

太郎くん
太郎くん

あと、SDTVの方の処理で各チャンネルのピクセルの値をdoubleでキャストしてる?

フクさん
フクさん

これもScilabの性質だな。
uint8でキャストしようとすると、内部の演算もuint8ベースになって、小数点以下の演算が機能しなくなる。
これをdoubleによるキャストによって、小数点以下の計算を促してるという感じだ。

太郎くん
太郎くん

うーん、気を利かして、そういう仕様になってるのだろうけど、暗黙的にやられちゃうと演算がおかしくなっちゃうのかー。

フクさん
フクさん

この点は今後も注意が必要だな。

まとめ

フクさん
フクさん

まとめだよ。

  • ScilabでRGB平均とSDTVのグレースケール化実施。
  • 基本的にはMATLABと似た感じにはなる。
    • デフォルトで0方向へ丸め。
    • 整数型でキャストすると内部の変数も演算前に整数型に変わってしまう。
      • これを抑制するためにdoubleへキャストなどを使用する。

バックナンバーはこちら。

コメント

タイトルとURLをコピーしました