【计算机视觉基础】最大核聚类,采用Canny等边缘滤波方法对图像边缘提取,提取图像的Harris角点特征并进行沃罗诺伊与德劳内网格划分,显示沃罗诺伊划分的最大核聚类,详细的最大核聚类计算算法

本文主要是介绍【计算机视觉基础】最大核聚类,采用Canny等边缘滤波方法对图像边缘提取,提取图像的Harris角点特征并进行沃罗诺伊与德劳内网格划分,显示沃罗诺伊划分的最大核聚类,详细的最大核聚类计算算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 问题描述如下:

  1. 分别采用Sobel、Prewitt、Canny边缘滤波方法对一张彩色进行边缘特征提取,并分别显示对应的边缘图像,
  2. 获取要求1中彩色图像上的Harris角点特征,基于生成的角点特征对要求1生成的Canny边缘图像进行德劳内网格划分与沃罗诺伊网格划分,要求两种划分分别单独显示在边缘检测结果图像上;
  3. 编写代码实现要求2中沃罗诺伊网格划分的最大核聚类:挑选并显示该沃罗诺伊网格划分的最大核取类结果;或指定沃罗诺伊网格划分图像中的某个沃罗诺伊区域为核,生成并显示该核的最大核聚类结果;这里实现最大核聚类的方法采用遍历每一个沃罗诺伊网格,选出最大的沃罗诺伊网格作为核并生成最大核聚类。

实现的程序代码如下: 

