続いて回転移動です。
#回転の中心を決定 ここでは画像の中心に合わせている center = (int(width/2),int(height/2)) #変換行列の決定 (回転の中心、回転角度、拡大率) rotMat = cv2.getRotationMatrix2D(center, 15, 1) #画像を回転 (入力画像の配列、変換行列、出力画像サイズ) rotated_image = cv2.warpAffine(rgb_image, rotMat, (width,height)) plt.imshow(rotated_image)
rotate.py
ここで試しにrotMatの中身を見てみると、2行3列の行列が表示されるはずです。これがwarpAffineメソッドに代入された変換行列の正体です!
つまり、このメソッドは元のimageの行列にいいかんじの行列をかけあわせて、目的の行列を出力していた、ということになります。この変換をアフィン変換と呼び、これからその中身について少し詳しく見ていきたいと思います。
つまり、このメソッドは元のimageの行列にいいかんじの行列をかけあわせて、目的の行列を出力していた、ということになります。この変換をアフィン変換と呼び、これからその中身について少し詳しく見ていきたいと思います。
平行移動の時にM =[[1,0,100],[0,1,50]]としたのは、上の式にθ=0,a=100,b=50を代入したわけです。
すっきりしていただけたでしょうか??
すっきりしていただけたでしょうか??
③resizeメソッドを用いた画像の拡大&縮小
では最後に画像の拡大と縮小をさらっとやって終わりにしましょう!
まずは画像の拡大から!
まずは画像の拡大から!
#画像を拡大 (入力画像の配列、出力サイズ、fx =横軸方向拡大率、fy=縦軸方向拡大率、interpolation =補間方法の指定) zoomed_image = cv2.resize(rgb_image, None, fx=2.0, fy=2.0, interpolation = cv2.INTER_LINEAR ) plt.imshow(zoomed_image)
zoom!.py
はい、簡単ですね!ちなみに最後の引数のinterpolationは、私もよくわからないのですが公式サイトによると
・INTER_NEAREST:最近傍補間
・INTER_LINEAR:バイリニア補間(デフォルト)
・INTER_AREA:ピクセル領域の関係を利用したリサンプリング.画像を大幅に縮小する場合は,モアレを避けることができる良い手法です.しかし,画像を拡大する場合は, INTER_NEAREST メソッドと同様になります
・INTER_CUBIC:4x4 の近傍領域を利用するバイキュービック補間
・INTER_LANCZOS4:8x8 の近傍領域を利用する Lanczos法の補間
だそうです!デフォはINTER_LINEARなそうなので特に気にしないで良いと思います.
詳しくは以下の記事をご覧ください.
・INTER_NEAREST:最近傍補間
・INTER_LINEAR:バイリニア補間(デフォルト)
・INTER_AREA:ピクセル領域の関係を利用したリサンプリング.画像を大幅に縮小する場合は,モアレを避けることができる良い手法です.しかし,画像を拡大する場合は, INTER_NEAREST メソッドと同様になります
・INTER_CUBIC:4x4 の近傍領域を利用するバイキュービック補間
・INTER_LANCZOS4:8x8 の近傍領域を利用する Lanczos法の補間
だそうです!デフォはINTER_LINEARなそうなので特に気にしないで良いと思います.
詳しくは以下の記事をご覧ください.
求めたいのは二点の関係式です