Find sphere fit on binary matrix

3 次查看(过去 30 天)
Hi all,
I have a (239,239,85) binary matrix in which the 1's correspond to the mask of a geometrical shape (see attachment). I want to fit a sphere around it, so that it fits best to the binary mask. I have already tried this: https://nl.mathworks.com/matlabcentral/fileexchange/34129-sphere-fit-least-squared, but that does not work since the matrix is singular. Can anybody help me out? Thanks in advance!
  1 个评论
Walter Roberson
Walter Roberson 2022-2-18
If the matrix is singular then enter the data all lies in the same plane or else you are passing the wrong information to the fitting function.

请先登录,再进行评论。

采纳的回答

KSSV
KSSV 2022-2-18
load('matrixfit.mat')
[m,n,p] = size(tumor3) ;
[X,Y,Z] = ndgrid(1:m,1:n,1:p) ;
k = tumor3(:) ;
x = X(:) ;
y = Y(:) ;
z = Z(:) ;
P = [x(k==1) y(k==1) z(k==1)] ;
[Center,Radius] = sphereFit(P) ; % Use that file exchange function
I got:
Center = [100.8695 103.3629 37.2319] ;
Radius = 3.0785 ;
  5 个评论
Torsten
Torsten 2022-2-21
Usually,
solid_sphere= sqrt((X-Center(1)).^2 + (Y-Center(2)).^2 + (Z-Center(3)).^2) <= radius ;
Is it different in your case ?
Lieke Pullen
Lieke Pullen 2022-2-21
I think so, since I have made a linspace varying from -119 to -119 (for x and y), and from -43 to 43 for z. I used the equation you mentioned in the following script:
array_x=239; array_y=239; array_z=85;
sphere=create_sphere(round(Radius),array_x,array_y, array_z, round(Center));
function solid_sphere=create_sphere(radius,array_x,array_y, array_z,Center)
[X,Y,Z]=meshgrid(0:1:array_x-1, 0:1:array_y-1, 0:1:array_z-1);
solid_sphere= sqrt((X-madCenter(1)).^2 + (Y-Center(2)).^2 + (Z-Center(3)).^2) <= radius ;
end
But that also does not give me the right center unfortunately.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Surface and Mesh Plots 的更多信息

产品


版本

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by