JuliaImagesで画像の平行移動をする
Julia v0.5.1 + JuliaImages/ImageTransformations.jl v0.2.2で画像の平行移動を行う。
using Images using CoordinateTransformations img = Gray{Float64}[ 0.0 0.0 0.0 0.0 0.0; 0.0 0.5 0.5 0.5 0.0; 0.0 0.5 1.0 0.5 0.0; 0.0 0.5 0.5 0.5 0.0; 0.0 0.0 0.0 0.0 0.0;] tfm = recenter(Translation(2,0), center(img_pyramid)) translated_img = warp(img, tfm)
このとき、以下のように表示され、なんか移動してなくね?となる。
3:7×1:5 OffsetArray{Gray{Float64},2}: Gray{Float64}(0.0) Gray{Float64}(0.0) Gray{Float64}(0.0) Gray{Float64}(0.0) Gray{Float64}(0.0) Gray{Float64}(0.0) Gray{Float64}(0.5) Gray{Float64}(0.5) Gray{Float64}(0.5) Gray{Float64}(0.0) Gray{Float64}(0.0) Gray{Float64}(0.5) Gray{Float64}(1.0) Gray{Float64}(0.5) Gray{Float64}(0.0) Gray{Float64}(0.0) Gray{Float64}(0.5) Gray{Float64}(0.5) Gray{Float64}(0.5) Gray{Float64}(0.0) Gray{Float64}(0.0) Gray{Float64}(0.0) Gray{Float64}(0.0) Gray{Float64}(0.0) Gray{Float64}(0.0)
だが、この行列はOffsetArrayで表現されており、これでちゃんと平行移動している。
1行目の型情報にオフセットの情報が書いてあり、この値域の情報だけが下に表示されている。
ちなみにtranslated_img[1, 1]でアクセスするとBoundsErrorになるのでindicesなりで座標の値域をとってからアクセスする必要がある。
私がOffsetArrayに気付かず、テストコードやサンプルも回転移動のものしかないため少し詰まったのでメモ。
関係ないが、スーパーpre記法がjuliaに対応していた。
はてなブログ最高。