Laplacian Filter

Hi, I want to use a smoothing tool for my poly data.

my poly data is a surface mesh of grey matter.

However, when I use a smoothing filter, the surfaces intersect each other.

            int smoothingIterations = 40;
            double passBand = 0.001;
            double featureAngle = 90.0;
            vtkWindowedSincPolyDataFilter smoother = vtkWindowedSincPolyDataFilter.New();
            smoother.SetInputConnection(surface.GetOutputPort());
            smoother.SetNumberOfIterations(smoothingIterations);
            smoother.BoundarySmoothingOff();
            smoother.FeatureEdgeSmoothingOff();
            smoother.NonManifoldSmoothingOff();
            smoother.NormalizeCoordinatesOff();
            smoother.SetFeatureAngle(featureAngle);
            smoother.SetPassBand(passBand);
            smoother.Update();

this is my sample code.
How can I smooth complicated surface mesh such as GM, WM without any line intersection, triangle intersection?
If any suggestions, it would be so great

Thanks.

The smoothing filters in VTK are topological operations, they do not check for geometric intersection. You’ll have to write your own filter for that - it’s a very complex algorithm.

1 Like

Is there any paper or related algorithm for that?
I read your triangulation algorithm paper(including decimation).
I think you have the solution for the smoothing problem.

One simple solution is to perform smoothing before surface extraction, because no self-intersection may occur in labelmaps.

However, most likely a simple generic surface smoothing will not get you too far. For proper analysis you will probably have to implement a surface generation pipeline that is similar to FreeSurfer.