clear
clc
%% 1、三种滤波方法提取边缘特征
I=imread('peppers.png');
Igy=rgb2gray(I);
Isob=edge(Igy,'Sobel');
Iprew=edge(Igy,'Prewitt');
Icany=edge(Igy,'Canny');
figure('Name','边缘特征提取','NumberTitle','off')
subplot(221),imshow(I),title('原彩色图像')
subplot(222),imshow(~Isob),title('Sobel滤波器提取边缘')
subplot(223),imshow(~Iprew),title('Prewitt滤波器提取边缘')
subplot(224),imshow(~Icany),title('Canny滤波器提取边缘')
%% 2、德劳内剖分与沃罗诺伊剖分
corns=detectHarrisFeatures(Igy);
corns2=corns.Location;
corns2=double(corns2);
TC=delaunay(corns2(:,1),corns2(:,2));
figure('Name','德劳内与沃罗诺伊','NumberTitle','off')
subplot(121),imshow(~Icany),title('德劳内网格划分'),hold on
triplot(TC,corns2(:,1),corns2(:,2),'b-')
subplot(122),imshow(~Icany),title('沃罗诺伊网格划分'),hold on
voronoi(corns2(:,1),corns2(:,2),'r'),hold on%% 3、最大核聚类
[v,p]=voronoin(corns2);#得到voronoi网格顶点的坐标矩阵和voronoi网格顶点的坐标矩阵中的行索引的单元数组
for i=1:length(p)
chdu(i)=length(p{i,1});
end
chadu=chdu';
[z,wz]=max(chadu);
figure('Name','最大核聚类','NumberTitle','off')
imshow(~Icany),hold on
suoyin=p{wz,1};
julei=v(suoyin,:);
jleix=[julei(:,1)' julei(1,1)];
jleiy=[julei(:,2)' julei(1,2)];
m=1;
for i=1:length(p)#挑选与最大核相连的沃罗诺伊网格A=p{i,1};for k=1:length(suoyin)B=find(A==suoyin(k));if isempty(B)==0jlyuan{m,1}=A;m=m+1;endend
end
for i=1:length(jlyuan)ljieyb=v(jlyuan{i,1},:);patch(ljieyb(:,1),ljieyb(:,2),'y'),hold on
end
plot(jleix,jleiy,'Color','c','LineWidth',3)
patch(jleix,jleiy,'m'),hold on
voronoi(corns2(:,1),corns2(:,2),'r'),hold on
plot(corns2(wz,1),corns2(wz,2),'b'),hold on

程序算法原理如下 :

  1. 我首先使用函数rgb2gray将彩色图像转换为灰度图像,然后使用函数edge对灰度图像进行边缘特征提取,首先将函数edge的参数method设为‘Sobel’,获得图像通过Sobel滤波方法进行边缘特征提取得到的边缘图像,然后分别将此参数设为‘Prewitt’和‘Canny’,分别获得图像通过Prewitt和Canny滤波方法进行边缘特征提取得到的边缘图像,最后使用函数imshow显示获得的各边缘图像的负像,负像看起来更清晰。检测结果的差异性我将在实验总结中进行分析。
  2. 对灰度后图像使用函数detectHarrisFeatures获得使用Harris方法计算的步骤1中彩色图像的图像角点,然后使用函数delaunay创建图像的Harri角点的二维德劳内三角剖分,先使用函数imshow显示步骤1中的Canny边缘图像的负像,并使用命令hold on保持,再使用函数triplot显示德劳内三角剖分,从而获得边缘图像上的德劳内网格划分;再然后使用函数voronoi将Harris角点的沃罗诺伊网格绘制在Canny边缘图像上,获得边缘图像上的沃罗诺伊网格划分。结果分析将在实验总结中说明。
  3. 首先我使用函数voronoin(详细介绍请在matlab命令窗口输入doc+voronoin,函数voronoin与voronoi不同)获得图像Harris角点的voronoi网格顶点的坐标矩阵和保存了所有voronoi元胞的所有voronoi顶点在voronoi网格顶点的坐标矩阵中的行索引的单元数组,一个元胞就是一个沃罗诺伊网格,而以某个元胞为核的聚类的大小可以通过其边的数量确定,而元胞的voronoi顶点的数量同样对应着边的数量,所以我要通过元胞的voronoi顶点的索引的数量,也就是单元数组中保存的行索引数组的长度来判断以某个元胞为核的聚类的大小,进而来寻找最大核聚类的核,所以直接在单元数组中遍历一遍计算每行索引数组的长度,然后使用函数max获得具有最大的长度的行索引数组在单元数组中的位置,利用位置在单元数组中读取这个行索引数组,这个行索引数组就是最大核聚类的核的所有voronoi顶点的行索引数组,然后利用其行索引数组在保存了voronoi网格顶点的坐标矩阵中读取最大核聚类的核的所有voronoi顶点的坐标,至此就在图像的沃罗诺伊网格划分中找到了最大核聚类的核对应的元胞;再利用上述相似的方法,利用元胞的顶点去锁定一个元胞,来寻找出最大核聚类中出了核之外的元胞,因为在最大核聚类中的元胞肯定有一个voronoi顶点与核的voronoi顶点相同,那么就是说在最大核聚类的所有元胞的voronoi顶点的行索引数组中都会有与核的voronoi顶点的行索引数组中的元素,所以遍历保存了voronoi顶点的行索引数组的单元数组,找出所有包含了最大核聚类的核的voronoi顶点的行索引数组元素的行索引数组,通过这些行索引数组就可以在保存了voronoi网格顶点的坐标矩阵中读取最大核聚类的所有voronoi顶点的在图像中的坐标,所以就锁定了整个最大核聚类,最后先使用函数imshow显示Canny边缘图像并保持,再使用函数patch利用获得最大核聚类中所有元胞的voronoi顶点坐标对最大核聚类区域改变颜色,以显示最大核聚类,再使用patch函数利用最大核聚类的核的voronoi顶点对核对应的元胞改变颜色,以显示最大核聚类核。

程序运行结果如下:

1、三种滤波方法提取边缘特征

2、德劳内剖分与沃罗诺伊剖分

 3、沃罗诺伊最大核聚类

 最大核聚类算法比较复杂,在算法原理中的描述比较详细,仔细阅读同时运行程序,利用matlab的帮助窗口,可以找到我在算法原理中的一些属性的描述,也可以通过工作区的变量进行查看,查看这些变量的属性,算法适用于所有图像,可以计算出任意一幅图像的最大核聚类,并在沃罗诺伊划分上显示。(matlab帮助窗口使用:doc+函数名。可以得到更加详细的用法介绍),如有其他疑问欢迎留言提问或者私信博主。

 别忘了给博主点个赞哦!

关注博主,学习更多计算机视觉与图像处理知识!

原创内容,未经允许不得转载!

最大核聚类算法属于博主原创方法。 

这篇关于【计算机视觉基础】最大核聚类,采用Canny等边缘滤波方法对图像边缘提取,提取图像的Harris角点特征并进行沃罗诺伊与德劳内网格划分,显示沃罗诺伊划分的最大核聚类,详细的最大核聚类计算算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/338277

相关文章

Python+wxPython构建图像编辑器

《Python+wxPython构建图像编辑器》图像编辑应用是学习GUI编程和图像处理的绝佳项目,本教程中,我们将使用wxPython,一个跨平台的PythonGUI工具包,构建一个简单的... 目录引言环境设置创建主窗口加载和显示图像实现绘制工具矩形绘制箭头绘制文字绘制临时绘制处理缩放和旋转缩放旋转保存编

Springboot实现推荐系统的协同过滤算法

《Springboot实现推荐系统的协同过滤算法》协同过滤算法是一种在推荐系统中广泛使用的算法,用于预测用户对物品(如商品、电影、音乐等)的偏好,从而实现个性化推荐,下面给大家介绍Springboot... 目录前言基本原理 算法分类 计算方法应用场景 代码实现 前言协同过滤算法(Collaborativ

Java版本不兼容问题详细解决方案步骤

《Java版本不兼容问题详细解决方案步骤》:本文主要介绍Java版本不兼容问题解决的相关资料,详细分析了问题原因,并提供了解决方案,包括统一JDK版本、修改项目配置和清理旧版本残留等步骤,需要的朋... 目录错误原因分析解决方案步骤第一步:统一 JDK 版本第二步:修改项目配置第三步:清理旧版本残留兼容性对

exfat和ntfs哪个好? U盘格式化选择NTFS与exFAT的详细区别对比

《exfat和ntfs哪个好?U盘格式化选择NTFS与exFAT的详细区别对比》exFAT和NTFS是两种常见的文件系统,它们各自具有独特的优势和适用场景,以下是关于exFAT和NTFS的详细对比... 无论你是刚入手了内置 SSD 还是便携式移动硬盘或 U 盘,都需要先将它格式化成电脑或设备能够识别的「文

python+OpenCV反投影图像的实现示例详解

《python+OpenCV反投影图像的实现示例详解》:本文主要介绍python+OpenCV反投影图像的实现示例详解,本文通过实例代码图文并茂的形式给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前言二、什么是反投影图像三、反投影图像的概念四、反向投影的工作原理一、利用反向投影backproj

史上最全nginx详细参数配置

《史上最全nginx详细参数配置》Nginx是一个轻量级高性能的HTTP和反向代理服务器,同时也是一个通用代理服务器(TCP/UDP/IMAP/POP3/SMTP),最初由俄罗斯人IgorSyso... 目录基本命令默认配置搭建站点根据文件类型设置过期时间禁止文件缓存防盗链静态文件压缩指定定错误页面跨域问题

nginx负载均衡及详细配置方法

《nginx负载均衡及详细配置方法》Nginx作为一种高效的Web服务器和反向代理服务器,广泛应用于网站的负载均衡中,:本文主要介绍nginx负载均衡及详细配置,需要的朋友可以参考下... 目录一、 nginx负载均衡策略1.1 基本负载均衡策略1.2 第三方策略1.3 策略对比二、 nginx配置2.1

springboot集成Lucene的详细指南

《springboot集成Lucene的详细指南》这篇文章主要为大家详细介绍了springboot集成Lucene的详细指南,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起... 目录添加依赖创建配置类创建实体类创建索引服务类创建搜索服务类创建控制器类使用示例以下是 Spring

Flutter实现文字镂空效果的详细步骤

《Flutter实现文字镂空效果的详细步骤》:本文主要介绍如何使用Flutter实现文字镂空效果,包括创建基础应用结构、实现自定义绘制器、构建UI界面以及实现颜色选择按钮等步骤,并详细解析了混合模... 目录引言实现原理开始实现步骤1:创建基础应用结构步骤2:创建主屏幕步骤3:实现自定义绘制器步骤4:构建U

windows和Linux使用命令行计算文件的MD5值

《windows和Linux使用命令行计算文件的MD5值》在Windows和Linux系统中,您可以使用命令行(终端或命令提示符)来计算文件的MD5值,文章介绍了在Windows和Linux/macO... 目录在Windows上:在linux或MACOS上:总结在Windows上:可以使用certuti