计算机视觉中的计算几何

计算几何领域出现于 20 世纪 70 年代,研究解决几何问题的数据结构和算法。这尤其包括确定图像内的拓扑结构,或者实际上是更高维的表示,例如点邻域,这可以帮助从数字图像数据等中导出几何意义[1]。

计算机视觉主要涉及静态或动态图像处理、理解和重建[3]。由于深度神经网络驱动的算法提供了令人印象深刻的、超人类的结果,目标识别(分类)、目标检测(分类和定位)和目标分割(分类、定位和边界检测)的计算机视觉应用领域一直受到欢迎。研究和工业界的关注不断增加。

毫不奇怪,考虑到这些重叠的兴趣领域,计算几何为计算机视觉及其对应领域计算机图形学领域提供了有用的概念。一组点的 Voronoi 图(又称为 Dirichlet 曲面细分、Voronoi 曲面细分或 Voronoi 划分)及其对偶点的 Delaunay 三角剖分(又称为 Delone 三角剖分)是此类有用概念的示例 [1, 2]。相关的计算机视觉应用包括人脸识别、人脸变形、图像合成和表面建模。在这篇博文中,我们演示了如何使用图像中人脸的 Delaunay 三角剖分/Voronoi 图作为人脸识别或人脸变形等应用的先驱。

让我们从定义开始。

NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - Three.js虚拟轴心开发包 - 3D模型在线减面 - STL模型在线切割 

1、Voronoi图

Voronoi图将域划分为一组点的最近邻域。考虑点集 P = {p₁, p2, …, pₙ} ∈ ℝ²。将 pᵢ, pⱼ ∈ P, pᵢ ≠ pⱼ 的平分线 BS(pᵢ, pⱼ) 定义为距离函数 d 中相对于 pᵢ, pⱼ 的等距轨迹,即 BS(pᵢ,pⱼ) = {q ∈ P : d( pᵢ,q) = d(pⱼ,q)}。令 pᵢ 相对于 pⱼ 的优势区域 D(pᵢ,pⱼ) 表示包含由 BS(pᵢ,pⱼ) 界定的 pᵢ 的区域。给定 P 的 pᵢ 的 Voronoi 区域定义为:

并且由到 pᵢ 的距离小于或等于到任何其他点 pⱼ ∈ P 的距离的所有点组成。一对 Voronoi 区域共享的边界称为 Voronoi 边。 Voronoi 边在 Voronoi 顶点相交。 P 的 Voronoi 图由下式给出:

其中 ∂R(pᵢ,P) 表示 R(pᵢ,P) 的边界。术语有界 Voronoi 图是指 VD(P) 与其基础域的合取。

图 1:欧几里得平面中不同点集的 Voronoi 图以及它们强加在(红色)示例点上的(蓝色)所谓的自然邻域关系

我们将自己限制在欧几里得平面域中的点,例如,参见图 1。然而,Voronoi 图定义可以推广到在没有来自流形 M 的噪声的情况下获取的点 P,即 P ⊂ M 的更一般情况。例如,请参见图 2,了解 3D 流形上点的固有(非欧几里得)Voronoi 图。

类似地,我们没有定义关于距离函数 d 的距离度量:Voronoi 图定义适用于跨流形 M 定义的任何测地距离度量。因此,例如,在欧几里德平面域情况下,标准欧几里德距离函数可用于计算 d(⋅,⋅)。

点集 P = {p₁, p2, …, pₙ} ∈ ℝ² 的 Delaunay 三角剖分由 VD(P) 的对偶图给出,Delaunay 三角剖分的每条边都与 VD(P) 的一条边相关联,即 Delaunay 边连接 VD(P) 中的(自然)相邻点。请参见图 3 的示例。 Delaunay 三角剖分通常存在于欧几里得距离度量以外的度量中,但不能保证存在或明确定义。

图 3:欧几里得平面中一组(黑色)点的(黑色)Delaunay 三角剖分及其对偶(红色)Voronoi 图(来源:维基百科)

我们参考 [1, 2],了解众多 Voronoi 图和 Delaunay 三角剖分变体(例如最远点和加权 Voronoi 图)的概述。出于我们的目的,我们可以将自己限制在它们的标准定义中。接下来我们看看他们的计算实现。

