- 主题:一个透视转换矩阵的问题。
source points:
a1_left_top = [-2.220446049250313e-16, 0.0]
a1_left_bottom = [-2.220446049250313e-16, 2000.9083170876493]
a1_right_top = [391.21904915271233, 0.0]
a1_right_bottom = [391.21904915271233, 2000.9083170876493]
target points:
a1t_target_left_top = [551.33966, 304.61545]
a1t_target_right_top = [900.2324, 339.18124]
a1t_target_right_bottom = [923.9555, -1241.829]
a1t_target_left_bottom = [609.8668, -1212.3458]
我使用cv2.getPerspectiveTransform(src, tgt) 方法得到转换矩阵:
[[ 7.93695385e-01 5.13876433e-02 -1.08987233e-04]
[ 6.40061176e-02 -8.27226932e-01 5.69891978e-05]
[ 5.51339661e+02 3.04615448e+02 1.00000000e+00]]
以前同事计算(没有源码)出来的是:
[[0.712454259,0.0461276844,-9.783137e-05],
[0.0574545935,-0.7425535, 5.11559265e-05],
[494.905426,273.435516,0.897641659]]
两者相差了一个常数: 0.897641659, 但是我不知道这个常数是如何得到的?它的具体意义是什么。
以前的转换矩阵投影出来的结果是正确的,我算出来的投影有问题。
--
修改:toadstone FROM 221.218.211.*
FROM 221.218.211.*
用矩阵重投一次
【 在 toadstone 的大作中提到: 】
: source points:
: a1\_left\_top = \[-2.220446049250313e-16, 0.0\]
: a1\_left\_bottom = \[-2.220446049250313e-16, 2000.9083170876493\]
: a1\_right
: ..................
发自「今日水木 on iPhone SE」
--
FROM 223.104.147.*
谢谢您的回复,不过我没有理解重投一次具体的目标是什么?对改变结果有什么帮助。
再次感谢,期待您指点迷津。
【 在 anonymousId 的大作中提到: 】
: 用矩阵重投一次
: 发自「今日水木 on iPhone SE」
--
FROM 221.218.211.*
用矩阵将源点重新投射,然后计算原来目标点与投射新目标点偏差。如果你的偏差,比别人矩阵偏差大,就要进一步分析
【 在 toadstone 的大作中提到: 】
:
: 谢谢您的回复,不过我没有理解重投一次具体的目标是什么?对改变结果有什么帮助。
: 再次感谢,期待您指点迷津。
: --
:
发自「今日水木 on iPhone SE」
--
FROM 121.237.62.*
这里的CV 函数实现的并不直观 。
可以考虑使用skimage进行矩阵求解:
如下,这里使用了SimilarityTransform进行了约束,如果确定你的使用场景是透视的需要使用ProjectiveTransform进行求解,求解后的矩阵可以打印出来 。
from skimage import transform as trans
import numpy as np
src = np.array([
[38.2946, 51.6963],
[73.5318, 51.5014],
[56.0252, 71.7366],
[41.5493, 92.3655],
[70.7299, 92.2041]], dtype=np.float32)
dst = np.array([
[38.2946, 51.6963],
[73.5318, 51.5014],
[56.0252, 71.7366],
[41.5493, 92.3655],
[70.7299, 92.2041]], dtype=np.float32)
tform_simi = trans.SimilarityTransform()
res = tform_simi.estimate(dst, src)
M = tform_simi.params
print("simi trans report")
print(res)
print(M)
print('=' * 12)
https://github.com/leaf918/Robust-Partial-Fingerprint-Alignment/blob/master/rd_estimate_Euclidean_transform.py
【 在 toadstone 的大作中提到: 】
: source points:
: a1_left_top = [-2.220446049250313e-16, 0.0]
: a1_left_bottom = [-2.220446049250313e-16, 2000.9083170876493]
: ...................
--
FROM 36.110.197.*
用4楼的方法得到 M =
[[ 7.66340018e-01 4.96165316e-02 -1.05230882e-04]
[ 6.18000887e-02 -7.98715858e-01 5.50250113e-05]
[ 5.32337277e+02 2.94116621e+02 9.65534162e-01]]
用3个M (同事的, cv2计算的, 4楼的方法)重算后,四个目标点的坐标都非常接近,感觉是只是精度的问题。
非常困惑为什么会这样。
--
修改:toadstone FROM 221.218.211.*
FROM 221.218.211.*