matlab代码如下
图像最好小一点,不然因为那个距离矩阵为(mn)(m*n)真的很慢很慢,运算上亿次了,电脑根本跑不动。

clear
close allIy=imread('1.jpg');
figure;imshow(Iy);
I = imresize(Iy,[53 33]);
figure, imshow(I);  % 读入分割目标
img_gray=rgb2gray(I);%灰度化% 获取图像的长宽
[m,n]=size(img_gray);A = reshape(I(:, :, 1), m*n, 1);    % 将RGB分量各转为kmeans使用的数据格式m*n行,一行一样本
B = reshape(I(:, :, 2), m*n, 1);
C = reshape(I(:, :, 3), m*n, 1);
data = [A B C];
dat=mat2gray(data);%归一化distance_all=[];
z=1;
pn=m*n;for i =1: pnfor j = 1:pny=(dat(i,1)-dat(j,1))^2+(dat(i,2)-dat(j,2))^2+(dat(i,3)-dat(j,3))^2;y=double(y);dist(i,j)=sqrt(y);%把距离放入了矩阵           distance_all(z)= sqrt(y);%把距离放入一个长的地方进行排序z=z+1;end
end%% 确定 dc
percent=2.0;
position=round(length(distance_all)*percent/100);   %% round 是一个四舍五入函数
sda=sort(distance_all);   %% 对所有距离值作升序排列
dc=sda(position);%% 计算局部密度 rho (利用 Gaussian 核)%% 将每个数据点的 rho 值初始化为零
for i=1:pnp(i)=0.;
end
% Gaussian kernel
%for i=1:pn-1
% for j=i+1:pn
%     p(i)=p(i)+exp(-(dist(i,j)/dc)*(dist(i,j)/dc));
%     p(j)=p(j)+exp(-(dist(i,j)/dc)*(dist(i,j)/dc));
%  end
%end
% "Cut off" kernel
%
for i=1:pn-1for j=i+1:pnif (dist(i,j)<dc)p(i)=p(i)+1.;p(j)=p(j)+1.;endend
end%% 先求矩阵列最大值,再求最大值,最后得到所有距离值中的最大值
maxd=max(max(dist));
%% 将 rho 按降序排列,ordrho 保持序
[rho_sorted,ord]=sort(p,'descend');
%% 处理 rho 值最大的数据点
delta(ord(1))=-1.;
nneigh(ord(1))=0;%% 生成 delta 和 nneigh 数组
for i=2:pndelta(ord(i))=maxd;for j=1:i-1if(dist(ord(i),ord(j))<delta(ord(i)))delta(ord(i))=dist(ord(i),ord(j));nneigh(ord(i))=ord(j);% 记录 rho 值更大的数据点中与 ordrho(ii) 距离最近的点的编号 ordrho(jj)endend
end%% 生成 p 值最大数据点的 delta 值
delta(ord(1))=max(delta(:));%% 决策图fid = fopen('DECISION_GRAPH', 'w');
for i=1:pnfprintf(fid, '%6.2f %6.2f\n', p(i),delta(i));
end%% 选择一个围住类中心的矩形0scrsz = get(0,'ScreenSize');%% 人为指定一个位置
figure('Position',[6 72 scrsz(3)/4. scrsz(4)/1.3]);%% ind 和 gamma 在后面并没有用到
for i=1:pnind(i)=i;gamma(i)=p(i)*delta(i);
end%% 利用 rho 和 delta 画出一个所谓的“决策图”
subplot(1,1,1)
tt=plot(p(:),delta(:),'.','MarkerSize',5,'MarkerFaceColor','k','MarkerEdgeColor','k');
axis([0,max(p),0,max(delta)]);fig=subplot(1,1,1);
rect = getrect(fig);%% getrect 从图中用鼠标截取一个矩形区域, rect 中存放的是
%% 矩形左下角的坐标 (x,y) 以及所截矩形的宽度和高度
rhomin=rect(1);
deltamin=rect(2); %% 作者承认这是个 error,已由 4 改为 2 了!%% 初始化 cluster 个数
ncluster=0;%% cl 为归属标志数组,cl(i)=j 表示第 i 号数据点归属于第 j 个 cluster
%% 先统一将 cl 初始化为 -1
for i=1:pncl(i)=-1;
end%% 在矩形区域内统计数据点(即聚类中心)的个数
for i=1:pnif ( (p(i)>rhomin) && (delta(i)>deltamin))ncluster=ncluster+1;cl(i)=ncluster;  %% 第 i 号数据点属于第 NCLUST 个 clustericl(ncluster)=i; %% 逆映射,第 NCLUST 个 cluster 的中心为第 i 号数据点 end
end
fprintf('总共有多少类: %i \n', ncluster);%% 将其他数据点归类 (assignation)
for i=1:pnif (cl(ord(i))==-1)cl(ord(i))=cl(nneigh(ord(i)));end
end
%halo
%% 由于是按照 p值从大到小的顺序遍历,循环结束后, cl 应该都变成正的值了.
for i=1:pnhalo(i)=cl(i);
end
if (ncluster>1)% 初始化数组 bord_rho 为 0,每个 cluster 定义一个 bord_rho 值for i=1:nclusterbord_rho(i)=0.;end% 获取每一个 cluster 中平均密度的一个界 bord_rhofor i=1:pn-1for j=i+1:pn%% 距离足够小但不属于同一个 cluster 的 i 和 jif ((cl(i)~=cl(j))&& (dist(i,j)<=dc))rho_aver=(p(i)+p(j))/2.;  %% 取 i,j 两点的平均局部密度if (rho_aver>bord_rho(cl(i))) bord_rho(cl(i))=rho_aver;endif (rho_aver>bord_rho(cl(j))) bord_rho(cl(j))=rho_aver;endendendend%% halo 值为 0 表示为 outlierfor i=1:pnif (p(i)<bord_rho(cl(i)))halo(i)=0;endend
end%% 逐一处理每个 cluster
for i=1:nclusternc=0;  %% 用于累计当前 cluster 中数据点的个数nh=0;  %% 用于累计当前 cluster 中核心数据点的个数for j=1:pnif (cl(j)==i) nc=nc+1;endif (halo(j)==i) nh=nh+1;endendfprintf('类: %i CENTER: %i 数据点个数: %i 核心点: %i 边界点: %i \n', i,icl(i),nc,nh,nc-nh);
end
cmap=colormap;for i=1:nclusteric=int8((i*64.)/(ncluster*1.));subplot(1,1,1)hold onplot(p(icl(i)),delta(icl(i)),'o','MarkerSize',8,'MarkerFaceColor',cmap(ic,:),'MarkerEdgeColor',cmap(ic,:));axis([0,max(p),0,max(delta)]);
endpixel_labels = reshape(cl,m,n);
rgb_labels = label2rgb(pixel_labels);
figure, imshow(rgb_labels), title('Segmented Image');%for i=1:ND
%   if (halo(i)>0)
%      ic=int8((halo(i)*64.)/(NCLUST*1.));
%      hold on
%      plot(Y1(i,1),Y1(i,2),'o','MarkerSize',2,'MarkerFaceColor',cmap(ic,:),'MarkerEdgeColor',cmap(ic,:));
%   end
%end
faa = fopen('CLUSTER_ASSIGNATION', 'w');for i=1:pnfprintf(faa, '%i %i %i\n',i,cl(i),halo(i));
endclt=transpose(cl);
eva= evalclusters(dat,clt,'DaviesBouldin');
disp(eva);

