【图像分割】基于matlab DBSCAN算法超像素分割【含Matlab源码 515期】

举报
海神之光 发表于 2022/05/29 02:33:23 2022/05/29
【摘要】 一、获取代码方式 获取代码方式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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。