最近在做一些关于图像的东西,在用边界跟踪提取图像的边界之后要用链码编码之后才能进行下一步处理,所以查资料学习了一下标题里面提到的东西。在这里就不说这些东西的背景了,主要是通俗地解释一下这些东西的原理。

在解释这些链码之前,首先解释一下一些需要了解的基础知识

4连通和8连通

在计算机图形学里面,像素是数字图像的基本元素。一张图是由有限个像素点组成的。大家平时经常在网上看到的1080*1920的图其实就是指这张图每一列有1080个像素点,每一行有1920个像素点,整张图一共由1080*1920个像素点构成。根据中心像素点的邻接方向个数的不同,可以分为4连通和8连通(还有其他的情况,不过这里就只介绍4连通和8连通)。从中心像素点正右边开始,逆时针定义方向数,具体如下图:

假如我们从图片里面提取了一个物体的轮廓如下图,红色的像素点代表我们编码的起始点。接下来以下图来讲解一下标题上的几种链码。

freeman链码

在边界曲线上选取一点作为起点,记录起点的坐标,然后按照逆时针的方向,以8连通的方式从编码为1的方向(45度)开始搜索下一个边界像素点。找到之后记录方向编码,然后从找到的像素点开始重复以上步骤,得出一组链码,这个就是freeman链码。如果是闭合的边界,则编码完成后回到起点,可以省去起点坐标。上图的freeman码是(1,1)21176644或者211766444。

关于搜索下一个边界像素点的要从哪一个方向开始,我查资料的时候看到不同的人有不同的做法,个人感觉自己定一套规则就好,往后的其他边界都按这套规则编码就没问题。

归一化链码

对于闭合的边界,无论我们平移它,得到的链码都是一样的。但是如果选取的起点不同,那么得到的链码也会有所不同。这时候我们就要将它归一化。原理就是把我们得到的链码看成是一个自然数,将链码循环写下去,选取构成的自然数最小的那组链码。这个就是归一化链码。上图的链码循环:211766444211766444211766444……归一化链码为117664442。

一阶差分链码

归一化链码解决了因为起点坐标不同而编码不同的问题,但仍有不足。如果我们将边界旋转,那么它的归一化链码也会发生变化。如下图

链码为666001334(按未旋转前链码编码的顺序),归一化链码为001334666,可看出旋转后链码编码发生了改变,那么当然归一化链码也会改变。

这时候我们就可以用一阶差分链码。原理就是计算相邻两个元素方向变化(按逆时针方向)的次数。例如

5→5变化了0步,记为0,4→6变化了两步,记为2。这样就可以得到一阶差分链码。根据归链码计算,上图旋转前后的一阶差分链码都为706706006。

归一化一阶差分链码

其实就是对一阶差分链码进行归一化处理,得出的链码具有平移不变性和旋转不变性。上图的归一化一阶差分链码为006706706。

