LoginSignup
18
21

More than 5 years have passed since last update.

画像処理 in Julia 1.0 #2

Last updated at Posted at 2018-09-26

JuliaImages

Juliaで画像処理をする場合、有用なパッケージのひとつにJuliaImagesがある。ここでは、Julia 1.0に導入されたJuliaImagesによる基本的な画像の操作方法についてまとめておく。OSはUbuntu 16.04である。pythonで画像処理を行ったことがあるならば、ここの対応表が参考になる。

JuliaImagesパッケージの読み込み

# import packages
using Images, ImageView, TestImages

画像を読み込みたい

# load your own image
img = load("path_to_image")

# load an image from TestImages package
imgg = testimage("lena_gray_256")
imgc = testimage("lena_color_256")

画像を表示したい

# imshow in ImageView package
imshow(imgc)

カラー画像をレイヤーごとに表示したい

# imshow in ImageView package
imshow(permutedims(channelview(imgc), [2,3,1]))

画像のサイズを知りたい

# return (height, width)
size(img)

空の画像を生成したい

# gray image: zeros(format, height, width)
imgg = zeros(Gray, 5, 5)

# color image
imgc = zeros(RGB{N0f8}, 5, 5)

ランダムな画像を生成したい

# gray image: rand(format, height, width)
imgg = rand(Gray, 5, 5)

# color image
imgc = rand(RGB{N0f8}, 5, 5)

cropしたい

# gray image
imgg_crop = imgg[90:200, 70:210]

# color image
imgc_crop = imgc[90:200, 70:210]

resizeしたい

# gray image
imgg_resize = imresize(imgg, (64, 128))

# color image
imgc_resize = imresize(imgc, (64, 128))

配列(1次元)を画像に変換したい

# convert 1d array -> gray image
array_1d = collect(range(0,stop=1, length=25))
imgg = colorview(Gray, reshape(array_1d, 5, 5))

配列を画像に変換したい

# convert 2d array -> gray image
array_2d = rand(5, 5)
imgg = colorview(Gray, array_2d)

# convert 3d array -> color image
array_3d = rand(3, 5, 5)
imgc = colorview(RGB, array_3d)

画像を配列に変換したい

# gray image -> convert 2d array
imgg = testimage("lena_gray_256")
array_2d = channelview(imgg)

# color image -> convert 3d array
imgc = testimage("lena_color_256")
array_3d = channelview(imgc)

カラー画像をグレー画像に変換したい

# convert color image -> gray image
imgg = Gray.(imgc)

2値化したい

# binarize a gray image by thresholds 0.5
imgg_bin = imgg .> 0.5

filterをかけたい

# gaussian filter
img_filter_gau = imfilter(imgc, Kernel.gaussian(5))

# lapracian filter
img_filter_lap = imfilter(imgc, Kernel.Laplacian())

paddingしたい

# mirroring
imgc_pad_refl = padarray(imgc, Pad(:reflect, 25, 50))
imgg_pad_refl = padarray(imgg, Pad(:reflect, 25, 50))

# copy
imgc_pad_repl = padarray(imgc, Pad(:replicate, 25, 50))
imgg_pad_repl = padarray(imgg, Pad(:replicate, 25, 50))

# periodic bound
imgc_pad_circ = padarray(imgc, Pad(:circular, 25, 50))
imgg_pad_circ = padarray(imgg, Pad(:circular, 25, 50))

# filled by constants
t = 100; b = 0; l = 10; r = 40
pad_color = RGB4{N0f8}(.5,0.5,0.) # color 
imgc_pad_fill = padarray(imgc, Fill(pad_color, (t, l), (b, r)))
imgg_pad_fill = padarray(imgg, Fill(pad_color, (t, l), (b, r)))

一旦ここまで。これでかなりの処理ができる。今後、有用な関数を追加する予定である。お疲れ様でした。

18
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
21