对于当前像素点,扫描它的8邻域,如果邻域的像素值为255,则b[i]=1(i=0…8),像素值为128(表示该像素点在前面的循环中被标记为删除),b[i]=-1,如果像素值为0,则b[i]=0。


下面会根据b[i]的值进行6个条件判断,如果条件满足,则会标记该像素值为GRAY(128)。

1. b[0]=1,即当前像素必须为前景点。

2. 1-abs(b1) + 1 – abs(b3) + 1 –abs(b5) + 1 – abs(b7) >= 1,该条件表示当前像素为边界点,即东西南北四个点至少有一个b[i]=0。

3. abs(b1)+…+abs(b8)>=2, 该条件表示不能删除端点,即p0点周围只有一个点为1或-1的情况。

4.  统计b1到b8等于1的数量,该数量值必须大于1,该条件表示不能删除端点。、

5.  连通性检测,使用下面的公式:首先根据当前像素周围3*3域的值,记录d[9]数组,如果b[i]等于0,则d[i]=0, 否则d[i]=1,最后计算 d1-d1*d2*d3+d3-d3*d4*d5+d5-d5*d6*d7+d7-d7*d8*d1是否为1,为1则满足连通性,可以删除。

6.最后一个条件保证当轮廓是2个像素宽时,只删除一边。统计sum的值,当值为8时候,可以删除。

可能不好理解,下面用几个gif要展示细化过程,红色表示本轮删除的点。

下图绿色表示:本轮符合第一个条件,但不符合第二个条件的点。

下图绿色表示:符合第一个条件但不符合第三个条件的点。

下图绿色表示:符合第一个条件但不符合第四个条件的点。

下图绿色:符合第一个条件但不符合第五个条件的点。

下图绿色:符合第一个条件但不符合第六个条件的点:

第六个条件可能不好理解,宽度(高度)只有2的像素的图像,如果没有条件六,就细化没了。

前五个条件第一轮,都没有绿。

第六个条,有一行(列)率了。

Hilditch 细化(实现一)的更多相关文章

  1. SSE图像算法优化系列三十二:Zhang\Guo图像细化算法的C语言以及SIMD指令优化

    二值图像的细化算法也有很多种,比较有名的比如Hilditch细化.Rosenfeld细化.基于索引表的细化.还有Opencv自带的THINNING_ZHANGSUEN.THINNING_GUOHALL ...

  2. OpenCV学习(15) 细化算法(3)

          本章我们学习一下Hilditch算法的基本原理,从网上找资料的时候,竟然发现两个有很大差别的算法描述,而且都叫Hilditch算法.不知道那一个才是正宗的,两个算法实现的效果接近,第一种算 ...

  3. OpenCV学习(14) 细化算法(2)

          前面一篇教程中,我们实现了Zhang的快速并行细化算法,从算法原理上,我们可以知道,算法是基于像素8邻域的形状来决定是否删除当前像素.还有很多与此算法相似的细化算法,只是判断的条件不一样. ...

  4. c++opencv中线条细化算法

    要达到的效果就是将线条尽量细化成单像素,按照论文上的Hilditch算法试了一下,发现效果不好,于是自己尝试着写了一下细化的算法,基本原理就是从上下左右四个方向向内收缩. 1.先是根据图片中的原则确定 ...

  5. OpenCV图像细化的一个例子

    转自:http://blog.csdn.net/zfdxx369/article/details/9091953?utm_source=tuicool 本文是zhang的一篇经典图像细化论文,效果很好 ...

  6. WinForm开发框架【细化权限至操作按钮】

    有不少园友经常问我程序有没有更新,真的很抱歉,最近因为工作原因一直很忙,导致程序有很长时间都没有更新了,首先在这里感谢关心俺的朋友们. 这几天好好看了一下原来的程序,还有很多地方需要改进,比如操作数据 ...

  7. C# 指针操作图像 细化处理

    /// <summary> /// 图形细化 /// </summary> /// <param name="srcImg"></para ...

  8. BI之SSAS完整实战教程7 -- 设计维度、细化维度中 :浏览维度,细化维度

    上篇文章我们已经将Dim Geography维度设计好. 若要查看维度的成员, AS需要接收该维度的详细信息(包括已创建的特性.成员属性以及多级层次结构), 通过XMLA与AS的实例进行通信. 今天我 ...

  9. BI之SSAS完整实战教程6 -- 设计维度、细化维度上:创建维度定义特性关系

    前面我们使用过数据源向导.数据源视图向导.Cube向导来创建相应的对象. 本篇我们将学习使用维度向导来创建维度. 通过前面几个向导的学习,我们归纳一下共同点,主要分成两步 1. 使用某种对象类型的向导 ...

  10. 按照索引的细化提取骨架算法的java实现

    近期研究验证码识别,也就看了一些图像识别的资料,其中一种字体细化提取骨架的算法网上没有java版的实现,所以就选取了一个python实现版本进行java代码的改写.. python版实现的地址: ht ...

