分水岭变换的分割,watershed函数

关于分水岭分割的理解可以看这篇文章图像分割之分水岭,比较形象。

分水岭变换函数:

watershed函数

下面这是matlab官方给的watershed函数例子

clear all; clc; close all;     
 center1 = -40;%第一个圆圆心的横坐标
 center2 = -center1;%第二个圆圆心的横坐标
 dist = sqrt(2*(2*center1)^2);%计算两个圆心之间的距离
 radius = dist/2 * 1.4;%圆的半径为两者距离的一半的1.4倍,即两个圆肯定会相交
 lims = [floor(center1-1.2*radius) ceil(center2+1.2*radius)];%floor 向下取整 ceil向上取整 为整个图像的大小
 [x,y] = meshgrid(lims(1):lims(2));%生成一个69*69的网格平面
 bw1 = sqrt((x-center1).^2 + (y-center1).^2) <= radius;%计算每个坐标的跟(-10,-10)和(10,10)的距离,如果小于半径则置1,否则置0
 bw2 = sqrt((x-center2).^2 + (y-center2).^2) <= radius;
 bw = bw1 | bw2;%两个二值图像按位相或,合并在一起
 figure, imshow(bw,'InitialMagnification','fit'), title('bw')%显示两个相或之后的结果
 D = bwdist(~bw);%对bw求反,然后求距离变换之后的结果
 figure, imshow(D,[],'InitialMagnification','fit')%画出距离变换之后的结果
 title('Distance transform of ~bw')%标题
 D = -D;%对距离变换之后的结果求负值,因为盆地涨水过程是从低到高,灰度值就从小到大
%  D(~bw) = -Inf;%把~bw中1的部分全部置为-Inf,也可以在下面让L(~bw)=0
 % 功能:分水岭变换
 % 用法:L = watershed(A) 
 % 输入:A——输入矩阵(任意维数)
 % 输出:L——分水岭标记矩阵
 % 注:L为整数(>=0),标记0不属于分水岭区域,标记1属于第1个分水岭区域,标记2属于第2个分水岭区域,以此类推。
 % 默认对二维矩阵使用8连通,三维矩阵使用26连通,高维矩阵使用conndef(ndims(A),'maximal')来定义连通性。
 % 
 % L = watershed(A, conn) specifies the connectivity to be used in the watershed computation. conn can have any of the following scalar values.
 % 输入:A——输入矩阵、conn——连通性
 % 输出:L——分水岭标记矩阵 
 L = watershed(D); %-1的位置置为0,其他位置分别为1,2,3
 L(~bw)=0
 %  功能:转换标记矩阵到RGB图像
 % 用法:RGB = label2rgb(L) 
 % 输入:L——标记矩阵(可由labelmatrix, bwlabel, bwlabeln, watershed返回) 
 % 输出:RGB——彩色图像
 % 注:根据L的数值对应,默认对应到colormap(jet)的色彩,返回RGB矩阵 
 % RGB = label2rgb(L, map)
 % 输入:L——标记矩阵(可由labelmatrix, bwlabel, bwlabeln, watershed返回)、map——颜色映射表 
 % 输出:RGB——彩色图像
 % 注:map为n*3的矩阵,可以通过MATLAB的colormap函数来返回,比如colormap('jet')等。也可以根据要求自己定义。默认为colormap(jet)。 
 % RGB = label2rgb(L, map, zerocolor) defines the RGB color of the elements labeled 0 (zero) in the input label matrix L. As the value of zerocolor, specify an RGB triple or one of the strings listed in this table.
 % 输入:L——标记矩阵(可由labelmatrix, bwlabel, bwlabeln, watershed返回)、map——颜色映射表、zerocolor——对应于标记0的颜色 
 % 输出:RGB——彩色图像 b
 % 注:zerocolor可以取值如表1.1,默认为[1 1 1],即白色。 
 % 表1.1 取值列表 
 %  Value % Color 
 %  'b'   %  蓝色
 %  'c'   %  蓝绿色
 %  'g'   %  绿色
 %  'k'   %  黑色
 %  'm'   %  洋红色
 %  'r'   %  红色
 %  'w'   %  白色
 %  'y'   %  黄色
 % RGB = label2rgb(L, map, zerocolor, order)
 % 输入:L——标记矩阵(可由labelmatrix, bwlabel, bwlabeln, watershed返回)、map——颜色映射表、zerocolor——对应于标记0的颜色、order——标记矩阵和颜色映射表对应方式
 % 输出:RGB——彩色图像 
 % 注:order默认为noshuffle,即根据L的数值来对应颜色。另外可以取值为shuffle,说明使用伪随机方式来对应。
 rgb = label2rgb(L,'jet',[.5 .5 .5]);%label2rgb(L, map, zerocolor) ,@jet彩色 @gray灰色
 figure, imshow(rgb,'InitialMagnification','fit')
 title('Watershed transform of D')

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值