Segmentation / corner detection of grid intersection points in 3D image

I have a 3D volume of a grid. I would like to detect the intersection points. I know if it was a 2D image, I can run Corner Detection algorithm.
however, in 3D what will be the equivalent, best approach ? the volume is shown below.

What I have tried is to threshold the image using segmentation editor and then use the segmentation module but the result is not ideal as can be seen in the second image below.

I am glad to hear any other suggestions.


Image 1

Image 2



I should add that volume rendering shows a nice visualization of the intersection points but how do I obtain those points ?

It looks like thresholding did a pretty reasonable job of picking out intersection regions. You could continue that approach by using the Islands effect to split each separate clump of voxels into separate segments, and then Segment Statistics module to automatically find the centroid of each segment. Lastly, if you wanted to visualize those points in a uniform way, you could create a Markups Point List with control points at all the segment centroids. A simple python script could automate these steps for you if it is something you would be doing regularly.

However, if your goal is just to visualize a regular grid of points in 3D, it seems like it would be easier to just calculate them (e.g. using numpy) and then display. What is your ultimate goal?
There might be other ways to achieve it.

Hello Mikebind,
Thanks for your response. So this is a CT image of a grid phantom. I want to compare grid intersection points from the image to those of a 3d model of the phantom.
Yes, the thresholding and segmentation approach is what I am working on now. Although, I am not sure how to improve the thresholding and wondered if there is a better approach.
Are there some filters to apply before the thresholding to improve the result ?


You could try a Gaussian blur. I would expect those intersection points to remain local peaks in even a pretty strongly blurred image, so maybe you would find a thresholded version of a blurred image to be of satisfactory quality. Are you attempting to find the center point of each intersection? You could find the voxel coordinates of the highest voxel value in each region after blurring. That would be somewhat robust to the problem of needing a non-uniform threshold, if the different sizes of islands is what is troubling you about the segmentation you have or might get after blurring and thresholding.

Hi, thanks for your reply. Yes my end goal is I want to find the center point of each intersection point.
The gaussian smoothing is fine but the thresholding is not always constant.

But the result is still not ideal due to non uniform intensity across the image. You can see some areas where the intersection points are joined.
At this rate I wonder if I should have a different approach ? 3D Hough lines then find intersection of the lines ?

Is there a 3D Hough lines implementation ? Do you know ?