基于距离与基于梯度
%%
center1 = -10;
center2 = -center1;
dist = sqrt(2*(2*center1)^2);
radius = dist/2 * 1.4;
lims = [floor(center1-1.2*radius) ceil(center2+1.2*radius)];
[x,y] = meshgrid(lims(1):lims(2));
bw1 = sqrt((x-center1).^2 + (y-center1).^2) <= radius;
bw2 = sqrt((x-center2).^2 + (y-center2).^2) <= radius;
bw = bw1 | bw2;
%% watershed based on dist
close all
D = bwdist(~bw);
D = -D;
D(~bw) = -Inf;
figure
imshow(D,[])
L = watershed(D);
figure
imshow(L,[])
res = L == 0;
figure
imshow( res, [] )
%% watershed based on gradient
[gx, gy] = gradient( double(bw) );
gxy = sqrt( gx.^2 + gy.^2 );
ff = watershed(gxy);
figure
imshow(ff,[])
dd = ff == 0;
figure
imshow(dd)