【计算机视觉基础】最大核聚类,采用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

相关文章

基于C#实现PDF转图片的详细教程

《基于C#实现PDF转图片的详细教程》在数字化办公场景中,PDF文件的可视化处理需求日益增长,本文将围绕Spire.PDFfor.NET这一工具,详解如何通过C#将PDF转换为JPG、PNG等主流图片... 目录引言一、组件部署二、快速入门:PDF 转图片的核心 C# 代码三、分辨率设置 - 清晰度的决定因

Java中HashMap的用法详细介绍

《Java中HashMap的用法详细介绍》JavaHashMap是一种高效的数据结构,用于存储键值对,它是基于哈希表实现的,提供快速的插入、删除和查找操作,:本文主要介绍Java中HashMap... 目录一.HashMap1.基本概念2.底层数据结构:3.HashCode和equals方法为什么重写Has

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装

Java使用正则提取字符串中的内容的详细步骤

《Java使用正则提取字符串中的内容的详细步骤》:本文主要介绍Java中使用正则表达式提取字符串内容的方法,通过Pattern和Matcher类实现,涵盖编译正则、查找匹配、分组捕获、数字与邮箱提... 目录1. 基础流程2. 关键方法说明3. 常见场景示例场景1:提取所有数字场景2:提取邮箱地址4. 高级

Python文本相似度计算的方法大全

《Python文本相似度计算的方法大全》文本相似度是指两个文本在内容、结构或语义上的相近程度,通常用0到1之间的数值表示,0表示完全不同,1表示完全相同,本文将深入解析多种文本相似度计算方法,帮助您选... 目录前言什么是文本相似度?1. Levenshtein 距离(编辑距离)核心公式实现示例2. Jac

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.

Python 字符串裁切与提取全面且实用的解决方案

《Python字符串裁切与提取全面且实用的解决方案》本文梳理了Python字符串处理方法,涵盖基础切片、split/partition分割、正则匹配及结构化数据解析(如BeautifulSoup、j... 目录python 字符串裁切与提取的完整指南 基础切片方法1. 使用切片操作符[start:end]2

MySQL中优化CPU使用的详细指南

《MySQL中优化CPU使用的详细指南》优化MySQL的CPU使用可以显著提高数据库的性能和响应时间,本文为大家整理了一些优化CPU使用的方法,大家可以根据需要进行选择... 目录一、优化查询和索引1.1 优化查询语句1.2 创建和优化索引1.3 避免全表扫描二、调整mysql配置参数2.1 调整线程数2.