用扫描的方式实现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号248787278
2

0 0
原创粉丝点击