matlab实现基于DPCA密度峰值算法的图像分割相关推荐

  1. DPCA 密度峰值聚类记录

    密度峰值算法(Clustering by fast search and find of density peaks),一种基于密度的聚类方法,主要思想是寻找被低密度区域分离的高密度区域. 密度峰值算 ...

  2. 惯性gps组合导航matlab,Strong-tracking-filter 基于强跟踪滤波算法的惯性加GPS组合导航matlab仿真程序 238万源代码下载- www.pudn.com...

    文件名称: Strong-tracking-filter下载 收藏√  [ 5  4  3  2  1 ] 开发工具: matlab 文件大小: 82 KB 上传时间: 2013-09-01 下载次数 ...

  3. matlab ahe,基于直方图的图像增强算法(HE、CLAHE、Retinex)之(二)

    作为图像增强算法系列的第二篇文章,下面我们将要介绍功能强大.用途广泛.影响深远的对比度有限的自适应直方图均衡(CLAHE,Contrast Limited Adaptive Histogram Equ ...

  4. 基于密度峰值的聚类(DPCA)

    1.背景介绍 密度峰值算法(Clustering by fast search and find of density peaks)由Alex Rodriguez和Alessandro Laio于20 ...

  5. 密度峰值聚类算法(DPC)

    目录 前言 一.DPC算法 1.1 DPC算法的两个假设 1.2 DPC算法的两个重要概念 1.3 DPC算法的执行步骤 1.4 DPC算法的优缺点 二.改进的DPC算法及其论文 2.1 局部密度和相 ...

  6. 峰值云变换matlab代码,一种基于密度峰值的云变换方法与流程

    本发明涉及一种基于密度峰值的云变换方法,属于数字图像数据处理技术. 背景技术: 粒计算是基于多层次粒结构研究思维方式.问题求解方法.信息处理模式的理论,早在1997年,Zadeh教授就提出了粒计算是模 ...

  7. 基于密度聚类算法的改进

    基于密度算法的改进 本篇博客来自我的github小项目,如果对您有帮助,希望您前去点星 ! 使用基于密度的聚类算法,进行高维特征的聚类分析,从高维数据中提取出类似的有用信息,从而简化了特征数量,并且去 ...

  8. matlab girvan newman,基于含权Newman算法的交通控制子区划分

    1. 引言 如何根据交通网络的拓扑结构和交通流的网络分布特征,将庞大且复杂的路网划分成若干独立的子区,有效实现子区上的信号控制,使得整个路网系统变得更加高效.可靠和灵活,一直备受研究者关注.自1971 ...

  9. (转载)基于TDOA声源定位算法仿真–MATLAB仿真

    (转载)基于TDOA声源定位算法仿真–MATLAB仿真 转载自:https://blog.xxcxw.cn/archives/28 声源定位算法是利用麦克风阵列进行声音定位,属于宽带信号,传统的MUS ...

最新文章

  1. C# 各种进制之间相互转换 [ZT]
  2. 河北传媒学院计算机专业分数线,河北传媒学院2019年各省各专业录取分数
  3. CentOS6.4下安装TeamViewer8
  4. python3.7.3安装教程和配置idle_python 3.7.0 安装配置方法图文教程
  5. mysql存储过程 --游标的使用 取每行记录 (多字段)
  6. Office在线预览及PDF在线预览的实现方式大集合
  7. matlab 高阶(二) —— 数值、溢出问题的解决
  8. 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第1节 常用函数接口_7_常用的函数式接口_Supplier接口...
  9. 远程文件传输工具Filezilla
  10. Windows10 文件夹按分组排序
  11. 点击微信内网页a标签直接跳转打开淘宝APP的方法实例
  12. 联想拯救者y7000电脑开机一直是锁屏界面,点一下就黑屏,无法进入输密码界面
  13. C# 生成图片缩略图
  14. gallery3d的源码分析——入口
  15. 代码战争之友人与敌人
  16. ZCMU 1600: 卡斯丁狗要吃糖葫芦
  17. Vue-Quill-Editor 回显 html 图片样式显示不出来
  18. 实例说明图像的灰度化和二值化的区别
  19. JanusGraph环境搭建实战
  20. 迁移学习(一):相关数据集介绍

热门文章

  1. 计算机安全监察word,全国计算机统考押题计算机安全
  2. IFB上挂载NETEM
  3. Oracle 数据库12c 新特性总结
  4. 使用fetch上传文件失败的解决方案
  5. Codeforces 480D Parcels(dp)
  6. [十大排序]有的人图画着画着就疯了(1.5w字详细分析+动图+源码)
  7. linux卸载phpstudy_centos
  8. 题目汇总(ACWing)
  9. 2020 杭电多校5 1007、1008、1011
  10. 彻底解决安装包过程中的Requirement already satisfied:问题