原图与分割结果

主程序:
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

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





