How to filter noise in a 3D structure/data array?

9 views (last 30 days)
I have a 3D structure of a water droplet (from an .asc file), this water droplet could be seen with a naked eye (approximately 2 cm wide or so) and one could observe its smooth surface, but when scanned I get the following image (shown in 3D on the left and in a 2D plane on the other).
These two peaks/lumps presented in the image, if real, should have been easily observable to the naked-eye, but they were not there, and therefore I would like to remove them from my image by smoothing the plane of the water droplet. How can I do so?
I have attached the 3 data arrays to this question.
I know that there are 3D volumetric image processing tools that recur to remove noise from 3D point clouds, but I am not sure how to use, or how to define that the only thing I want "cleaned" from this image are those sudden lumps/peaks.

Answers (1)

Image Analyst
Image Analyst on 30 Mar 2023
It looks as though you might be able to just get rid of all points where z is higher than 0.95
badRows = z > 0.95;
z(badRows) = [];
x(badRows) = [];
y(badRows) = [];
  2 Comments
Goncalo Costa
Goncalo Costa on 30 Mar 2023
But what if the sample is inclined? In the sense that setting a horizontal limit wouldn't work? Is there a better "noise-cleaning mechanism"?
Thank you for your hel, I shall use that for now.
Image Analyst
Image Analyst on 30 Mar 2023
Well of course if your data is different, your algorithm may need to be different. Maybe you could rotate your data before denoising. Maybe you could try a modified median filter where you take the median filter of your data and if the filtered data is too far away from the actual data, replace the actual data with the median filtered value, or just delete that data point entirely. See attached demo where I remove salt and pepper noise.

Sign in to comment.

Products


Release

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!