logo

ジュリアで画像配列を回転する方法 📂ジュリア

ジュリアで画像配列を回転する方法

画像の回転

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)

1.PNG

2.PNG

上のように回転させると、元の配列がぴったりと収まるので、画像のサイズは変わらない。しかし、$90$の倍数ではない角度で回転させると、元の形に合わなくなる。そのため、元の画像のすべての点を表現するために、以下のように画像が大きくなる。元の画像のサイズを維持したい場合は、変数axes()を追加すればいい。

Y4=imrotate(X,pi/6)
Y5=imrotate(X,pi/6,axes(X))

3.PNG

4.PNG

また、InterpolationsパッケージのConstant()を使用すると、補間法をnearest1に適用することができる。計算に最も近い点のみを使用するので、精度は低下するが、計算は速い。対照的に、bilinear2の場合は周囲の四点すべてを計算に使用するので、相対的に速度は遅いが、より精確である。ここで精確とは、回転した際に画像が損傷する度合いが低いという意味だ。以下の画像を見てみよう。画像が大きく、一見すると違いが分からないかもしれないが、拡大すると二つの補間法の違いがはっきりとわかる。

Y6=imrotate(X,pi/6,Constant())

5.PNG

6.PNG

7.PNG

参照

環境

  • OS: Windows10
  • Version: 1.5.3 (2020-11-09)

  1. 最近傍補間法, 最近隣補間法 ↩︎

  2. 双線形補間法, 二線形補間法 ↩︎