用扫描的方式实现Rosenfeld and Pfaltz提出的距离变换!
来源:互联网 发布:unity3d沙盒 编辑:程序博客网 时间:2024/06/11 10:17
2016-6-13 12:07注:我对距离变换的作用终于有了较为清楚的认识,详见我写的博文http://blog.csdn.net/wenhao_ir/article/details/51656160
要注意,此篇博文中用到的算法和博文http://blog.csdn.net/wenhao_ir/article/details/51656160中的最主要区别是这篇博文中几乎每一个点计算了距离,而博文http://blog.csdn.net/wenhao_ir/article/details/51656160中的只计算前景目标的距离!
前言:目前来说,我并不理解现Rosenfeld and Pfaltz提出的距离变换理论和相关公式(请注意,后来我理解了距离变换的作用了哦,详情见我在本博文最顶端用红色标注的链接),我写这篇博文把我目前的理解记下来,以便将来作更深一层的理解!
首先来看下Rosenfeld and Pfaltz提出的距离公式是怎样的,如下图所示:
下面说明下这个公式:
公式中f(p)代表p点的像素值。
从整体来看,实际上公式是对p点的像素值进行了更新,具体是怎么更新的呢?我们看到是取“p点的像素值”与“距离加上q点的像素值"中较小的值,距离D(p,q)可以是欧式距离,棋盘距离或街区距离,下面的源程序中分别写了三个函数分别计算这三个距离。
q点不止一点,具体的有四个点,具体是哪四个点,你可以实际举个5行6列的图像代入源码去观察,这里我就不多说了。
下面上源程序,然后再对源程序作个说明:
程序中用到的图像下载链接:http://pan.baidu.com/s/1dEEP10t
//OpenCV版本2.4.9 //交流QQ2487872782 2016-8-4日注:很报歉,此代码目前不能公开发表在博客上,已经删除,希望大家理解!
程序说明:
①看这个源码一定要举个例子代入来看,比如举个5行6列的图像代入源码去分析
②函数distanceTrans中使用的欧式距离,当然你也可以用棋盘距离或街区距离,只需要把函数distanceTrans中的函数calcEuclideanDistance换成函数calcChessboardDistance或函数calcBlockDistance即可!
③可以进行距离变换的一定是二值图像(为什么是二值图像,可以参见我写的博文http://blog.csdn.net/wenhao_ir/article/details/51656160),所以函数distanceTrans中将图像转化成了二值图像
④目前来说,我真心不知道图像作这个距离变换有啥用!
下面上程序运行结果:
-------------------------------------------
欢迎大家加入图像识别技术交流群:271891601,另外,特别欢迎成都从事图像识别工作的朋友交流,我的QQ号2487872782
- 用扫描的方式实现Rosenfeld and Pfaltz提出的距离变换!
- 图像的距离变换---扫描
- 距离变换的理解
- 傅立叶变换网文精粹:傅立叶变换的提出
- 一个基于命令行的“距离变换”的实现
- 图像识别中距离变换的原理及作用详解,并附用OpenCV中的distanceTransform实现距离变换的代码!
- OpenCV 距离变换的笔记
- 用OpenCV的distanceTransform函数作图像的距离变换
- 表扫描的方式
- 索引的扫描方式
- 基于距离变换的手掌中心提取
- opencv例程之图像的距离变换
- 二值图像的距离变换研究
- 使用距离变换的分水岭分割
- 基于距离变换的图像匹配
- 二值图像的距离变换研究
- 算法整理(二)---快速排序的两种实现方式:双边扫描和单边扫描
- 各种距离的实现
- Android 混淆代码总结
- DbVisualizer出现下列错误:Could not read XML file
- JDK线程池源码分析
- Javascript构造函数
- Java 多线程编程
- 用扫描的方式实现Rosenfeld and Pfaltz提出的距离变换!
- Paint(画笔)类的使用
- 【Spring4揭秘 BeanFactory】修改BeanFactory-BeanFactoryPostProcessor
- iOS--UIAlertView与UIAlertController和UIAlertAction
- C语言中关于sizeof和strlen的区别
- (第22讲)java数组的一些编程题
- 一周stackoverflow热门问题选登:如何正确的理解python for循环中的else用法?
- POJ_1273_Drainage Ditches(USACO 93)_最大流
- Eclipse安装Freemarker插件