MATLAB、Python、Scilab、Julia比較ページはこちら
https://www.simulationroom999.com/blog/comparison-of-matlab-python-scilab/
はじめに
の、
MATLAB,Python,Scilab,Julia比較 第3章 その14【グレースケール⑥】
を書き直したもの。
グレースケール化処理を各ツール、各言語で実施。
今回はJuliaで実施する。
使用する画像
まずは、使用する画像を再掲。
ファイル名は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_sdtv_j.jpg(SDTV)
考察
処理の流れとしては一緒だが、
Juliaはデータ構造が他の環境と異なる。
他の環境は配列の末端でチャンネル情報を分けているが、
Juliaの場合は、天辺で分けてる。
さらに、channelview、colorviewを挟まないと、2次元配列的な制御ができない。
もう一点さらに大きな違いがある。
Juliaの場合、256階調の最小を0、最大を255とした値じゃなくて、
最小を0.0、最大を1.0とした正規化した値で管理されてる。
よって、他の環境の時のような丸め関連の話をここで出してもあまり意味はない。
実際にはsave関数の中でどうしてるかを調べる必要があるが、そこは調べ切れていない。
よって、他の環境と比べて多少の誤差が出るのはやむを無いとするしかないだろう。
具体的な数値を直接見ることはほぼ無いから、性質として認識しておくくらいで良いだろう。
まとめ
- JuliaでRGB平均とSDTVのグレースケール化実施。
- 基本的な流れは他の環境と一緒。
- データ構造の違いに気を付ける必要がある。
- さらに各チャンネル情報も0~1の正規化されたものになってる点にも注意。
MATLAB、Python、Scilab、Julia比較ページはこちら
コメント