3D binary mask/voxel mask/volume from two surfaces

5 ビュー (過去 30 日間)
David
David 2015 年 6 月 22 日
回答済み: Kannan U V 2018 年 3 月 12 日
I have a 3D image stack from which I only want to extract the information close to a surface I computed. Close meaning a distance away from the surface, that I can specify. So far I computed the surface of interest and with surfnorm I computed the top and bottom surface of my volume of interested, with each surface being a specified distance away. They basically look like two half cylinder surfaces with the set distance between them. Now I want to create a binary volume mask from these two surfaces. I tried different ways but so far nothing really has worked. I can create a binary mask of just the two surfaces via griddata but I cannot easily fill the in-between via infill because there can be 1 pixel holes in the resulting isoline when I interpolate like this. What I get look something like 2 two isolines/faces depending on the angle of the surface at the z-slice. Any good ideas how to turn this "volume" into a pixel volume? Thanks!
  1 件のコメント
David
David 2015 年 6 月 22 日
If this is easier: The ideal way would be to project the maximum intensity value along the normals onto the surface. But the only way I could achieve that was to write my own version of improfile for 3D images. (this way easy looking at the code of improfile it was basically swapping interp2 to interp3) But then I have to iterate over each x-y combination to find the z-value of the surface and call my version of improfile along the normals and take the max value. This is extremely slow.

サインインしてコメントする。

回答 (1 件)

Kannan U V
Kannan U V 2018 年 3 月 12 日
Did you get to use the distance transform? You can compute the distance of any point to the surface if you have the binary mask
https://www.mathworks.com/help/images/ref/bwdist.html

Community Treasure Hunt

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

Start Hunting!

Translated by