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

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

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

はじめに

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

登場人物

博識フクロウのフクさん

指差しフクロウ

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

フクさん
フクさん

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

Juliaコード

フクさん
フクさん

Juliaコードは以下になる。

using Images

# 入力画像の読み込み
img = channelview(load("dog.jpg"));

r = img[1,:,:];
g = img[2,:,:];
b = img[3,:,:];

# RGB平均グレースケール
gray_ave = r/3 + g/3 + b/3;
# グレースケール画像の書き込み
save("dog_gray_ave_j.jpg", colorview(Gray, gray_ave));

# SDTVグレースケール
gray_sdtv = 0.2990 * r + 0.5870 * g + 0.1140 * b
# グレースケール画像の書き込み
save("dog_gray_sdtv_j.jpg", colorview(Gray, gray_sdtv))

処理結果

フクさん
フクさん

処理結果は以下となる。

dog_gray_ave_j.jpg(RBG平均)

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

dog_gray_sdtv_j.jpg(SDTV)

dog_gray_sdtv、犬と自転車、SDTV、Julia

考察

太郎くん
太郎くん

流れとしては一緒なんだろうけど、
Juliaはデータ構造が他の環境と違うんだよねー。

フクさん
フクさん

そうだね。
他の環境は配列の末端でチャンネル情報を分けているが、
Juliaの場合は、天辺で分けてる。

太郎くん
太郎くん

あと、channelview、colorviewを挟まないと、2次元配列的な制御ができないんだっけか。

太郎くん
太郎くん

ちょっと気になったのは、MATLABの時のようなfixとかは無いんだけど、丸めの仕方は一緒なのかな?

フクさん
フクさん

Juliaの場合、256階調の最小を0、最大を255とした値じゃなくて、
最小を0.0、最大を1.0とした正規化した値で管理されてる。

太郎くん
太郎くん

え゛?
全然違うじゃん!

フクさん
フクさん

というわけで、丸め云々をここで意識してもあまり意味がないんだよね。
save関数の中でどうしてるかを調べる必要があるが、そこは調べ切れていない。
よって、他の環境と比べて多少の誤差が出るのはやむを無いとするしかないだろう。

太郎くん
太郎くん

これはとんでもない差が出てきたぞ・・・。

フクさん
フクさん

まぁ、具体的な数値を直接見ることはほぼ無いから、性質として認識しておくくらいで良いだろう。

まとめ

フクさん
フクさん

まとめだよ。

  • JuliaでRGB平均とSDTVのグレースケール化実施。
  • 基本的な流れは他の環境と一緒。
    • データ構造の違いに気を付ける必要がある。
    • さらに各チャンネル情報も0~1の正規化されたものになってる点にも注意。

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

コメント

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