【图像分割】基于matlab DBSCAN算法超像素分割【含Matlab源码 515期】
【摘要】
一、获取代码方式
获取代码方式1: 通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。
获取代码方式2: 完整代码已上传我的资源:【图像分割】基于matlab DBSCAN算法超像素分...
一、获取代码方式
获取代码方式1:
通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。
获取代码方式2:
完整代码已上传我的资源:【图像分割】基于matlab DBSCAN算法超像素分割【含Matlab源码 515期】
备注:
订阅紫极神光博客付费专栏,可免费获得1份代码(有效期为订阅日起,三天内有效);
二、图像分割简介
理论知识参考:【基础教程】基于matlab图像处理图像分割【含Matlab源码 191期】
三、部分源代码
%======================================================================
clear all;
close all;
currentFolder = pwd;
addpath(genpath(currentFolder))
addpath('code');
addpath('imgs');
name='107072';
im = imread([name,'.jpg']);
post=1;
img = uint8(im);
number_superpixels =500;
tic;
label = DBscan_mex(img,number_superpixels,post);
toc;
SuperpixelSave(label,im,name);
DisplaySuperpixel(label,im,name);
image=rgb2gray(img);
G=imbinarize(image);
B = imresize(G, 0.125);
%% 这是Roberts算子
sourcePic=imread('C:\Users\dell\Desktop\Semantic dataset100\Semantic dataset100\ground-truth\3096.png');
J = imresize(sourcePic, 0.125);
grayPic=mat2gray(J); %转换成灰度图像
[m,n]=size(grayPic);
newGrayPic=grayPic;%为保留图像的边缘一个像素
robertsNum=0; %经roberts算子计算得到的每个像素的值
robertThreshold=0.2; %设定阈值
for j=1:m-1 %进行边界提取
for k=1:n-1
robertsNum = abs(grayPic(j,k)-grayPic(j+1,k+1)) + abs(grayPic(j+1,k)-grayPic(j,k+1));
if(robertsNum > robertThreshold)
newGrayPic(j,k)=255;
else
newGrayPic(j,k)=0;
end
end
end
A=imbinarize(newGrayPic);
sum1=0;
sum2=0;
[m,n]=size(A);%lb=length(Y);
%[r,k]=size(B);
for i=1:n
%for q=1:k
for j=1:m
%for p=1:r
while A(i,j)==1
sum2=sum2+1;
if A(i,j)-B(i,j)<2 || A(i,j)-B(i-1,j-1)<2 || A(i,j)-B(i,j-1)<2||...
A(i,j)-B(i-1,j+1)<2|| A(i,j)-B(i+1,j)<2 || A(i,j)-B(i+1,j+1)<2 ||...
A(i,j)-B(i+1,j)<2||A(i,j)-B(i-1,j+1)<2 ||A(i,j)-B(i-1,j)<2
sum1=sum1+1;
end
function DisplaySuperpixel(label,img,name)
[nRows,nCols,~]=size(img);
for m=1:nRows
for n=1:nCols
L=label(m,n);
count=0;
minx=max(m-1,1);
maxx=min(m+1,nRows);
miny=max(n-1,1);
maxy=min(n+1,nCols);
for u=minx:maxx;
for v=miny:maxy
if(label(u,v)~=L)
count=count+1;
end
if(count==2)
break;
end
end
if(count==2)
break;
end
end
if(count==2)
img(m,n,:)=0;
end
end
end
figure;
imshow(img);
imwrite(img,[name,'result.bmp'],'bmp')
fid=fopen([name,'.txt'],'wt');%写入文件路径
[m,n]=size(label);
for i=1:1:m
for j=1:1:n
if j==n
fprintf(fid,'%g\n',label(i,j));
else
fprintf(fid,'%g\t',label(i,j));
end
end
四、运行结果
五、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.
[5]赵勇,方宗德,庞辉,王侃伟.基于量子粒子群优化算法的最小交叉熵多阈值图像分割[J].计算机应用研究. 2008,(04)
文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。
原文链接:qq912100926.blog.csdn.net/article/details/114782574
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)