首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用单应矩阵反变换得不到相同的点

用单应矩阵反变换得不到相同的点
EN

Stack Overflow用户
提问于 2020-11-24 15:41:57
回答 1查看 61关注 0票数 0

我得到了单应矩阵的逆矩阵

代码语言:javascript
复制
self.inv_homography = np.linalg.inv(self.homography)

和我的转换函数

代码语言:javascript
复制
def doTransform(x, y, homography):
  p = np.ndarray(shape=(3, 1), dtype=float, order='F')

  p[0, 0] = x
  p[1, 0] = y
  p[2, 0] = 1

  res = np.dot(homography, p)

  return res

但是第三行和第一行不一样,有一些像素滑移。

代码语言:javascript
复制
ref coords :(768, 512, 1024, 768)
ref to wa coords:  569.5178327464915 185.9395922739289 790.8947327112375 448.7356913249636
wa to ref coords:  767.149391928569 510.19931575332294 1022.283053230326 764.3653307505839   

我该怎么处理这张纸条?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-24 16:24:53

我认为你已经硬编码了z坐标可能是问题所在。如果z坐标没有恰好转换为1,则会产生错误。此代码返回预期的输出:

代码语言:javascript
复制
import numpy as np

def transform(x, y, z, homography):
    p = np.array([x,y,z]).reshape(3,1)
    
    return np.dot(homography, p)
    
hom = np.array([1.2,3.1, 4.0, 2.4, 5.4, 3.2, 1.1, 3.0, 1.2]).reshape(3,3)
x, y, z = 2.3, 1.7, 1

inv_hom = np.linalg.inv(hom)

x_wa = transform(x, y, z, hom)[0, 0]
y_wa = transform(x, y, z, hom)[1, 0]
z_wa = transform(x, y, z, hom)[2, 0]

print(transform(x_wa, y_wa, z_wa, inv_hom))

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

https://stackoverflow.com/questions/64982116

复制
相关文章

相似问题

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