⛄?⛷️❄️?????️?️
开始之前学习一个单词热热身:
revitalize
v. 使恢复生机
This hair conditioner is excellent for revitalizing dry, lifeless hair.
用最小回忆 堆成宇宙 …
最近花小半个月时间完成了传统图像处理中的边缘检测包括Sobel算子、Canny算子,连通域分析包括Two pass、Seed Filling、Zhang Suen骨架提取方法,以上方法均为底层实现,均未调用任何openCV等其他库函数。
还包括基于QT实现的GUI,是在github中fork一个源码做的修改,该源码及以上所有实现算法由C++语言完成,获取方式见文末。
首先放一张可可爱爱的GUI图像处理界面,其中红框中分别代表自行实现的Sobel算子、Canny算子、米粒计数和骨架提取算法。
1 边缘提取 …
边缘检测是基于灰度突变来分割图像的最常用的方法。有三种常用的边缘建模方法,不同的边缘建模方法是根据它们的灰度剖面来分类的。
![a4c106fc04a5d5d8245843663db2da58.png](https://i-blog.csdnimg.cn/blog_migrate/d34350df14edf93f4bcab0a6e51bcaa6.png)
台阶边缘是指在1个像素的距离上发生的两个灰度级间理想的过渡,如图3-1a所示。而在实际中,数字图像都存在被模糊且带有噪声的边缘,在这种情况下,边缘被建模为一个更接近灰度斜坡的剖面,如图3-1b所示。其斜坡的斜度与边缘的模糊程度成反比。此时一个边缘点是斜坡中包含的任何点,而一条边缘线段将是一组已连接起来的这样的点。边缘的第三种模型是“屋顶”边缘,屋顶边缘是通过一个区域的线的模型,屋顶边缘的基底(宽度)由该线的宽度和尖锐度决定。 检测数字图像中的边缘可由图像灰度剖面的一阶导数和二阶导数来表征。在斜坡模型的各个点处,一阶导数为正,而在恒定灰度区域的一阶导数为零。此外,在斜坡的开始处,二阶导数为正;在斜坡的结束处,二阶导数为负;在斜坡上的各点处,二阶导数为零。故一阶导数的幅度可用于检测图像中的某个点处是否存在一个边缘,而二阶导数的符号可用于确定一个边缘像素位于该边缘的暗的一侧还是亮的一侧。以上便是数字图像边缘检测的基本原理介绍。 然而,实际得到的数字图像中难免会包含噪声,而导数在求取过程中对于噪声十分敏感,即微弱的可见噪声对检测边缘所用的两个关键导数存在严重影响,故在求取导数之前对图像进行平滑处理尤为重要。综上所述,执行边缘检测的三个基本步骤为: 1、为降噪对图像进行平滑处理。 2、边缘点的检测。通过某算子对数字图像进行滤波,得到边缘点的潜在候选者集合。 3、边缘定位。从候选边缘点中选择组成边缘点集合中的真实成员。 接下来将重点介绍广泛应用于边缘检测的Sobel算子和Canny边缘检测算子。
1.1 Sobel算子 … Sobel算子主要用于获得数字图像的一阶梯度,要得到一幅图像的梯度,则要求在图像的每个像素位置处计算偏导数,而对于数字图像,则要求关于每一像素点的领域上的偏导数的数字近似即可。