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

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

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

はじめに

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

登場人物

博識フクロウのフクさん

指差しフクロウ

イラスト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とする。

MATLABコード

フクさん
フクさん

MATLABコードを書きだしてみた。

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

処理結果

フクさん
フクさん

先ほどのMATLABコードの処理結果

dog_gray_ave.jpg(RGB平均)

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

dog_gray_sdtv.jpg(SDTV)

dog_gray_sdtv、犬と自転車、SDTV、MATLAB

考察

太郎くん
太郎くん

RGB平均とSDTVの両方のグレースケールを出力してるんだね。

フクさん
フクさん

まぁ、元画像のRGBに対しての係数が違うだけでグレースケール化の処理自体は変わらないからね。

太郎くん
太郎くん

確かに、元画像に係数をかけて足してるだけの処理だね。

太郎くん
太郎くん

しかし、uint8とfixの役割がよくわらんな。

フクさん
フクさん

まずuint8だが、これはキャストだ。
MATLABの画像データの1チャンネル1ピクセルが8bit長なのでuint8にキャストしている。
そして、fixだが、これは0方向への丸めだ。

太郎くん
太郎くん

0方向への丸め?

フクさん
フクさん

MATLABの演算結果は基本的に64bit浮動小数点になる。
これの小数点を切り捨ててる処理だな。
まぁuint8のキャストだけでも小数点以下は四捨五入されるから、それを採用しても良かったが、
他の環境と演算結果を可能な限り合わせるために0方向への丸めにしてある。

太郎くん
太郎くん

なるほど。
演算結果が64bit浮動小数点になる、整数型へのキャストだと小数点以下は四捨五入されるってのがMATLABの特性ってわけか。
それに対して明示的に異なる制御しているのが、uint8とfixってことか。

フクさん
フクさん

そうそう。

まとめ

フクさん
フクさん

まとめだよ。

  • MATLABでRGB平均とSDTVのグレースケール化実施。
  • 画像データの型の都合でuint8のキャストが必要。
  • unit8キャスト時に小数点以下が自動で四捨五入される。
    • 小数点以下切り捨て(0方向への丸め)をしたい場合はfix関数を使用する。

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

コメント

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