DistanceTransform(距离变换)
来源:互联网 发布:seo关键词的布局原则 编辑:程序博客网 时间:2024/05/25 08:12
本次博客是我习得图像处理中的距离变换理论后,而作的算法实现笔记
首先得理解图像像素中的D4,D8邻接概念
距离变换算法,首先是将原图二值话,而后将图像中非0值无穷大化(这里指设置一个尽可能大的一个值)
在进行距离变换时,需要建立一个D8(8-邻接)模板,在变换过程中模板需要通过两种形式进行全图像扫描变换
第一次扫描:是需要从左向右 自上而下的方向进行的
将模板使用为如下形式
Fp点是运算的当前点
该模板匹配过程中需要计算AL1->AL4 各点叠加相对Fp点D4距离值,其结果与Fp点值组成一个5个元素的集合,
Fp最终取值为该集合内的最小值(公式的理解)。
第二次扫描:是需要从右向左 自下而上的方向进行,这与第一次的扫描方向完全相反
将模板使用为如下形式
对于公式与模板的理解与第一次扫描相同
‘==============================================================================================
实例是用excel做的,用VBA实现算法
规划《图像处理、分析与机器视觉(第3版)》P14页示例
在Excel中算法实现后的样子(与书本一致)
算法实现代码
Option ExplicitDim MaxR As IntegerDim MaxC As IntegerDim Maximum As IntegerDim Mat() As IntegerSub DistanceFormat() MaxR = 8: MaxC = 8: Maximum = 30000 Dim R As Integer, C As Integer 'Step1:建立目标区域等同大小的数组模板 ReDim Mat(1 To MaxR, 1 To MaxC) As Integer For R = 1 To MaxR 'Mat数组拷贝目标区域0值,非0值记为Maximum For C = 1 To MaxC Mat(R, C) = IIf(Cells(R, C) = "0", 0, Maximum) Next C Next R '==================================================== For R = 1 To MaxR For C = 1 To MaxC AL_Region R, C Next C Next R '---------------------------------------------------- For R = MaxR To 1 Step -1 For C = MaxR To 1 Step -1 BR_Region R, C Next C Next R '===================================================== For R = 1 To MaxR 'Mat数组拷贝目标区域0值,非0值记为Maximum For C = 1 To MaxC Cells(R, C) = Mat(R, C) Next C Next REnd SubSub AL_Region(R As Integer, C As Integer) Dim MinV As Integer MinV = Mat(R, C) 'AL1 If C > 1 And R < MaxR Then '确保取值不过界 MinV = IIf(Mat(R + 1, C - 1) + 2 < MinV, Mat(R + 1, C - 1) + 2, MinV) End If 'AL2 If C > 1 Then MinV = IIf(Mat(R, C - 1) + 1 < MinV, Mat(R, C - 1) + 1, MinV) End If 'AL3 If R > 1 And C > 1 Then MinV = IIf(Mat(R - 1, C - 1) + 2 < MinV, Mat(R - 1, C - 1) + 2, MinV) End If 'AL4 If R > 1 Then MinV = IIf(Mat(R - 1, C) + 1 < MinV, Mat(R - 1, C) + 1, MinV) End If '------------------------------------------------------------------ Mat(R, C) = MinVEnd SubSub BR_Region(R As Integer, C As Integer) Dim MinV As Integer MinV = Mat(R, C) 'BR1 If R > 1 And C < MaxC Then '确保取值不过界 MinV = IIf(Mat(R - 1, C + 1) + 2 < MinV, Mat(R - 1, C + 1) + 2, MinV) End If 'BR2 If C < MaxC Then MinV = IIf(Mat(R, C + 1) + 1 < MinV, Mat(R, C + 1) + 1, MinV) End If 'BR3 If C < MaxC And R < MaxR Then MinV = IIf(Mat(R + 1, C + 1) + 2 < MinV, Mat(R + 1, C + 1) + 2, MinV) End If 'BR4 If R < MaxR Then MinV = IIf(Mat(R + 1, C) + 1 < MinV, Mat(R + 1, C) + 1, MinV) End If '------------------------------------------------------------------ Mat(R, C) = MinVEnd Sub
实现一个更为复杂的实例:
运行并添加条件格式后的样子
阅读全文
0 0
- DistanceTransform(距离变换)
- Opencv距离变换distanceTransform应用
- 关于距离变换函数distanceTransform使用注意事项
- OpenCV距离变换函数:distanceTransform()介绍
- 基于distanceTransform-距离变换的手掌中心提取
- 基于distanceTransform-距离变换的手掌中心提取
- 距离变换distanceTransform应用——细化字符轮廓
- 距离变换distanceTransform应用——寻找图像的质心
- 用OpenCV的distanceTransform函数作图像的距离变换
- Opencv距离变换distanceTransform应用——细化字符轮廓&&查找物体质心
- Opencv距离变换distanceTransform应用——细化字符轮廓&&查找物体质心
- Opencv距离变换distanceTransform应用——细化字符轮廓&&查找物体质心
- 图像识别中距离变换的原理及作用详解,并附用OpenCV中的distanceTransform实现距离变换的代码!
- 距离变换
- 距离变换
- 距离变换
- 距离变换
- 距离变换
- StringUtils 判断字符串
- 关于热理新Cordova Hot Code Push Plugin及cordova-hot-code-push-cli当前使用注意事项
- 文章标题
- Setting up Django and your web server with uWSGI and nginx
- allowDefinition='MachineToApplication 错误
- DistanceTransform(距离变换)
- JavaScript总结-细节
- Java基础知识-6、数组
- [知识池]彻底了解设计模式(系列四)
- 常用布局效果07-文本信息展示布局
- C语言如何编译动态库与静态库
- Linux下使用inotify实现文件监控
- 51nod 1642 区间欧拉函数
- 欢迎使用CSDN-markdown编辑器