首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python: skimage.transform.AffineTransform旋转中心

python: skimage.transform.AffineTransform旋转中心
EN

Stack Overflow用户
提问于 2014-09-17 16:18:08
回答 2查看 8.9K关注 0票数 3

我正在尝试使用python中的skimage来旋转一个图像,在opencv,看来我能做到中。

代码语言:javascript
复制
cv.GetRotationMatrix2D(center, angle, scale, mapMatrix) 

其中,中心是源图像中旋转的中心。

在skimage中,相应的转换似乎是skimage.transform.AffineTransform

代码语言:javascript
复制
skimage.transform.AffineTransform(matrix=None, scale=None, rotation=None, shear=None, translation=None)

但我不能确定旋转的中心.这里是否有定义旋转中心的方法(或者还有另一种skimage方法?)

我查过网页和手册,到目前为止什么都没找到.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-22 12:23:49

通过组合以下转换,目前可以做到这一点:

  1. 移动图像,使中心在原点附近。
  2. N度旋转
  3. 把图像移回来

但是,一个参数会使这件事变得更容易!请您在GitHub上提出一个问题,以便我们能够实现这一点吗?

与此同时,守则:

代码语言:javascript
复制
from skimage import data
from skimage import transform
import numpy as np
import matplotlib.pyplot as plt

image = data.chelsea()

shift_y, shift_x = np.array(image.shape[:2]) / 2.
tf_rotate = transform.SimilarityTransform(rotation=np.deg2rad(30))
tf_shift = transform.SimilarityTransform(translation=[-shift_x, -shift_y])
tf_shift_inv = transform.SimilarityTransform(translation=[shift_x, shift_y])

image_rotated = transform.warp(image, (tf_shift + (tf_rotate + tf_shift_inv)).inverse)

plt.imshow(image_rotated)
plt.show()
票数 4
EN

Stack Overflow用户

发布于 2016-03-16 19:23:55

Stefan的答案中的图像中心似乎不正确,这是他的代码的修正版本

代码语言:javascript
复制
from skimage import transform
import numpy as np
import matplotlib.pyplot as plt

image = np.zeros([21, 21])
image[10,:] = 1
image[10,10] = 5
image[7, 10] = 1

shift_y, shift_x = (np.array(image.shape)-1) / 2.
tf_rotate = transform.SimilarityTransform(rotation=np.deg2rad(60))
tf_shift = transform.SimilarityTransform(translation=[-shift_x, -shift_y])
tf_shift_inv = transform.SimilarityTransform(translation=[shift_x, shift_y])
image_rotated = transform.warp(image, (tf_shift + (tf_rotate + tf_shift_inv)).inverse, order = 3)


plt.subplot(121)
plt.imshow(image)
plt.subplot(122)
plt.imshow(image_rotated)
plt.show()

print "original image maximum at: ", np.unravel_index(np.argmax(image), image.shape)
print "rotated image maximum at : ", np.unravel_index(np.argmax(image_rotated), image_rotated.shape)

原始图像最大值在:(10,10)旋转图像最大值在:(10,10)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25895587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档