`

opencv 对象骨架化

 
阅读更多

欢迎关注微信公众号——计算机视觉:

 

 

How to get the skeleton of an object using OPENCV

http://pinkjade8848.spaces.live.com/blog/cns!E4159959CD42C507!195.entry

 

Skeletonization is a process for reducing foreground regions in a binary image to a skeletal remnant that largely preserves the extent and connectivity of the original region while throwing away most of the original foreground pixels. Generally speaking, there are 2 methods to obtain the skeleton.(I am not sure there are other methods.)

thinning

distance transform

 

OpenCV doesnot provide functions for skeletonization, but provides some functions on distance transform, so I use distance transform to complete this task.

 

Distance transform is an operator normally only applied to binary images. The result of the transform is a gray level image that looks similar to the input image, except that the gray level intensities of points inside foreground regions are changed to show the distance to the closest boundary from each point

  

 

This figure show the distance transform.

 

Following steps show how it achieves:

Input:  one image

Output:  skeleton image

 

Step1:  convert the input image to grey image if the input one is a 3-channel image. convert the grey image to binary image using threshold:

            cvThreshold( src, src, 1, 255, CV_THRESH_BINARY );

 

Step 2: using distance transform functions to get the  distance transform images.

            cvDistTransform( src_img, dist_img, CV_DIST_L2,3 ,NULL,NULL );

notes :  dist_img is a 32 bit float image, so if it is be display by cvShowImage(), we will find that it is same as src_image. It is better to convert 32F image to 8U image (cvConvertScale(dist_img,dist_img_8u,1,0);), and then show it.

 

Step 3: Take Laplacian (2nd derivative) of the distance transformed image.     cvLaplace(dist_img,dist_img_laplac,3);

Step 4:  threshold the result of step 3. this is very important. Otherwise , you can not get it. (Till now. I am not sure how to select the threshold. )

 

 

It is supposed that the central  ridge in the distance transform should be the same as thee medial axis or  skeleton.

 

In order to remove noise, it is suppose to do some morphology before step 1.

分享到:
评论

相关推荐

    001_SkeletonDemo_opencv_骨架提取_图像处理_

    骨架提取函数执行后,会得到一个骨架化的图像,然后使用OpenCV的imshow函数显示结果。 8. **应用领域**:骨架提取技术广泛应用于生物医学图像分析、字符识别、机器人导航、交通标志识别等领域,能够有效减少图像...

    opencv 图像分割、边缘提取、骨架提取

    综上所述,本文介绍了基于OpenCV的图像处理项目中涉及的关键技术,包括图像分割(均值聚类与Otsu阈值化)、边缘检测、骨架提取以及奶牛乳腺面积密度的计算。这些技术不仅在学术研究中有着重要的地位,在实际应用中也...

    图像形状骨架提取细化 C++ 代码_c哩

    在图像处理领域,形状骨架提取是一项重要的技术,它主要用于揭示图像中的对象形状,并将其简化为一根骨架线,即对象的主干。骨架提取对于许多应用非常有用,如目标识别、图像分析、模式识别等。本项目是基于OpenCV库...

    opencv骨骼化

    在图像处理领域,"骨骼化"或"骨架提取"是一种将图像中的对象转化为单像素宽的骨架,从而简化图像结构并保留其形状特征的技术。这种技术在模式识别、目标检测和图像分析中有着广泛应用。 在OpenCV中,实现骨骼化的...

    yolov5_pose-opencv人体骨骼推理

    在YOLOv5_pose的推理过程中,OpenCV用于读取、处理图像,以及将模型的预测结果可视化,展示出人体骨骼的检测结果。 要实现yolov5_pose-opencv人体骨骼推理,你需要以下步骤: 1. **模型准备**:首先,你需要下载并...

    OpenCV速查表(C++)

    - 示例代码中提到了将OpenCV的`Mat`对象与IplImage对象进行互转,这在老版本的OpenCV代码兼容性上很有用。 上述内容是对给定文件中提到的关键知识点的详细解释。由于具体的代码片段和示例使用了OpenCV的C++接口,...

    用C++类编写的求骨架阵算法,比较好用

    骨架阵算法,也被称为骨架提取或骨架化,是图像处理中的一个重要步骤,它主要用于将二值图像中的物体轮廓简化为一条或几条连续的、狭窄的线,即骨架,以此来减少图像的数据量并保留其主要形状特征。在C++编程环境中...

    kinect2.0-opencv-master

    3. C++编程基础:理解和编写源代码文件,理解类和对象的概念。 4. 计算机视觉原理:了解如何从图像数据中提取特征并进行分析。 5. 机器学习和模式识别:理解如何识别不同的动作模式。 6. 多线程编程:可能涉及实时...

    图像细化_opencv_

    2. 骨架提取(Skeletonization):骨架提取是图像细化的核心步骤,它的目的是将图像中的对象转化为最简化的表示,即骨架。在OpenCV中,可以通过Medial Axis Transform或者Thinning算法来实现。这些算法通过一系列...

    线的骨架提取

    线的骨架提取是图像处理领域的一个重要技术,主要用于从图像中提取出细长的、连续的线条特征,这些线条可以代表图像中的对象或结构的主要方向。在很多应用场景中,如道路识别、血管分析、文字识别等,骨架提取都是一...

    手势识别 OPENCV

    2. **骨架提取**:利用OpenCV和OpenNI提供的功能,从深度图像中提取人体骨架信息,包括手关节的位置。 3. **特征提取**:根据骨架信息,计算手指和手掌的关键点,形成手势特征向量。这可能包括关节间的距离、角度、...

    OpenCV计算机视觉基础教程(python版 )

    Python版的OpenCV库(cv2)使图像处理变得更加容易,通过Python的面向对象特性,可以更加直观地操作图像和视频。 三、基础操作 1. 图像读取与显示:使用`cv2.imread()`函数读取图像,`cv2.imshow()`函数显示图像,`...

    Mastering OpenCV with Practical Computer Vision Projects

    - **内容概述**:本章重点在于使用OpenCV开发基于标记的增强现实应用,即通过识别预先定义的标记来叠加虚拟对象。 - **关键技术**: - 标记检测与识别,通过图像匹配算法找到预设标记的位置。 - 三维重建,使用...

    Zhang-Suen-Thinning:我是为我的工作而做的。 OpenCV,C ++

    要理解并使用这个项目,你需要熟悉C++编程和OpenCV的基本用法,同时也需要了解图像处理的基本概念,如像素操作、二值化、形态学操作等。通过学习和实践,你可以掌握Zhang-Suen-Thinning算法,并将其应用到自己的图像...

    细化算法GUI实现 机器人路径规划

    首先,细化算法是一种迭代的方法,它通过逐步删除或合并几何对象的细节来降低模型的复杂性,同时保持其主要特征。在路径规划中,这一过程可能涉及将初始的、可能复杂的路线分解成更简单的线段,便于机器人理解和执行...

    IRSkeletonization:用于图像骨骼化的简单Java项目

    3. 骨骼化算法:有许多不同的算法可用于图像骨架化,如Medial Axis Transform(MAT)、Thinning Algorithms(如Zhang-Suen算法或Guo-Hall算法)等。这些算法通过迭代操作,逐步消除边界附近的像素,直到形成骨架。 ...

    vc++图像编程代码

    5. **细化(Thinning)**:细化操作是将物体的边界减细到单像素宽,常用于提取物体的骨架。这一步骤在识别形状和测量物体大小时特别有用。 6. **粗化(Binarization/Thickening)**:粗化与细化相反,是将物体边界加粗...

    VISUAL_C++数字图像获取_处理及实践应用

    这些操作可能包括灰度化、二值化、直方图均衡化、色彩空间转换(如RGB到HSV)等。这些操作有助于预处理图像,提高后续处理的效果。 4. **腐蚀与膨胀**:这是图像处理中的形态学操作,主要用于消除噪声和连接断开的...

    基于Kinect深度图像信息的手势跟踪与识别

    接着,通过二值化和骨架点提取,将手部区域从深度图像中分离出来。然后,应用Canny算子提取手势轮廓,这是一种经典的边缘检测算法,能够精确地检测出手势的边界。 在指尖检测阶段,文章利用深度图像的凸缺陷特性,...

    leetcode每日一题在哪-Measuring-Distance-From-Camera:测量与相机的距离

    实现基本的图像处理功能,例如骨架化、显示 Matplotlib 图像、排序轮廓、平移、旋转、使用 OpenCV 调整大小 import cv2 - OpenCV。 import matplotlib.pyplot as plt - 生成高质量的线图、散点图、直方图、条形图。 ...

Global site tag (gtag.js) - Google Analytics