У меня есть скрипт MATLAB, который может обнаруживать трехмерные объекты (капсулы одинакового размера) в случайном трехмерном расположении, сгенерированном с помощью кода DEM.Когда я пытаюсь применить тот же сценарий к 3D-набору данных того же типа, полученного с помощью магнитно-резонансной томографии, я не могу разделить объекты с помощью алгоритма водораздела.Мне нужна помощь в том, как решить эту проблему.Заранее спасибо.
clc,clear all,close all
diameter=3e-3; % capsule diameter (m)
shaft=9e-3; % capsule shaft (m)
% number of cells
nx=500;
ny=142;
nz=142;
% size of cell (m)
cellsize=1.5e-4;
filename='input.csv'; % name of the input CSV file
A=csvread(filename,1,0); % load values into matrix A
flags=reshape(A(:,1),[nx,ny,nz]);
Nparticles=round(max(flags(:)))-1;
bw=zeros(nx,ny,nz); % preallocating matrix
for i=1:nx
for j=1:ny
for k=1:nz
if flags(i,j,k)>=1 % particles
bw(i,j,k)=1;
else
bw(i,j,k)=0;
end
end
end
end
bw2=~bwareaopen(~bw, 10);
D=-bwdist(~bw);
Ld=watershed(D);
bw2=bw;
bw2(Ld==0)=0;
mask=imextendedmin(D,2);
D2=imimposemin(D,mask);
Ld2=watershed(D2);
bw3=bw;
bw3(Ld2==0)=0;
[labeledImage,Nobj]=bwlabeln(bw3);
figure
slice(:,:)=labeledImage(:,70,:);
% slice(:,:)=bw(:,70,:);
imshow(slice)
stats=regionprops3(labeledImage,'all');
centroids=stats.Centroid;
eigenvec=cell2mat(stats.EigenVectors);
e=eigenvec(1:3:Nobj*3,:);
c=cellsize*centroids;