图像分割——超像素(Superpixels)分割(Matlab)

本文介绍了一种使用Superpixels算法进行图像分割的方法,通过提取RGB颜色分量并设置种子点数量和颜色与空间距离相关性参数,实现了图像的高效分割。

原图与分割结果

          

主程序:

clc;
clear all;
close all;
%用Superpixels算法对图像进行分割
I=imread('D:\Gray Files\lena.jpg');

%提取各颜色分量
B = double(I(:,:,3));
G = double(I(:,:,2));
R = double(I(:,:,1));
%种子点数量
num_seeds=200;
%颜色与空间距离相关性
compactness=40;
%计算超像素
labels=SLIC(num_seeds,compactness,R,G,B);
%边界线检测
points=FindAroundLine(labels);
%将边界点设置为白色
while ~isempty(points)
    p=points(1,:);
    R(p(1),p(2))=255;
    G(p(1),p(2))=255;    
    B(p(1),p(2))=255;    
    points(1,:)=[];
end
I(:,:,1)=R;
I(:,:,2)=G;
I(:,:,3)=B;
imshow(I)
% imwrite(I,'D:\Gray Files\10-52-Superpixel.tif','tif');

超像素计算函数,SLIC如下:

%SLIC算法
%输入参数:
%I  为RGB图像
%numseeds  种子点数量
%compactness  颜色与空间距离相关性
function [labels]=SLIC(num_seeds,compactness,R,G,B)
    [M,N]=size(R);
    %图像总的像素数量
    n_tp=M*N;
    %步进的间隔,补0.5的误差
    step=floor(sqrt(n_tp/num_seeds)+0.5);    
    %计算种子点及数量
    [seeds,num_seeds]=GetSeeds(step,M,N,R,G,B);
    %计算超像素集合
    [seeds,labels]=SuperpixelSLIC(seeds,num_seeds,M,N,step,compactness,R,G,B);
    %强制类别连通
    k=floor(M*N/(step*step));
    labels=EnforceLabelConnectivity(labels,M,N,num_seeds,k);
end
%%调整图像的种子点 
%输入参数:
%         step  步进间隔
%         M     图像的高度
%         N     图像的宽度
%         R     颜色R分量
%         G     颜色G分量
%         B     颜色B分量
function [seeds,num_seeds]=GetSeeds(step,M,N,R,G,B)
    %种子点集合,分别为R,G,B,x,y
    seeds=zeros(1,5);
    %注意,这里的x,y与实际相反
    %计算坐标误差
    xstrips=floor(M/step);
    ystrips=floor(N/step);
    %计算x坐标误差
    xerr=floor(M-ste
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值