提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

骨架提取

  • 前言
  • 一、Skeleton是什么?
  • 二、Skeleton源代码范例
  • 总结

前言

骨架提取是图形学中经常会用在医学图像上的一种方法,骨架提取属于形态学处理,通过形态学+其他图像操作也同样可以完成骨架提取。


一、Skeleton是什么?

图像骨架指的是可以反应图像基本形状状况的简化图,通过提取这些信息可以有效减少不需要的冗余像素信息。图像骨架的基本解释和使用,包括原理方法,本文参考以下论文:A fast parallel algorithm for thinning digital patterns

二、Skeleton源代码范例

 cv::Mat src = imread("二值图");src /= 255;int rows = src.rows;int cols = src.cols;uchar* ptr = src.data;cv::Mat M = cv::Mat::zeros(src.size(), CV_8UC1);uchar* ptr_m = M.data;while (1){cv::Mat temp = src.clone();//step1for (int i = 1; i < rows - 1; ++i){for (int j = 1; j < cols - 1; ++j){int P1 = i*cols + j;int P2 = (i - 1)*cols + j;int P3 = (i - 1)*cols + j + 1;int P4 = i*cols + j + 1;int P5 = (i + 1)*cols + j + 1;int P6 = (i + 1)*cols + j;int P7 = (i + 1)*cols + j - 1;int P8 = i*cols + j - 1;int P9 = (i - 1)*cols + j - 1;int sum = ptr[P2] + ptr[P3] + ptr[P4] + ptr[P5] + ptr[P6] + ptr[P7] + ptr[P8] + ptr[P9];int count = (ptr[P2] == 0 && ptr[P3] == 1)+ (ptr[P3] == 0 && ptr[P4] == 1)+ (ptr[P4] == 0 && ptr[P5] == 1)+ (ptr[P5] == 0 && ptr[P6] == 1)+ (ptr[P6] == 0 && ptr[P7] == 1)+ (ptr[P7] == 0 && ptr[P8] == 1)+ (ptr[P8] == 0 && ptr[P9] == 1)+ (ptr[P9] == 0 && ptr[P2] == 1);int zero_1 = ptr[P2] * ptr[P4] * ptr[P6];int zero_2 = ptr[P4] * ptr[P6] * ptr[P8];if (sum >= 2 && sum <= 6 && count == 1 && zero_1 == 0 && zero_2 == 0){ptr_m[P1] = 1;}}}src -= M;//step2   for (int i = 1; i < rows - 1; i++){for (int j = 1; j < cols - 1; j++){int P1 = i*cols + j;int P2 = (i - 1)*cols + j;int P3 = (i - 1)*cols + j + 1;int P4 = i*cols + j + 1;int P5 = (i + 1)*cols + j + 1;int P6 = (i + 1)*cols + j;int P7 = (i + 1)*cols + j - 1;int P8 = i*cols + j - 1;int P9 = (i - 1)*cols + j - 1;int sum = ptr[P2] + ptr[P3] + ptr[P4] + ptr[P5] + ptr[P6] + ptr[P7] + ptr[P8] + ptr[P9];int count = (ptr[P2] == 0 && ptr[P3] == 1)+ (ptr[P3] == 0 && ptr[P4] == 1)+ (ptr[P4] == 0 && ptr[P5] == 1)+ (ptr[P5] == 0 && ptr[P6] == 1)+ (ptr[P6] == 0 && ptr[P7] == 1)+ (ptr[P7] == 0 && ptr[P8] == 1)+ (ptr[P8] == 0 && ptr[P9] == 1)+ (ptr[P9] == 0 && ptr[P2] == 1);int zero_1 = ptr[P2] * ptr[P4] * ptr[P8];int zero_2 = ptr[P2] * ptr[P6] * ptr[P8];if (sum >= 2 && sum <= 6 && count == 1 && zero_1 == 0 && zero_2 == 0){ptr_m[P1] = 1;}}}src -= M;if (cv::countNonZero(temp - src) == 0)break; }更高效的代码可以参见[github源码](https://github.com/ExtremeMart/SkeletonExtraction/blob/master/Zhang-Suen%20algorithm.txt)

总结

骨架提取还有许多其他的方法,本文算法是比较经典的提取算法。

图像分析方法之一(学习与研究笔记)相关推荐

  1. SVO中 Inverse Compositional Image Alignment方法的学习笔记

    SVO中 Inverse Compositional Image Alignment方法的学习笔记 这篇文章 光流法简介 逆向光流法 结尾 这篇文章  在SVO系统中的"Relaxation ...

  2. mysql存储过程大于小于_mysql5.0存储过程操作符知识_函数方法[Mysql学习]

    mysql存储过程基本函数 一.字符串类 CHARSET(str) //返回字串字符集 CONCAT (string2  [,... ]) //连接字串 INSTR (string ,substrin ...

  3. 【工具】(转)PowerDesigner最基础的使用方法入门学习

    PowerDesigner最基础的使用方法入门学习 https://www.cnblogs.com/biehongli/p/6025954.html 转载于:https://www.cnblogs.c ...

  4. 【关于Java方法的学习】

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.方法的定义 二.方法的调用 三.方法的重载 1,重载的定义 2,方法的重载的规则 3,实现理论 四.命令行传参 五 ...

  5. Java—String类的intern方法的学习

    对intern方法的学习来源于之前偶然看到的一篇博客:[请别再拿"String s = new String("xyz");创建了多少个String实例"来面试 ...

  6. 面向医学图像分析的深度学习研究方案

    面向医学图像分析的深度学习研究方案 这是一篇有关"深度学习在医学图像处理方面"的研究报告的第一节,主要包含研究对象,常用方法,深度学习简介,研究现状,研究重点. 在撰写报告时,我找 ...

  7. 速学计算机的方法,速记基础:计算机速记方法与学习要点

    双文速记,是根据华语双文(方块字和拉丁字母)原理,在汉语拼音方案基础上采用适合速记要求的拼音方法,在计算机标准键盘上分布普通话的21个辅音.35个元音.4个声调和12个词类字母,将汉语词汇中某些高频单 ...

  8. 基于迁移学习的旋转机械故障诊断方法研究学习笔记

    基于迁移学习的旋转机械故障诊断方法研究学习笔记 现在大一点的神经网络模型也要求数据量的足够大,但是对于小样本的数据,有一些神经网络模型也能够处理的很好 2. 这是现在神经网络也要求的数据最好能够独立同 ...

  9. 用matlab绘制树叶,UG画树叶的叶子,这个三维建模方法值得学习

    原标题:UG画树叶的叶子,这个三维建模方法值得学习 今天来教大家绘制一片树叶,学会了大家再做个树干,这样就能完成一些塑料盆栽模型了,来学习一下绿叶的画法吧,这可是最简单的曲面做法了. 建模过程: 1. ...

  10. 方法是学习和进步的捷径

    方法是学习和进步的捷径 我懒,所以喜欢琢磨方法,人类懒,所以人类在不停的创造舒适中进步. 方法论是门科学,统筹学是其主要应用.想成功的人无数,但利用好方法的人不多,于是成功的人成为少数. 方法是什么? ...

最新文章

  1. Error Correction and DeNovo Genome Assembly for the MinION Sequencing Reads mixing Illumina Short Re
  2. linux svn missingargument -m,缺少參數-m在windows powershell中使用svn。
  3. python出现Unknown label type: ‘continuous‘
  4. Flash 与 C#交互 (简单按钮事件)
  5. iview标签页的点击方法_18页PPT:6个高手常用的自我介绍套路,很是得人心,学习...
  6. 中国双光束紫外可见分光光度计行业市场供需与战略研究报告
  7. 小问题420_1_hibernateTemplate.update不执行
  8. ftp服务器和共享文件夹权限设置,ftp服务器共享文件夹权限设置
  9. java web 错误处理实例_javaweb异常提示信息统一处理(使用springmvc,附源码)
  10. 使用UltraEdit删除重复的行
  11. 串口控制器,电平脉冲触发,顺序轮换,间歇轮换,电磁阀继电器流水,8路,16路,32路
  12. 确认过眼神—是我重返博客的第一文
  13. win7家庭版怎么把计算机显示桌面,Win7怎样显示桌面
  14. 计算机网络ip地址划分计算机,计算机网络中IP地址大全
  15. 黑马程序员————高新技术————内省(了解JavaBean)
  16. mysql geometry 怎么 操作_mysql中geometry类型的简单使用
  17. Python将文字转成语音并读出来
  18. PID算法在STM32上的实现
  19. Locust使用手册--开始使用Locust
  20. 文件基础 IO 操作

热门文章

  1. go语言逐行读取和写入文件
  2. Git手写笔记(简单秒懂)详细讲解
  3. unity shader 后处理实现水墨风格渲染「Low Poly 」变「水墨画 」
  4. java8 Stream语法详解
  5. android开发 问卷调查案例_「Android问卷调查类型页面及逻辑实现」RadioButton、CheckBox、EditView、单选、多选、输入、...
  6. 校招那些坑,是我走过最长的路
  7. 【ENVI入门系列】15.遥感动态监测
  8. 易语言打开摄像头_中维摄像头易语言实例
  9. 搭建抢购网环境(给自己加强记忆的)
  10. 注册会计师自学能过吗?