【发布时间】:2017-05-11 08:20:26
【问题描述】:
假设图像 I 的维度为 (2, 2)。图形坐标 C 为:
C = [[0, 0], [1, 0],
[0, 1], [1, 1]]
目标:将 I 绕中心(不是原点)旋转 90 度。
变换矩阵:
TRotate(90) = [[0, 1], [-1, 0]]
(假设每个坐标对都可以同步转换(即在 GPU 上)。)
方法:
- 将图形坐标转换为以图像为中心的数学坐标。
- 应用变换矩阵。
- 转换回图形坐标。
例如:
转换为图形坐标:
tx' = tx - 宽度/2
ty' = ty - 宽度/2
C' =[[-1, -1], [0, -1],
[-1, 0], [0, 0]]
应用变换矩阵:
C" = [[-1, 1], [-1, -0],
[0, 1], [0, 0]]
转换回来:
C" = [[0, 2], [0, 1],
[1, 2], [1, 1]]
返回的转换超出范围...
我真的在努力争取围绕“重心”工作的适当旋转。我认为我转换为“数学坐标”是错误的。
我宁愿将坐标转换为以下坐标,运气更好:
C' =[[-1, -1], [1, -1],
[-1, 1], [1, 1]]
我通过观察如果原点存在于四个像素之间,+ve y 轴指向下方,+ve x 轴指向右侧,则实现了这种转换,那么点 (0,0) 将是 (-1, -1) 等等。 (由此产生的旋转和转换给出了预期的结果)。
但是,我找不到正确的变换类型来应用于坐标以将原点放置在中心。我尝试过使用齐次坐标的变换矩阵,但这不起作用。
编辑
马尔科姆的建议:
位置向量 =
[0
0
1]
通过减去 width/2 == 1 进行翻译:
[-1
-1
0]
通过乘以变换矩阵来旋转:
|-1| | 0 1 0| |-1|
|-1| X |-1 0 0| = | 1|
|0 | | 0 0 1| | 0|
【问题讨论】:
标签: image-processing gpu graphical-programming