解决分水岭算法的过分割问题 下载本文

title('图上显示极大值区域(I2)') se2 = strel(ones(5,5));%结构元素 fgm2 = imclose(fgm, se2);%关操作 fgm3 = imerode(fgm2, se2);%腐蚀 fgm4 = bwareaopen(fgm3, 20);%开操作 I3 = I;

I3(fgm4) = 255;%前景处设置为255 figure; subplot(121)

imshow(I3)%显示修改后的极大值区域 title('修改后的极大值区域(I3)')

bw = im2bw(Iobrcbr, graythresh(Iobrcbr));%转化为二值图像 subplot(122); imshow(bw), %显示二值图像 title('二值图像(bw)') D = bwdist(bw);%计算距离

DL = watershed(D);%分水岭变换 bgm = DL == 0;%求取分割边界

figure; imshow(bgm), %显示分割后的边界 title('分水岭边界(bgm)')

gradmag2 = imimposemin(gradmag, bgm | fgm4);%设置最小值 L = watershed(gradmag2);%分水岭变换 I4 = I;

I4(imdilate(L == 0, ones(3, 3)) | bgm | fgm4) = 255;%前景及边界处设置为255

figure;imshow(I4)%突出前景及边界 title('前景和背景边界')