2、我们的实现

我们的实施基于以下核心要素:

  • Python 3(在 Juypter Notebook 环境中使用)
  • 适用于 Python 的 OpenCV 3.4.4.19 包装器包

为了确定面部标志,我们使用 Face++ 的演示功能。 使用你自己的示例图像使用此服务时,请考虑任何隐私问题。

如果你更喜欢基于 C++ 的实现,我们建议你查看 CGAL 及其 Voronoi 和 Delaunay 类。这些应该使以下 Python 编码“翻译”为 C++ 相当简单。 Python 编码的灵感来自 Satya Mallick 的博客文章,也可以在 GitHub 上找到。

除了 OpenCV 包之外,我们还使用 numpy 进行数组处理,使用 matplotlib 进行可视化:

辅助函数 rectContains 确定一个点是否落在矩形描述的图像域内,从而确定是否应将其视为图像 Delaunay 三角剖分的输入。

drawPoint 函数正是这样做的,即它在输入图像 img 上以彩色圆圈的形式显示面部标志 p。

voronoi函数使用subdiv成员函数getVoronoiFacetList来获取并随后根据输入图像img的初始OpenCV细分subdiv来绘制其Voronoi图。我们为 Voronoi 面可视化设置了随机配色方案。

类似地,delaunay函数在subdiv成员函数getTriangleList的帮助下确定并随后绘制输入图像img的初始Delaunay细分subdiv的三角形:

我们将这些函数应用于图 4 所示的示例图像。面部边界框和相应的面部标志由 Face++ 演示应用程序生成:

该演示服务返回一个 JSON 文件,其中包含服务在图像域内检测到的面部标志的 (x, y) 坐标等。上面显示了图 4 中输入图像的 JSON 提取。

图 4:原始样本图像(左)以及由 Face++ 生成的面部边界框(中)和相关的面部标志(右)

这些面部标志坐标代表 OpenCV 细分函数的输入点。我们通过使用标准 OpenCV imread 方法读取输入图像来开始展示生成。输入图像的矩形形状决定了存储在 rect 中的细分域。地标点以“Face2Points.txt”的形式上传到点数组中。然后,细分本身被实例化,并通过使用细分插入方法一一插入面部标志点来生成。

然后剩下要做的就是调用 delaunay 和 voronoi 函数传递输入图像及其新生成的细分。结果如图 5 所示:

图 5:输入图像的 Delaunay 三角剖分(左)及其对偶 Voronoi 图(右)

图 6 中的动画演示了输入图像一次一个面部标志点的 Delaunay 三角测量过程:

图 6:输入图像的 Delaunay 三角剖分动画

OpenCV subdiv 对象提供了各种用于检索 Delaunay 或 Voronoi 边和顶点的成员函数。详细信息我们参考OpenCV标准文档。这样,这些相当通用的几何结构的各种元素可以轻松地传递到后续图像处理或计算机视觉应用,例如面部分割、识别 [4,5,6] 和变形。

尽管我们在这篇博文中重点关注计算机视觉应用,但请注意,这些几何结构存在大量用例,其范围远远超出了计算机视觉领域,特别包括机器人导航等应用人工智能的其他领域。例如,请参阅[1,2]以获取灵感。

3、参考文献

[1] M. de Berg, O. Cheong, M. van Kreveld, and M. Overmars, Computational Geometry: Algorithms and Applications, 3rd edition, Springer, Berlin, Germany, 2010

[2] F. Aurenhammer, Voronoi Diagrams - A Survey of a Fundamental Geometric Data Structure, ACM Computing Surveys, 23(3), 1991, pp. 345–405

[3] R. Szeliski, Computer Vision: Algorithms and Applications, Springer, London, UK, 2011

[4] A. Cheddad, D. Mohamad, and A. A. Manaf, Exploiting Voronoi diagram properties in face segmentation and feature extraction, Pattern Recognition, Vol. 41, 2008, pp. 3842–3859

[5] M. A. Suhail, M. S. Obaidat, S. S. Ipson, and B. Sadoun, Content-based image segmentation, IEEE Int. Conf. Man Cybern. (SMC), Vol. 5, 2002

