Signed vs. PointToPointVector for (model2model) distance output

I created a VTK output file from two segmented sinus (segmentation of the sinus derived from two ct scans at different time points).
Now I would like to know whether there has been any reduction/expansion of the sinus volume but I focus on the anatomical region, i.e. where exactly has been any change.
Attached is the VTK Output of the sinus.


However when exporting the distances between the meshes I can choose between “signed” and “PointToPointVector” (from the scalar of the vtk) resulting in different values of mm.
I would like to assess where exactly has been the highest distance between the two models.
I could try to visually detect it on a distance map but I prefer to stick to the output of the distances.

If I ignore the direction and just would like to know the max. distance then probably “signed” is fine.
If I would like to assess the max. vertical (sup-inferior) expansion of the sinus would the PointToPointVector (y-Axis) be sufficient to tell???
I am asking because the values are different in regard to max. distance (of mm?).
In this example: y-axis (second column): max 1.65 (mm?)
signed: max. 0.51 (mm?)
In return, if I would like to tell the max. lateral expansion of the sinus is the x-axis (pointtopointvector) appropiate?

Another example would be the comparison of dental models (as seen here:


Different software but obviously the “signed” distance is depicted and referred to as cloud-to-mesh (c2m) distance.
Again: if I would like to assess whether there is a difference in the vertical height (e.g. after filling treatment) between two dental models is “signed” or “Pointtopointvector” more suitable?
I am wondering whether this has been paid attention to while measuring distances between meshes…

1 Like

I don’t have a great answer to your question, but you might start by trying to look at the raw data from the output files to understand some of the differences between the two models.

I’d recommend executing the model2model distance and then running something similar to the following code to export the models as CSVs to help answer your questions:

outputNode = findModelToModelDistance(modelNode1,modelNode2)
VTKFieldData = outputNode.GetMesh().GetAttributesAsFieldData(0)
resultTableNode = slicer.mrmlScene.AddNewNodeByClass("vtkMRMLTableNode","surface_distances")

for j in range(0,VTKFieldData.GetNumberOfArrays()):
    resultTableNode.AddColumn(VTKFieldData.GetArray(j))

I hope this is somewhat helpful in answering your question.

2 Likes

You can also get all the computed distances as a numpy array (slicer.util.arrayFromModelPointData) and from that you can compute any statistics, minimum/maximum, projections on any axes, etc. using standard numpy functions.

1 Like