用于 C♯ 图像识别的轮廓分析技术
用于 C♯ 图像识别的轮廓分析技术
供稿:Conmajia
标题:Contour Analysis for Image Recognition in C#
作者:Pavel Torgashov
此中文版翻译已获作者本人授权.
Jan. 23rd,2018
图 1 本文提供的范例程序截图
简介
本文阐述了轮廓分析 (Contour Analysis,以下简称 CA) 的理论基础以及它在图像识别方面的实际应用. 文章末尾提供了一个处理 CA 的库文件和一个范例 (参见图 1).
文章第一部分给出了 CA 的定义和相关定理. 笔者尝试尽量用精简的语言对 CA 进行概要说明,以使读者能尽快理解 CA 的理论基础并加以应用. 同时,笔者提出了一些自己的思考,试图将文章核心聚焦于 CA 理论的部分方面和算法优化上. 第二部分在此基础上对算法进行了阐述.
第三部分是对 C♯ 专用库 ContourAnalysis
的说明.
第一部分 轮廓分析基础
为什么需要轮廓分析
CA 允许对物体呈现的外部边界——即轮廓——进行描述、存储、比较和查找. 它假定此轮廓已包含有物体形状的必要信息,而不考虑物体内部的点. 对于图像,CA 将分析从 2 维空间限定到轮廓空间上可降低计算强度及算法的复杂性. 由此,CA 便可高效地解决模式识别的主要问题:图像物体的换位、旋转及重设大小. 对这些变换而言,CA 方法是不变的.
主要概念
首先,定义物体的轮廓.
轮廓是物体的边界,一组可将物体从背景中分离出来的点 (像素) 的集合.
在计算机视觉系统中,经常用到多种编码格式来记录轮廓,如 Freeman 编码、2 维编码、多项式编码等. 但在本文讲述的轮廓分析中,不使用上述任何一种编码.
作为替代,笔者使用一组复数序列对轮廓进行编码. 对某一轮廓而言,假定其上一点为起点,将该点固定. (顺时针或逆时针地) 遍历轮廓上的点,记录每个点相对于它前一个点偏移量,用复数 \(a+\mathbf{i}b\) 表示偏移向量,\(a\) 为 \(x\) 轴方向上的偏移量,\(b\) 为 \(y\) 轴方向上的偏移量. 图 2 展示了一个简单的例子.
图 2 使用复数表示偏移向量
考虑到 3 维物体的物理实际,它们的轮廓不会内交,并且轮廓的最后一点总是与起点重合. 这保证了上述编码方法可以唯一地表示一个轮廓.
在这里,定义轮廓上的一个偏移向量为基础向量 (elementary vector),简称 EV,用小写希腊字母表示;由 EV 所组成的复数序列称为向量轮廓 (vector contour),简称 VC,用大写希腊字母表示.
这样,长度为 \(k\) 的向量轮廓 \(\Gamma\) 可以表示为:
\[
\Gamma=(\gamma_0,\gamma_1,\cdots,\gamma_{k-1})
\]
之所以采用复数编码,是因为对向量进行运算相对于其他直接计算轮廓的编码方式,在不增加额外计算负担和复杂性的基础上,可以保留可观的轮廓数学信息.
基本上,复数编码非常接近 2 维编码,后者将轮廓定义为一组 2 维空间中的坐标. 然而在处理点积上二者是不同的.
轮廓的性质
- 闭合轮廓的所有 EV,其和为零. EV 最终指向起点,它们的和是一个零向量.
- 轮廓向量不依赖于源图像的平行换位. 由于轮廓是相对于起点编码的,所以这种编码方式不会因初始轮廓而改变.
- 图像旋转相当于对轮廓上所有 EV 旋转同一角度.
- 改变起点不会改变 VC. EV 是相对于它之前的一点而编码,显然改变起点后,整个轮廓的 EV 序列除了起点位置外不会有任何改变.
- 源图像缩放可认为是对轮廓中每个 EV 与缩放因子的乘积.
轮廓的点积
考虑轮廓 \(\Gamma\) 和轮廓 \(N\) 的点积,有:
\[
\eta=(\Gamma,N)=\sum_{n=0}^{k-1}(\gamma_n,\upsilon_n) \tag{1}
\]
其中,\(k\) 是向量轮廓 VC 的维数;\(\gamma_n\) 是轮廓 \(\Gamma\) 的第 \(n\) 个 EV;\(\upsilon_n\) 是轮廓 \(N\) 的第 \(n\) 个 EV. 复数点积 \((\gamma_n,\upsilon_n)\) 计算方法为:
\[
(a+\mathbf{i}b,c+\mathbf{i}d)=(a+\mathbf{i}b)\cdot(c-\mathbf{i}d)=ac+bd+\mathbf{i}(bc-ad) \tag{2}
\]
需要注意,在 CA 中计算轮廓的点积时,各轮廓维数必须一致,即 EV 的数量应相等.
将两个 EV 作为简单向量相乘,其点积为:
\[
\left((a,b),(c,d)\right)=ac+bd \tag{3}
\]
比较式 \((2)\) 和式 \((3)\),可以发现:
- 向量的点积结果为实数,复数的乘积为复数.
- 复数点积的实数部分与对应向量的点积相等.
根据线性代数知识,向量的点积等于其夹角的余弦. 这意味着两个垂直的向量其点积总是为零,同向的两个向量其点积最大.
向量乘积的这些性质,使得它可以用来衡量向量之间的接近程度. 乘积值越大,说明向量间夹角越小,即它们越接近. 互相垂直的向量其乘积为零,随着夹角继续增大,其乘积为负值,直到再次平行时得到最大值 (绝对值). 式 \((1)\) 显然也具有与此相同的性质.
接下来引入归一化点积 (Normalized Scalar Product,NSP) 的概念:
\[
\eta=\frac{(\Gamma,N)}{|\Gamma||N|} \tag{4}
\]
模 \(|\Gamma|\) 和 \(|N|\) 计算方法为:
\[
|\Gamma|=\left(\sum_{n=0}^{k-1}|\gamma_n|^2\right)^{\frac{1}{2}} \tag{5}
\]
复数空间中的 NSP 亦为复数.
于是,NSP 归一化的最大可能值为单位向量 \(\mathbf{E}\) (|\(\mathbf{E}|=1\)),且仅在
\[
\Gamma=\mu N \tag{6}
\]
时成立. 式中 \(\mu\) 为任意复数.
我们知道,两个复数相乘,相当于它们的长度相乘 (缩放),幅角相加 (旋转). 式 \((6)\) 中轮廓 \(\mu N\) 即表示轮廓 \(N\) 被旋转和缩放 \(\mu\) 后的结果.
所以对 NSP 而言,当且仅当轮廓 \(\Gamma\) 和轮廓 \(N\) 为相同轮廓时——可以按一定系数旋转或缩放——其模达到最大.
如表 1 所示例子. 假设两个同样的轮廓进行点积运算,可得 \(\mathrm{NSP}=1\). 将其中一个旋转 \(90^\circ\),可得 \(\mathrm{NSP}=0+\mathbf{i}\). 旋转 \(180^\circ\) 则得 \(\mathrm{NSP}=-1\). 于是,NSP 的实数部分给出了轮廓夹角的余弦值,而模 \(|\mathrm{NSP}|\) 恒等于 \(1\).
表 1 轮廓归一化点积的性质
类似的,由式 \((4)\) 可知,如果增加某个向量轮廓的缩放因数,仍有 \(\mathrm{NSP}=1\).
结论 1 NSP 的模不随换位、旋转或缩放而改变.
故而仅当两个轮廓在旋转方向和缩放大小均相同时,其 NSP 为 \(\mathbf{E}\),否则均小于 \(\mathbf{E}\). 实际上,NSP 的模与其换位、旋转或缩放等变换均无关. 类似的,如果轮廓处于变化中,则它们的 NSP 必小于 \(\mathbf{E}\).
结论 2 NSP 的模体现了轮廓之间的接近程度.
轮廓的相关函数
上一节,我们确立了 NSP 在轮廓相似性判断中的作用. 然而要使用这一性质,取决于对起点的选取.
式 \((6)\) 仅当轮廓的起点一致时成立. 如果轮廓唯一,但 EV 所参考的起点不同,则其 \(\mathrm{NSP}\ne\mathbf{E}\).
下面引入一个新的概念,两个轮廓的内相关函数 (intercorrelation function,ICF):
\[
\tau(m)=(\Gamma,N^{(m)}), \qquad m=0,1,\cdots,k-1 \tag{7}
\]
式中 \(N^{(m)}\) 是轮廓 \(N\) 循环移位 \(m\) 次得到的 EV.
例如,\(N=(n_1,n_2,n_3,n_4)\),\(N^{(1)}=(n_2,n_3,n_4,n_1)\),\(N^{(2)}=(n_3,n_4,n_1,n_2)\).
ICF 揭示了轮廓 \(\Gamma\) 和轮廓 \(N\) 在移位 \(m\) 次时的相似程度. 它是 \(k\) 的周期函数,所以我们限制 \(m\in[0,k-1]\). 显然有:
\[
\tau_{\mathrm{max}}=\max\left(\frac{\tau(m)}{|\Gamma||N|}\right),\qquad m=0,1,\cdots,k-1 \tag{8}
\]
综上,模 \(|\tau_{\mathrm{max}}|\) 表示了两个轮廓的相似度,并当轮廓相同时,\(|\tau_{\mathrm{max}}|=\mathbf{E}\). 夹角 \(\arg(\tau_{\mathrm{max}})\) 给出了一个轮廓相对另一个的夹角.
结论 3 ICF 模最大值表示了两个轮廓的相似度.
结论 4 ICF 模的最大值不受换位、缩放、旋转或起点移位的影响.
另一个新概念是自相关函数 (autocorrelation function,ACF). ACF 实际是 ICF 在 \(\Gamma=N\) 时的特例,有:
\[
\upsilon(m)=(\Gamma,\Gamma^{(m)}),\qquad m=0,1,\cdots,k-1 \tag{9}
\]
下面考察 ACF 的性质.
图 3 自相关函数的性质
ACF 与轮廓起点选取无关. 由式 \((1)\) 可知,起点的变化不会导致 \(\eta\) 改变,
ACF 由轮廓 EV 两两相乘得到,在 \(0\) 到 \(k\) 范围内对称分布,对称点为 \(k/2\).
令 \(N=(n_1,n_2,n_3,n_4)\),可以写出其对不同 \(m\) 的 ACF:
\(\mathrm{ACF}(0)=(n_1,n_1)+(n_2,n_2)+(n_3,n_3)+(n_4,n_4)\)
\(\mathrm{ACF}(1)=(n_1,n_2)+(n_2,n_3)+(n_3,n_4)+(n_4,n_1)\)
\(\mathrm{ACF}(2)=(n_1,n_3)+(n_2,n_4)+(n_3,n_1)+(n_4,n_2)\)
\(\mathrm{ACF}(3)=(n_1,n_4)+(n_2,n_1)+(n_3,n_2)+(n_4,n_3)\)
\(\mathrm{ACF}(4)=(n_1,n_1)+(n_2,n_2)+(n_3,n_3)+(n_4,n_4)\)
可知 \(\mathrm{ACF}(1)=\mathrm{ACF}(3)^*\),\(\because |a^*|=|a|\),\(\therefore |\mathrm{ACF}(1)|=|\mathrm{ACF}(3)|\).
类似的,\(|\mathrm{ACF}(0)|=|\mathrm{ACF}(4)|\).
- 由图 4 可以看出,除最后一幅图像外,前 3 幅图像其 ACF——用蓝色表示——均关于 \(k/2\) 对称.
图 4 轮廓 ACF 示例
在某种意义上,可以认为轮廓的 ACF 代表了轮廓的形状特性.
对 ACF 取模无关于其缩放、位置、旋转或是起点的选取.
以上即是 CA 的理论部分. 在这一部分,笔者为了引入下一部分模式识别,只介绍了较为重要的相关概念和理论计算.
第二部分 轮廓分析的实际应用
通用识别算法
(未完待续)
用于 C♯ 图像识别的轮廓分析技术的更多相关文章
- C++反汇编与逆向分析技术揭秘
C++反汇编-继承和多重继承 学无止尽,积土成山,积水成渊-<C++反汇编与逆向分析技术揭秘> 读书笔记 一.单类继承 在父类中声明为私有的成员,子类对象无法直接访问,但是在子类对象的 ...
- 分析技术和方法论营销理论知识框架,营销方面4P、用户使用行为、STP,管理方面5W2H、逻辑树、金字塔、生命周期
原文:五种分析框架:PEST.5W2H.逻辑树.4P.用户使用行为 最近在一点点的啃<谁说菜鸟不懂得数据分析>,相当慢,相当的费脑力,总之,真正的学习伴随着痛苦:) 最初拿到这本书的时候, ...
- 控制流程完整性:给大家介绍一种“另类”的Javascript反分析技术
写在前面的话 理解恶意软件的真实代码对恶意软件分析人员来说是非常有优势的,因为这样才能够真正了解恶意软件所要做的事情.但不幸的是,我们并不总是能够得到“真实”的代码,有时恶意软件分析人员可能需要类似反 ...
- SPSS分析技术:二阶聚类分析;为什么出现大学生“裸贷”业务,因为放贷者知道贷款者还不起
SPSS分析技术:二阶聚类分析:为什么出现大学生"裸贷"业务,因为放贷者知道贷款者还不起 今天将介绍一种智能聚类法,二阶聚类法,在开始介绍之前,先解答很多人在后台提出的一个疑问:那 ...
- 分析技术在PMP中的应用
Analytical Techniques, 根据可能的项目或者环境变量变化以及它们与其他变量之间的关系,对潜在后果进行评估,分析和预测的各种技术. 4.4.2.2 监控项目工作: 分析技术 包括: ...
- MCP|WJ|Identification of candidate plasma protein biomarkers for cervical cancer using the multiplex proximity extension assay(利用多重邻位延伸分析技术进行宫颈癌血浆蛋白候选生物标记物的鉴定研究)
文献名:Identification of candidate plasma protein biomarkers for cervical cancer using the multiplex pr ...
- 书评第003篇:《0day安全:软件漏洞分析技术(第2版)》
本书基本信息 丛书名:安全技术大系 作者:王清(主编),张东辉.周浩.王继刚.赵双(编著) 出版社:电子工业出版社 出版时间:2011-6-1 ISBN:9787121133961 版次:1 页数:7 ...
- 《0day安全软件漏洞分析技术》学习笔记
最近因为工作需要在看0day的软件漏洞分析,发现这本<0day安全软件漏洞分析技术(第2版)>真是本好书,唯一缺点就是书上的环境是Windows XP 32Bit的,基于现状难以进行实践, ...
- SPSS分析技术:多元方差分析
SPSS分析技术:多元方差分析 下面要介绍多元方差分析的内容,多元方差分析是研究多个自变量与多个因变量相互关系的一种统计理论方法,又称多变量分析.多元方差分析实质上是单因变量方差分析(包括单因素和多因 ...
随机推荐
- MySQL Replication 主从复制全方位解决方案
1.1 主从复制基础概念 在了解主从复制之前必须要了解的就是数据库的二进制日志(binlog),主从复制架构大多基于二进制日志进行,二进制日志相关信息参考:http://www.cnblogs.com ...
- Ubuntu 安装MyEclipse10
Ubuntu 安装MyEclipse10 1.安装JDK 2.下载myeclipse.run 3. 现在假设你的 myeclipse.run 的路径是/home/yourname/myeclipse ...
- linux shadowsocket 安装和启动
http://blog.csdn.net/hanshileiai/article/details/49302865
- IE下判断IE版本的语句...[if lte IE 8]……[endif]
<!--[if lte IE 6]> <![endif]--> IE6及其以下版本可见 <!--[if lte IE 7]> <![endif]--> ...
- 房上的猫:HTML5基础
一.W3C标准 1)W3C标准不是某一个标准,而是一系列的标准的集合,一个网页主要由三部分组成,即结构(Structure),表现(Presentation)和行为(Behavior) 2)不很严谨的 ...
- MySQL字符串相关函数学习二
① LOWER(str):将字符串转为小写:与此函数具有相同作用的函数有LCASE() 如果参数是小写.数字或其他特殊字符,则返回原数据 ② LEFT(str, len):返回字符串str左边的len ...
- thinkinginjava学习笔记10_容器
Java中并没有像Perl.Python.Ruby那样对容器有直接的支持,但是可以依靠容器类来完成相同的工作: 泛型 使用一个ArrayList对象可以保存一系列的对象,如: ArrayList ap ...
- Head First设计模式之享元模式(蝇量模式)
一.定义 享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能.这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式. ...
- Java编程思想读书笔记(一)【对象导论】
2018年1月7日15:45:58 前言 作为学习Java语言的经典之作<Java编程思想>,常常被人提起.虽然这本书出版十年有余,但是内容还是很给力的.很多人说这本书不是很适合初学者,我 ...
- Elasticsearch强制重置未分配的分片(unassigned)
强制重置未分片的分片,这个问题源自于Elasticsearch维护中,Node意外退出的场景. 意外退出后Elasticsearch由于网络原因或者jvm性能压力,未能短时间内分配分片. 看一下分片的 ...