[6] M. Burge and W. Burger, Ear biometrics, in: A. Jain, R. Bolle, and S. Pankanti (eds.), Biometrics: Personal Identification in Networked Society, Kluwer Academic, Boston, MA, USA, 1999, pp. 273–285


原文链接:计算几何的机器视觉应用 - BimAnt

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/837971.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA实验项目(一):JAVA面向对象特征性实验

Tips:"分享是快乐的源泉💧,在我的博客里,不仅有知识的海洋🌊,还有满满的正能量加持💪,快来和我一起分享这份快乐吧😊! 喜欢我的博客的话,记得…

C++ | string详解

1、string是什么 string是STL文档的容器之一,是一个自定义类型,是一个类,由类模板basic_string实例化出来的一个类; 类模板basic_string实例化出来了四个类,如下图所示; 实例化出的这四个类不同的是他们的编…

HI-TOP网关HT3S-DCS-MDN在半导体生产线中的RS232温控器与DeviceNet主机台通讯整合应用案例

一、项目背景 在半导体生产线的温度控制环节中,传统的RS232温控器因其稳定的性能和广泛的应用而占据重要地位,然而,由于不同设备厂商使用的通讯协议和标准各异,导致设备间的信息交换存在障碍。温控器的精确控制、设备的互联互通和…

YOLOv8独家改进:逐元素乘法(star operation)二次创新 | 微软新作StarNet:超强轻量级Backbone CVPR 2024

💡💡💡创新点:star operation(元素乘法)在无需加宽网络下,将输入映射到高维非线性特征空间的能力,逐元素乘法(star operation)在性能上始终优于求和,基于star operation块做二次创新 💡💡💡如何跟YOLOv8结合:替代YOLOv8的C2f,结构图如下 收录 YOLOv8…

PyQt5编写的一个简易图像处理软件

文章目录 1. 简介2. 准备工作3. 主界面设计4. 功能构建5. 总结 1. 简介 通过编写简易图像处理软件,你可以学习如何使用 PyQt5 构建用户界面,以及如何与用户交互。同时,你还可以学习图像处理技术,如图像读取、傅里叶变换、滤波、增…

Ansible自动化运维中的User用户管理模块应用详解

作者主页:点击! Ansible专栏:点击! 创作时间:2024年5月14日14点12分 在Ansible中,user 模块主要用于管理系统用户账户。它可以创建、修改、删除用户,并管理用户的属性,比如密码、…

玩机进阶教程------MTK机型重置账号 去除FRP 去除开机密码 清除数据的几种方法步骤解析

目前的机型不管是高通芯片还是MTK芯片。都有账号类限制。包含云账号 frp账号和开机密码等等,他们在线刷包中对应的分区是不同的。例如针对开机图案密码这些,有些机型靠简单的恢复出厂是无效果的,其实对应的解决方法很简单。今天将针对MTK芯片机型的账号问题做个步骤解析。 …

Selenium 自动化 —— 四种等待(wait)机制

更多关于Selenium的知识请访问CSND论坛“兰亭序咖啡”的专栏:专栏《Selenium 从入门到精通》 ​ 目录 目录 需要等待的场景 自己实现等待逻辑 Selenium 提供的三种等待机制 隐式等待(Implicit Waits) 隐式等待的优点 隐式等待的缺点 …

pycharm如何有效读取到win10设置的环境变量

参考链接: 参考文章 该参考文章的第一种方法:设置win10环境变量。 在设置完环境变量后,在pycharm终端上不能有效读取到刚刚设置的环境变量的,需要启动win的cmd,在项目路径下执行脚本。如下所示的对比: cm…

金航标kinghelm萨科微slkor公司发展和品牌传播

为了金航标kinghelm萨科微slkor公司发展和品牌传播,推出了”金航标每日芯闻“与“萨科微每日芯闻“栏目,影响力非常好。这一构想并非一时的灵光乍现,而是经过深思熟虑和充分调研的结果。制定该栏目的模板时候时,就明确了要求语音版…

棒材直线度测量仪 专为圆形产品研发设计 在线无损检测

