MATLAB、Python、Scilab、Julia比較ページはこちら
https://www.simulationroom999.com/blog/comparison-of-matlab-python-scilab/
はじめに
の、
MATLAB,Python,Scilab,Julia比較 第3章 その3【画像操作②】
を書き直したもの。
各ツール、各言語で画像の読み込み、処理、保存の基本的な記載の仕方を確認していく。
今回はMATLAB。
使用する画像再掲
扱う画像とか、実施する処理とかは前回確認したので、
まずはMATLABから実際のプログラムを確認していく。
まずは、使用する画像を再掲する。
ファイル名はdog.jpgとする。
画像読み込み
まずは画像の読み込み。
使用する関数はimread。
こういう呼び出し方になる。
>> im = imread('dog.jpg');
戻り値に画像の情報が入る。
画像の縦横のピクセル数と同じ形状で3次元配列としてピクセル単位の情報として保持されてる。
ちなみに1ピクセルは256階調を前提にしているので、8bit長変数として格納される。
MATLABの場合、uint8って型になる。
そして、それらがRGBの3チャンネルがある。
よって、今回の場合の配列の構造は\(576\times768\times3\)になる。
画像の形状は、末端のRGBの情報が埋まった1次元を除外した2次元配列で維持されてると思えばOK。
画像表示
次は画像の表示。
imageって関数で表示できる。
引数は先ほどのimreadの戻り値として取得したim。
>> image(im);
plotのウィンドウと同じ感じで表示される。
画像処理
そして、赤の成分だけ抽出して、それを表示してみる。
>> im(:,:,(2:3)) = 0; % G(2番目)、B(3番目)の成分を0にする
>> image(im);
当然ではあるが、赤成分だけの画像になる。
im(:,:,(2:3))がやや特殊な書き方をしているように見えるが、
2:3は2から3のstepが1の等差数列を示している。
今回の2:3の場合だと
[2 3]
と同義。
かりに1:5とした場合は、
[1 2 3 4 5]
と同義になる。
そして、そのまま左右反転してみる。
>> im = im(:,end:-1:1,:);
>> image(im);
end:-1:1が特殊な書き方に見えるかもしれない。
endが終端を示しており、
終端からstep -1で先頭を目指すような等差数列になる。
[1 2 3 4 5]
に対して、実施すると以下になる。
[5 4 3 2 1]
このような配列操作の基本は身に着けておいた方がよいだろう。
画像書き出し
最後に画像の書き出し。
>> imwrite(im,'dog2.jpg');
加工したimをdog2.jpgってファイル名で保存してるだけである。
縦横のサイズは、imの配列の構造に依存して決定される。
まとめ
- MATLABで画像処理。
- 読み込みはimread。
- 画像の構成を維持した2次元配列に、RGBの3チャンネルがぶら下がる。
- 結果として3次元配列になる。
- 画像の構成を維持した2次元配列に、RGBの3チャンネルがぶら下がる。
- 画像の加工は配列操作を駆使する。
- 配列操作の基本を身に着けた方がお得。
MATLAB、Python、Scilab、Julia比較ページはこちら
コメント