Skip to content

Commit 43f8322

Browse files
committed
Clarifies Jacobian calculation in symmetric ICP
Clarifies that the Jacobian calculation in the symmetric ICP implementation uses target normal for the first 6 elements and source normal for the last 6 elements. This is reflected in the documentation and test cases.
1 parent 730c635 commit 43f8322

File tree

3 files changed

+7
-8
lines changed

3 files changed

+7
-8
lines changed

cpp/open3d/t/pipelines/kernel/RegistrationImpl.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -240,8 +240,8 @@ template bool GetJacobianPointToPlane(int64_t workload_idx,
240240
/// \param target_normals_ptr Pointer to target point normals (3N elements).
241241
/// \param correspondence_indices Pointer to correspondence indices.
242242
/// \param J_ij Output array for Jacobians (must have space for 12 elements:
243-
/// elements 0-5 for source-to-target Jacobian,
244-
/// elements 6-11 for target-to-source Jacobian).
243+
/// elements 0-5 for Jacobian using target normal,
244+
/// elements 6-11 for Jacobian using source normal).
245245
/// \param r1 Output residual for source-to-target point-to-plane distance.
246246
/// \param r2 Output residual for target-to-source point-to-plane distance.
247247
/// \return true if correspondence is valid, false if correspondence is -1.

docs/jupyter/pipelines/icp_registration.ipynb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,5 @@
11
{
22
"cells": [
3-
{
4-
"cell_type": "markdown",
5-
"source": "Symmetric ICP achieves tight alignment comparable to point-to-plane ICP (a `fitness` score around 0.62 and an `inlier_rmse` around 0.0065).\n\n<div class=\"alert alert-info\">\n\n**Note:**\n\nSymmetric ICP requires both source and target point clouds to have normals. The symmetric objective function uses normals from both point clouds to constrain the transformation, which can provide more robust alignment when both sets of normals are reliable.\n\n</div>",
6-
"metadata": {}
7-
},
83
{
94
"cell_type": "code",
105
"execution_count": null,
@@ -251,6 +246,11 @@
251246
"metadata": {},
252247
"execution_count": null,
253248
"outputs": []
249+
},
250+
{
251+
"cell_type": "markdown",
252+
"source": "Symmetric ICP achieves tight alignment comparable to point-to-plane ICP (a `fitness` score around 0.62 and an `inlier_rmse` around 0.0065).\n\n<div class=\"alert alert-info\">\n\n**Note:**\n\nSymmetric ICP requires both source and target point clouds to have normals. The symmetric objective function uses normals from both point clouds to constrain the transformation, which can provide more robust alignment when both sets of normals are reliable.\n\n</div>",
253+
"metadata": {}
254254
}
255255
],
256256
"metadata": {

python/test/test_symmetric_icp.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,6 @@ def test_registration_symmetric_icp_convergence(self):
227227

228228
# Create a more complex test case
229229
source = o3d.geometry.PointCloud()
230-
target = o3d.geometry.PointCloud()
231230

232231
# Generate random points with normals
233232
num_points = 50

0 commit comments

Comments
 (0)