distanceTransform函数
来源:互联网 发布:js判断是否是数组 编辑:程序博客网 时间:2024/06/04 01:23
distanceTransform函数
函数的作用:
主要用于计算非零像素到最近零像素点的最短距离。一般用于求解图像的骨骼。。。。
函数调用形式:
C++: void distanceTransform(InputArray src, OutputArray dst, int distanceType, int maskSize)
参数详解:
InputArray src:输入的图像,一般为二值图像
OutputArray dst:输出的图像
int distanceType:所用的求解距离的类型、
It can be CV_DIST_L1, CV_DIST_L2 , or CV_DIST_C
mask_size 距离变换掩模的大小,可以是 3 或 5. 对 CV_DIST_L1 或 CV_DIST_C 的情况,参数值被强制设定为 3, 因为 3×3 mask 给出 5×5 mask 一样的结果,而且速度还更快。
- mask
- 用户自定义距离情况下的 mask。 在 3×3 mask 下它由两个数(水平/垂直位量,对角线位移量)组成, 5×5 mask 下由三个数组成(水平/垂直位移量,对角位移和 国际象棋里的马步(马走日))
函数 cvDistTransform 二值图像每一个象素点到它最邻近零象素点的距离。对零象素,函数设置 0 距离,对其它象素,它寻找由基本位移(水平、垂直、对角线或knight's move,最后一项对 5×5 mask 有用)构成的最短路径。 全部的距离被认为是基本距离的和。由于距离函数是对称的,所有水平和垂直位移具有同样的代价 (表示为 a ), 所有的对角位移具有同样的代价 (表示为 b), 所有的 knight's 移动具有同样的代价 (表示为 c). 对类型 CV_DIST_C 和 CV_DIST_L1,距离的计算是精确的,而类型 CV_DIST_L2 (欧式距离) 距离的计算有某些相对误差 (5×5 mask 给出更精确的结果), OpenCV 使用 [Borgefors86] 推荐的值:
- CV_DIST_C (3×3):
- a=1, b=1
- CV_DIST_L1 (3×3):
- a=1, b=2
- CV_DIST_L2 (3×3):
- a=0.955, b=1.3693
- CV_DIST_L2 (5×5):
- a=1, b=1.4, c=2.1969
下面用户自定义距离的的距离域示例 (黑点 (0) 在白色方块中间): 用户自定义 3×3 mask (a=1, b=1.5)
4.543.533.544.5432.522.5343.52.51.511.52.53.532101233.52.51.511.52.53.5432.522.5344.543.533.544.5用户自定义 5×5 mask (a=1, b=1.5, c=2)
4.53.53333.54.53.5322233.5321.511.5233210123321.511.5233.5322233.543.53333.54典型的使用快速粗略距离估计 CV_DIST_L2, 3×3 mask , 如果要更精确的距离估计,使用 CV_DIST_L2, 5×5 mask。
图像的距离变换被定义为一幅新的图像,该图像的每个输出像素被设成与输入像素中0像素最近的距离。显然,典型
的距离变换的输入应为某些边缘图像。在多数应用中,距离变换的输入是例如Canny 边缘检测的检测图像的转换输
出(即边缘的值是0,非边缘的是非0)。
opencv代码:
<span style="font-size:18px;">#include<cv.h> #include<highgui.h> #pragma comment(lib, "cv.lib")#pragma comment(lib, "cxcore.lib")#pragma comment(lib, "highgui.lib")int main() { IplImage* src = cvLoadImage ("test.png", 1); IplImage* dst = cvCreateImage (cvGetSize(src), IPL_DEPTH_32F, 1); IplImage* canny = cvCreateImage (cvGetSize(src), IPL_DEPTH_8U, 1); cvCvtColor (src, canny, CV_RGB2GRAY); cvCanny (canny, canny, 100, 200, 3); cvDistTransform (canny, dst, CV_DIST_WELSCH, 3); cvNamedWindow ("src", 1); cvShowImage ("src", src); cvNamedWindow ("dist", 1); cvShowImage ("dist", canny); cvWaitKey (0); cvReleaseImage (&src); cvReleaseImage (&canny); cvReleaseImage (&dst); return 0; } </span>
- distanceTransform函数
- 关于距离变换函数distanceTransform使用注意事项
- OpenCV距离变换函数:distanceTransform()介绍
- 用OpenCV的distanceTransform函数作图像的距离变换
- DistanceTransform(距离变换)
- Opencv距离变换distanceTransform应用
- 輪廓和點距離(pointPolygonTest、distanceTransform)
- 基于distanceTransform-距离变换的手掌中心提取
- OpenCV Tutorial: 輪廓和點距離(pointPolygonTest、distanceTransform)
- 基于distanceTransform-距离变换的手掌中心提取
- 距离变换distanceTransform应用——细化字符轮廓
- 距离变换distanceTransform应用——寻找图像的质心
- Opencv距离变换distanceTransform应用——细化字符轮廓&&查找物体质心
- Opencv距离变换distanceTransform应用——细化字符轮廓&&查找物体质心
- Opencv距离变换distanceTransform应用——细化字符轮廓&&查找物体质心
- 图像识别中距离变换的原理及作用详解,并附用OpenCV中的distanceTransform实现距离变换的代码!
- 函数
- 函数
- JAVA_SE系列:07.java分隔符和变量
- TextField 设置大全
- 关于《IT运维之道》的扩充建议
- FreeMarker语法知识
- Bootloader学习(一)
- distanceTransform函数
- 线性递归与尾递归
- 构建一个可行的BI系统的造价是多少,实施周期?具备条件基础是什么? 数据量有要求么
- 黑马程序员_Java基础之多线程
- localhost与127.0.0.1的区别
- CSS 之!important
- linux shell 自定义函数(定义、返回值、变量作用域)介绍
- Leetcode: Validate Binary Search Tree
- 用POI向Excel中插入图片的例子