2

私の問題は次のとおりです。画像に2つの点があり、これらの2つの点の間の角度を取得し、この角度で画像を回転させます。画像内のこのポイントの新しい位置を取得する必要がありますが、同じ角度の回転行列を使用してこれらのポイントを回転させようとすると、ポイントが一致しません。次のコードの何が問題になっていますか?

def rotMat(angle):
  return asarray([[cos(angle), -sin(angle)],[sin(angle),cos(angle)]])

for i in batch2:
  figure(1)
  filename = "../imagens/" + i[-1]
  outputFile = "./output/" + i[-1]
  x1 = float(i[22]) # x coordinate of first point
  y1 = float(i[23]) # y coordinate of first point
  x2 = float(i[34]) # x coordinate of second point
  y2 = float(i[35]) # y coordinate of second point

  # angle of rotation
  angle = arctan((y1-y2)/(x1-x2))

  im = imread(filename)
  im = ndimage.rotate(im, angle*180/pi, reshape=False)

  imshow(im)
  p1 = asarray([x1,y1])
  p2 = asarray([x2,y2])    

  # Rotating the points 
  # [512,680] is the center of the image
  p1n = (p1-[512,680]).dot(rotMat(angle)) + [512,680]

  p2n = (p2-[512,680]).dot(rotMat(angle)) + [512,680]

  print p1n, p2n

  plot(p1n[0],p1n[1],'d')
  plot(p2n[0],p2n[1],'d')

  savefig(outputFile)
  clf()
4

1 に答える 1

4

私はあなたが何をしているのか100%理解していません。しかし、画像のy軸は、上部の0から下部の正の値まで伸びていると思いましたか。したがって、方向は通常の数学的な定義とは反対です。通常の方法で定義rotMatしましたが、反対方向に実行される画像定義の変更されたy軸にそれを採用する必要があります。

于 2012-12-15T22:33:43.610 に答える