2011-11-10 29 views
9

私は2D numpy配列としてグレースケール画像のセットを持っています。回転numpy 2D配列

私は、異なるフロートアングルの1点(その内側)について画像を回転させる必要があります。回転は定位置にある必要はなく、補間のために(私がこれまでよく説明していれば)もちろん許可します。

結果に数値演算を行う必要があるので、numpyにしておきたいですが、不可能であればステップイン/アウトも可能です。私はPIL、Image.rotate(theta)を使用しようとしましたが、それを私の配列にどのように適用するのか、そして配列を戻す方法を理解していません。

ありがとうございます。

+0

私はあなたの '灰色を変えたcale 'タグを' image processing 'タグに追加します。私はそれがあなたの意図をより良く説明すると思う。自由に変更することができます – BlackBear

+0

これはnumpyで直接行うことができますが、前後に変換するにはhttp://effbot.org/zone/pil-numpy.htmを参照してください。 –

+0

アドバイスありがとう、私はちょうどこのボックスに気づいた! – astabada

答えて

3

は午後06時34分にcgohlke 11月10日'11のコメントを見ます。

2

基本的な操作はWikipedia transformation matrixページで説明されています - ここではアスキー行列アートをやろうとしませんが、出力P '= R * PここでP'は出力ポイント、Rは2x2回転角の正弦及び余弦を含む変換行列、Pは入力点である。原点以外を回転させたい場合は、回転前に原点を移動します。P '= T + R *(P-T)ここで、Tは平行移動座標です。基本的な行列演算は補間を行わないので、numpyベースのimage processing libraryを使用していない場合は、逆変換を行います。それぞれの(整数値の)出力座標に対して(浮動小数点)座標その中に回転される点の位置を決定し、その入力点の値を周囲の画素から補間する。補間翻訳および2D numpyのアレイの回転のために()scipy.ndimage.interpolation .shift()を検討して回転

+0

これは難しいことでした...あなたがcgohlkeの解決策をチェックしなかった場合は、120±13秒で実装しました。 – astabada

0

私は一例で上記の助けを借りると、この問題を解決たい:出力がされます

import pandas as pd 
 
import numpy as np 
 
bd = np.matrix([[44., -1., 40., 42., 40., 39., 37., 36., -1.], 
 
       [42., -1., 43., 42., 39., 39., 41., 40., 36.], 
 
       [37., 37., 37., 35., 38., 37., 37., 33., 34.], 
 
       [35., 38., -1., 35., 37., 36., 36., 35., -1.], 
 
       [36., 35., 36., 35., 34., 33., 32., 29., 28.], 
 
       [38., 37., 35., -1., 30., -1., 29., 30., 32.]]) 
 
def rotate45(array): 
 
    rot = [] 
 
    for i in range(len(array)): 
 
     rot.append([0] * (len(array)+len(array[0])-1)) 
 
     for j in range(len(array[i])): 
 
      rot[i][int(i + j)] = array[i][j] 
 
    return rot 
 

 
df_bd = pd.DataFrame(data=np.matrix(rotate45(bd.transpose().tolist()))) 
 
df_bd = df_bd.transpose() 
 
print df_bd

そのような:

44 0 0 0 0 0 0 0 0 
 
42 -1 0 0 0 0 0 0 0 
 
37 -1 40 0 0 0 0 0 0 
 
35 37 43 42 0 0 0 0 0 
 
36 38 37 42 40 0 0 0 0 
 
38 35 -1 35 39 39 0 0 0 
 
0 37 36 35 38 39 37 0 0 
 
0 0 35 35 37 37 41 36 0 
 
0 0 0 -1 34 36 37 40 -1 
 
0 0 0 0 30 33 36 33 36 
 
0 0 0 0 0 -1 32 35 34 
 
0 0 0 0 0 0 29 29 -1 
 
0 0 0 0 0 0 0 30 28 
 
0 0 0 0 0 0 0 0 32

関連する問題