@@ -60,7 +60,6 @@ def project(
6060 camera_i ,
6161 camera_j ,
6262 T_itoj ,
63- validi ,
6463 ccth = None ,
6564 sample_depth_fun = sample_depth ,
6665 sample_depth_kwargs = None ,
@@ -71,20 +70,22 @@ def project(
7170 kpi_3d_i = camera_i .image2cam (kpi )
7271 kpi_3d_i = kpi_3d_i * di [..., None ]
7372 kpi_3d_j = T_itoj .transform (kpi_3d_i )
74- kpi_j , validj = camera_j .cam2image (kpi_3d_j )
73+ kpi_j , valid = camera_j .cam2image (kpi_3d_j )
74+ invalid = ~ valid
7575 # di_j = kpi_3d_j[..., -1]
76- validi = validi & validj
7776 if depthj is None or ccth is None :
78- return kpi_j , validi & validj
77+ return kpi_j , valid , invalid
7978 else :
8079 # circle consistency
8180 dj , validj = sample_depth_fun (kpi_j , depthj , ** sample_depth_kwargs )
8281 kpi_j_3d_j = camera_j .image2cam (kpi_j ) * dj [..., None ]
8382 kpi_j_i , validj_i = camera_i .cam2image (T_itoj .inv ().transform (kpi_j_3d_j ))
84- consistent = ((kpi - kpi_j_i ) ** 2 ).sum (- 1 ) < ccth
85- visible = validi & consistent & validj_i & validj
83+ reproj_error = ((kpi - kpi_j_i ) ** 2 ).sum (- 1 )
84+ consistent = reproj_error < ccth ** 2
85+ visible = valid & consistent & validj_i & validj
86+ invalid = invalid | (validj & ((~ validj_i ) | (~ consistent )))
8687 # visible = validi
87- return kpi_j , visible
88+ return kpi_j , visible , invalid
8889
8990
9091def dense_warp_consistency (
@@ -100,7 +101,8 @@ def dense_warp_consistency(
100101 - 2 ,
101102 )
102103 validi = di > 0
103- kpir , validir = project (kpi , di , depthj , camerai , cameraj , T_itoj , validi , ** kwargs )
104+ kpir , validir , _ = project (kpi , di , depthj , camerai , cameraj , T_itoj , ** kwargs )
105+ validir = validir & validi
104106
105107 return kpir .unflatten (- 2 , depthi .shape [- 2 :]), validir .unflatten (
106108 - 1 , (depthi .shape [- 2 :])
@@ -120,12 +122,10 @@ def symmetric_reprojection_error(
120122 d0 , valid0 = sample_depth (pts0 , depth0 )
121123 d1 , valid1 = sample_depth (pts1 , depth1 )
122124
123- pts0_1 , visible0 = project (
124- pts0 , d0 , depth1 , camera0 , camera1 , T_0to1 , valid0 , ccth = None
125- )
126- pts1_0 , visible1 = project (
127- pts1 , d1 , depth0 , camera1 , camera0 , T_1to0 , valid1 , ccth = None
128- )
125+ pts0_1 , visible0 , _ = project (pts0 , d0 , depth1 , camera0 , camera1 , T_0to1 , ccth = None )
126+ visible0 = visible0 & valid0
127+ pts1_0 , visible1 , _ = project (pts1 , d1 , depth0 , camera1 , camera0 , T_1to0 , ccth = None )
128+ visible1 = visible1 & valid1
129129
130130 reprojection_errors_px = 0.5 * (
131131 (pts0_1 - pts1 ).norm (dim = - 1 ) + (pts1_0 - pts0 ).norm (dim = - 1 )
0 commit comments