棒材直线度测量仪采用了先进的技术,能够实现在线无损检测,为生产过程提供了极大的便利。专为圆形产品设计,它能够精确测量棒材的米直线度及外径、椭圆度尺寸,为质量控制提供可靠的数据支持。 在线直线度测量仪不仅具有出色的性能…

Web前端开发 - 4 - CSS3动画

CSS3动画 一、 设计2D变换二、 设计3D变换三、 设计过渡动画四、设计帧动画 一、 设计2D变换 transform : none | <transform-function> /* <transform-function> 设置变换函数&#xff0c;可以是一个或多个变换函数列表。函数包括: martrix(x缩放,x倾斜,y倾斜,y…

刷代码随想录有感(66):回溯算法——组合问题的优化(剪枝)

代码&#xff1a;将for循环中i的搜索范围进行缩小&#xff0c;免去多余的不可能符合条件的操作。 for(int i start; i < n-(k-tmp.size())1;i) 实质是剪枝&#xff0c;拿n4,k4作比较&#xff1a; 显然结果只可能是[1,2,3,4]&#xff0c;选取顺序只可能是1-2-3-4&#xff…

c#多态性的应用

设计一个电脑游戏&#xff0c;游戏中有猪、牛、兔子、青蛙、鸭子等动物&#xff0c;这些动 物都继承于Vertebrata 类&#xff08;脊椎动物类&#xff09;&#xff0c;Vertebrata类有一个抽象方法Display()&#xff0c;每个动 物都从Vertebrata 类那里继承并重写了Display()方法…

windows下mysql5.6下载安装(多实例安装)

目录 1、下载 2、安装步骤 3、mysql多实例安装 1、下载 http://dev.mysql.com/downloads/windows/installer/5.6.html 2、安装步骤 我们采用自定义安装模式&#xff1a;选择32位或64位 默认即可&#xff1a; 说明&#xff0c;如果没有该页面就上一步&#xff0c;选择高级选…

OpenAI推出旗舰AI模型GPT-4o并免费开放

&#x1f989; AI新闻 &#x1f680; OpenAI推出旗舰AI模型GPT-4o并免费开放 摘要&#xff1a; OpenAI 未来的产品将以免费为优先&#xff0c;以让更多人使用为目标。OpenAI 发布了桌面版本的程序和更新后的 UI&#xff0c;更加简单自然。推出了新一代大模型 GPT-4o&#xf…

经典神经网络(8)GAN、CGAN、DCGAN、LSGAN及其在MNIST数据集上的应用

经典神经网络(8)GAN、CGAN、DCGAN、LSGAN及其在MNIST数据集上的应用 1 GAN的简述及其在MNIST数据集上的应用 GAN模型主导了生成式建模的前一个时代&#xff0c;但由于训练过程中的不稳定性&#xff0c;对GAN进行扩展需要仔细调整网络结构和训练考虑&#xff0c;因此GANs虽然在…

金融科技员工一年赚多少钱?富如恒生电子,穷如长亮科技

在本篇文章中&#xff0c;我们继续分析四家金融科技公司的数据&#xff0c;本次站在员工视角来看&#xff08;链接&#xff0c;这四家公司的更详细内容&#xff09;。 先说结论。 2023年&#xff0c;如果你是恒生电子的普通员工&#xff0c;那年薪在35万元&#xff1b;如果你在…

OSPF多区域通信基础实验

基本概念了解&#xff1a; 网络设备接口速率、 Ethernet 100MB GE 1000MB serial接口 1.544MB area 0 骨干区域&#xff08;backbone&#xff09; area 0area0.0.0.0 不是area 0 非骨干区域 ar area 256area 0.0.1.0 实验拓扑如下&#xff1a;要求PC1能够访问PC2 &#xff08;跨…

oracle多条重复数据,取最新的

1、原理讲解-可直接看2 筛选出最新的 SELECT * FROM ( SELECT t.*, ROW_NUMBER() OVER (PARTITION BY LOCALAUTHID ORDER BY LASTUPDATETIME DESC) AS rn FROM USER_LOCALAUTH_STATE t ) t WHERE t.rn 1; 解释&#xff1a; 这个序号是基于[LOCALAUTHID]字段进行分…