ジュリアで画像配列を回転する方法
画像の回転
imrotate(X, theta)
: 配列Xをthetaラジアンで回転させる。ここで注意すべき点は、角度の単位が度($^{\circ})$のMATLABと異なり、角度の単位はラジアンであることだ。さらに、MATLABとは異なり時計回りに回転する。他の変数を入力しない場合の補間法はバイリニアであり、回転された画像は切り取られない。元の画像Xを$90^\circ=\pi/2$、$180^\circ=\pi$、$270^\circ=\frac{3}{2}\pi$だけ回転させた例とその結果は下のようになる。
using Images
using Interpolations
X=load("example\_{i}mage.png")
Y1=imrotate(X,pi/2)
Y2=imrotate(X,pi)
Y3=imrotate(X,pi*3/2)
上のように回転させると、元の配列がぴったりと収まるので、画像のサイズは変わらない。しかし、$90$の倍数ではない角度で回転させると、元の形に合わなくなる。そのため、元の画像のすべての点を表現するために、以下のように画像が大きくなる。元の画像のサイズを維持したい場合は、変数axes()
を追加すればいい。
Y4=imrotate(X,pi/6)
Y5=imrotate(X,pi/6,axes(X))
また、Interpolations
パッケージのConstant()
を使用すると、補間法をnearest
1に適用することができる。計算に最も近い点のみを使用するので、精度は低下するが、計算は速い。対照的に、bilinear
2の場合は周囲の四点すべてを計算に使用するので、相対的に速度は遅いが、より精確である。ここで精確とは、回転した際に画像が損傷する度合いが低いという意味だ。以下の画像を見てみよう。画像が大きく、一見すると違いが分からないかもしれないが、拡大すると二つの補間法の違いがはっきりとわかる。
Y6=imrotate(X,pi/6,Constant())
参照
環境
- OS: Windows10
- Version: 1.5.3 (2020-11-09)