随机推荐

  1. tauri学习(1)-初体验

    tauri是一个类似Electron的框架,允许前端程序员来开发桌面应用程序,外层的壳采用Rust语言开发,相比Electron生成的可执行程序更小,今天尝试了下,感觉还不错,按官网的教程只需执行下的 ...

  2. Windows10纯净版打不开组策略编辑器的问题

    有雨林木风系统用户反馈说,在安装的win10纯净版电脑系统里面,打开系统的组策略编辑器时,会出现无法打开或者找不到文件的问题.有什么办法解决呢?接下来, 雨林木风小编就来分享详细的处理办法.大家一起来 ...

  3. Win10系统如何清理Hosts文件的问题

    近期有电脑基地用户在电脑的文件过程中发现有一个叫Hosts文件,Hosts文件是做什么的呢?Hosts文件一般用于填补或替代网络里DNS功能的,但是由于Hosts文件中的信息过多会影响到电脑网上,所以 ...

  4. 校验 ChatGPT4 真实性的三个经典问题:区分 GPT3.5 与 GPT4,并提供免费测试网站

    现在已经有很多 ChatGPT 的套壳网站,以下分享验明 GPT-4 真身的三个经典问题,帮助你快速区分套壳网站背后到底用的是 GPT-3.5 还是 GPT-4. 大家可以在这个网站测试:https: ...

  5. 深入浅出--从零开始建设k8s监控之thanos(六)

    前言 书接上文,目前环境已经做好了水平拆分,是这个样子的 本文使用thanos对这些prometheus进行数据汇聚,并且详细讨论一下thanos 环境准备 组件 版本 操作系统 Ubuntu 22. ...

  6. 痞子衡嵌入式:从i.MXRT600用户手册UM里一个关于FlexSPI LUT长度的勘误说起

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT全系列FlexSPI外设的LUT长度. 事情起源于一个 RT600 客户, 他们读芯片用户手册发现 FlexSPI 外设 L ...

  7. Java集合——6.使用EnumMap

    目录 高效处理枚举键值对:EnumMap EnumMap的优势 EnumMap的示例 总结 高效处理枚举键值对:EnumMap 在Java集合框架中,HashMap通过对key计算hashCode() ...

  8. 基于 Docker 的 LLaMA-Factory 全流程部署指南

    LLaMA-Factory 是一个强大且高效的大语言模型(LLM)微调框架,支持多种微调方法(如 LoRA.QLoRA).完整的训练流程(SFT.RM.PPO.DPO)以及丰富的模型和数据集支持,能帮 ...

  9. C# Winform 为控件添加鼠标悬浮时的提示消息

    https://www.cnblogs.com/whr2071/p/16453901.html 学习自C#鼠标悬浮时,提示信息_20180509 很简单也很详细,可直接查看原贴.发在这里主要是记录一下 ...

  10. 前端获取 文件md5值

    // md5值计算export function fileToMd5(file: Blob) { return new Promise((resolve) => { const fileRead ...