julia - BMP の読み書き ― 2015年06月05日 17:36
Images のパッケージが大幅に変更されました。
imread(), imwrite() は、それぞれ load(), save() に変わりました。
機会があれば対応したものを執筆しますが、混乱を避けるため、とりあえず消しておきます。(2015/12/19)
画像処理をするために、BMPファイルの読み書きをやってみた。
Pkg.add("Images") でパッケージを追加。
入出力には ImageMagick を使用しているらしい。
以下、ちょっとしたコード。
RGB Image 構造体
ちなみに、data は省略できて、img1[100,100].r でも同じ。
ただし、img1[:,:].r のように範囲指定はできない。
構造体の properties は、img1["IMcs"] のように指定する。
RGB それぞれを行列として扱いたい場合には、red(), green(), blue() という関数で分離できる
imread で読み込んだ場合、この行列は、各画素 0 から 1 の値となる。
255 を掛けると元の BMP のピクセル値に一致する。
Image 構造体を作る
行列から Image 構造体を作るには、grayim(),colorim()関数を使う。
grayim() は、m x n の行列からグレースケールの Gray Image 構造体を作る。
colorim() は、3 x m x n の行列が必要。RGB から直接変換する方法は不明。
とりあえず、この大きさの行列を作って、RGB 値を代入すれば使える。
まとめ
imread(), imwrite() は、それぞれ load(), save() に変わりました。
機会があれば対応したものを執筆しますが、混乱を避けるため、とりあえず消しておきます。(2015/12/19)
Pkg.add("Images") でパッケージを追加。
入出力には ImageMagick を使用しているらしい。
以下、ちょっとしたコード。
# Images パッケージを使用する宣言
using Images
# sample.bmp を読み込む
img1= imread("sample.bmp")
# 白黒画像に変換
img1= convert(Image{Gray}, img1)
# sobel filter の係数を取得。2つの行列を返してくる
sobelX, sobelY= sobel()
# X方向の sobel filter を適用
img1= imfilter(img1, sobelX)
# 結果をファイルに書き込む
imwrite(colorim(img1), "edgeX.bmp")
RGB Image 構造体
img1= imread("sample.bmp")
評価値
RGB Image with:
data: 1280x720 Array{RGB{UfixedBase{Uint8,8}},2}
properties:
IMcs: sRGB
spatialorder: x y
pixelspacing: 1 1
ピクセルデータには、img1.data[100,100].r のようにしてアクセスできる。ちなみに、data は省略できて、img1[100,100].r でも同じ。
ただし、img1[:,:].r のように範囲指定はできない。
構造体の properties は、img1["IMcs"] のように指定する。
RGB それぞれを行列として扱いたい場合には、red(), green(), blue() という関数で分離できる
imgR= red (img1)
imgG= green(img1)
imgB= blue (img1)
これで imgR,imgG,imgB は、行列となるので、普通に計算などができる。imread で読み込んだ場合、この行列は、各画素 0 から 1 の値となる。
255 を掛けると元の BMP のピクセル値に一致する。
Image 構造体を作る
行列から Image 構造体を作るには、grayim(),colorim()関数を使う。
grayim() は、m x n の行列からグレースケールの Gray Image 構造体を作る。
colorim() は、3 x m x n の行列が必要。RGB から直接変換する方法は不明。
とりあえず、この大きさの行列を作って、RGB 値を代入すれば使える。
まとめ
using Images
# sample.bmp 読み出し
img1= imread("sample.bmp")
# RGB に分離
imgR= red (img1)
imgG= green(img1)
imgB= blue (img1)
# Gray を作ってみる
imgW= imgR * 0.29 + imgG * 0.60 + imgB * 0.11
imwrite(grayim(imgW), "gray.bmp")
# RGB Image 構造体に戻す
imgRGB= zeros(3, size(imgR,1), size(imgR,2))
imgRGB[1,:,:]= imgR
imgRGB[2,:,:]= imgG
imgRGB[3,:,:]= imgB
imwrite(colorim(imgRGB), "rgb.bmp")
コメント
_ chocolate ― 2018年05月02日 15:48
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
トラックバック
このエントリのトラックバックURL: http://marusu.asablo.jp/blog/2015/06/05/7662620/tb
Keep up the good writing.