GCO3.0的图割分割算法应用(三)

一)准备之前

对于一副图像分割之前,需要确定分割成几类,这里以灰度图像为例(彩色图像略复杂),通常来说分割成几类只有两种情况:事先知道该分成几类或者实现不知道该分成几类(这就是自适应分割了)。该工具箱应该是对于事先知不知道几类的都可以处理,对于自适应分割只要找到对应的分割准则即可。为了简单起见,这里以知道类别数来进行实验。
选择经典的lena图像,并将其分割成5类。回顾下图割理论,关于图割中图的构造主要包括两个部分的边权值:点与类中心之间的权值、点与点之间的权值。对于这两部分都以简单的图像灰度信息来构造,点与类中心之间的权值按照点的灰度值与类中心的灰度值差值的平方来计算。点与点之间的权值也可以直接按照灰度相差来计算的,这里以文献上常用的方法来计算。

二)点与类中心权值-datacost

要计算点与类中心的权值大小,点的灰度知道(原始图像就是),那么需要知道类中心的权值,因此需要对图像进行初始化预分类得到开始的一个分类标签,从而得到初始的类中心。这以kmeans来进行预分类如下:

%k-means预分类找到中心与分类
%init_lable预分类,列向量; ctrs-类中心灰度值值
[init_lable,ctrs] = kmeans(img(:),Numlables); %img(:)通过索引转化为列向量可用

其中Numlables是定义的分类数(5),matlab自带的kmeans方法理论上适用于一维情况,而图像是二维的,因此需要把图像转化以一条长链(一维)才能用,得到的ctrs就是开始的类中心(灰度)。然后需要计算的就是所有点中,每个点相对于每个类中心的边权值。把上节画的图再用一遍,形象的相关权值定义如下:
这里写图片描述
可以看到的datacost,这里每个datacost计算方式为

(IpIc)2
函数如下:

function datacost = Datacost1(img,ctrs)
[m,n] = size(img);
num_lables = size(ctrs,1);
totalsizes = m*n;
datacost = zeros(totalsizes,num_lables);
for i = 1:totalsizes
    Ip = double(img(i));
    for j = 1:num_lables
         datacost(i,j) = (Ip - ctrs(j)).^
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值