freeman链码,归一化链码,一阶差分链码,归一化一阶差分链码相关推荐

  1. 为什么一些机器学习模型需要对数据进行归一化?——1)归一化后加快了梯度下降求最优解的速度;2)归一化有可能提高精度...

    为什么一些机器学习模型需要对数据进行归一化? http://www.cnblogs.com/LBSer/p/4440590.html 机器学习模型被互联网行业广泛应用,如排序(参见:排序学习实践).推 ...

  2. python怎么数据归一化_基于数据归一化以及Python实现方式

    数据归一化: 数据的标准化是将数据按比例缩放,使之落入一个小的特定区间,去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行比较和加权. 为什么要做归一化: 1)加快梯度下降 ...

  3. 机器学习中的数据归一化、最值归一化、均值方差归一化(标准化)

    文章目录 为什么要进行数据归一化 什么是数据归一化 最值归一化(Normalization) 最值归一化的适用性 均值方差归一化(Standardization) 为什么要这么归一化呢? 均值方差归一 ...

  4. 归一化的好处及归一化,标准化的处理方法

    归一化后有两个好处 1. 提升模型的收敛速度 如下图,x1的取值为0-2000,而x2的取值为1-5,假如只有这两个特征,对其进行优化时,会得到一个窄长的椭圆形,导致在梯度下降时,梯度的方向为垂直等高 ...

  5. 数据如何归一化matlab中,数据归一化汇总

    ============外一篇 有关mapminmax的用法详解 by faruto================================== 几个要说明的函数接口: [Y,PS] = ma ...

  6. python 归一化_几种归一化方法(Normalization Method)python实现

    数据归一化问题是数据挖掘中特征向量表达时的重要问题,当不同的特征成列在一起的时候,由于特征本身表达方式的原因而导致在绝对数值上的小数据被大数据"吃掉"的情况,这个时候我们需要做的就 ...

  7. 批归一化作用_批归一化Batch Normalization的原理及算法

    一.BN提出的背景意义 本文的背景文献是:<Batch Normalization: Accelerating Deep Network Training by Reducing Interna ...

  8. python数据归一化代码_Python 数据归一化/标准化

    数据的标准化(normalization)是将数据按比例缩放,使之落入一个小的特定区间.在某些比较和评价的指标处理中经常会用到,去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能 ...

  9. matlab数据归一化(补充),matlab数据归一化(补充)

    Yaksa版主对MATLAB中的归一化问题进行了详细的讲解和分析,下面我们对这议题进一步深入.再议归一化问题 [train_scale,test_scale,ps] = scaleForSVM(tra ...

  10. 处理数据时不进行归一化会有什么影响?归一化的作用是什么?什么时候需要归一化?有哪些归一化的方法?

    归一化化定义:我是这样认为的,归一化化就是要把你需要处理的数据经过处理后(通过某种算法)限制在你需要的一定范围内.首先归一化是为了后面数据处理的方便,其次是保正程序运行时收敛加快. 所谓特征归一化,就 ...

最新文章

  1. Atitit MATLAB 图像处理attilax总结
  2. C#之值类型和引用类型
  3. 「镁客·请讲」天宝陈朝晖:AI 的准确译法不是人工智能,而是机器智能...
  4. poj 3150 Cellular Automaton(迷糊,但原理是用的快速幂)
  5. 常用的数字逻辑电路符号
  6. 015_面向对象_异常,包和Object类
  7. freemarke之TemplateDirectiveModel详解
  8. c语言如何用fscanf将字符串读取,在c语言中如何将文本内容 赋给一个 字符串
  9. (三)CSS【不多说了,前端面试 CSS 是必考知识,不过关直接回家】
  10. Python+pandas一维数组常用操作
  11. redhat 6.5 mysql rpm_CentOS6.5和RedHat6.5下以rpm方式安装mysql-5.6.20
  12. 使用eclipse开发hbase程序
  13. MyEclipse中更改JRE环境
  14. 什么是OM3、OM4光纤跳线?
  15. 学生管理系统IPO图_C语言学生信息管理系统演示和说明(文件版)
  16. 过 DNF TP 驱动保护(二)
  17. outlook客户端怎么看html,谷歌浏览器根据html网页启动邮件客户端Outlook(示例代码)...
  18. torch.nn.functional.cosine_similarity使用详解
  19. 安装应用提示 该文件包与具有同一名称的现有文件包存在冲突。 无法安装
  20. Java实现混音 音频合成_ffmpeg混音(将多个声音合成一个)命令

热门文章

  1. 关于跳槽你想好了吗?这里Android资深架构师有一些建议以及面试相关准备
  2. thinkphp执行定时任务定时任务
  3. 东莞理工学院计算机考研资料汇总
  4. 非华为电脑安装PCmanager工具实现多屏协同教程
  5. 电力电子技术笔记—(DC-DC)变流电路
  6. centOS7\centOS6 防火墙设置与端口开放的方法
  7. KDZD886H(220V80A)蓄电池充放电测试仪
  8. git 第一次push error: failed to push some refs to
  9. JS数组的some()
  10. python壁纸超清全面屏_你见过的最全面的python重点