# 数字图像处理:边缘检测
## 给出“离散拉普拉斯算子”一般形式的数学推导
离散值的导数使用差分代替:
所以:
![](https://www.writebug.com/myres/static/uploads/2022/9/21/122497e3f0944af2a580437d5624ddd4.writebug)
以(x, y)为中心点,在水平和垂直方向上应用拉普拉斯算子,滤波器(对应a=1的情况)为:
![](https://www.writebug.com/myres/static/uploads/2022/9/21/5c7751970487cd942f27ca9c597e9b72.writebug)
这个滤波器在90°方向上是各向同性的,但在45°方向上不是。而拉普拉斯算子具有旋转不变性,所以在
°方向上也应该具有各向同性,所以再在45°方向上应用拉普拉斯算子(对应a=0.5的情况):
![](https://www.writebug.com/myres/static/uploads/2022/9/21/511999aa66ff65c351f834fcd33d9d4a.writebug)
#### 给出LoG形式的数学推导,并给出一个5*5大小的LoG算子
![](https://www.writebug.com/myres/static/uploads/2022/9/21/9c8009c8ee8ee82ec837bff1e738c486.writebug)
同理:
![](https://www.writebug.com/myres/static/uploads/2022/9/21/89fbb2b289203be030b402d059928dee.writebug)
常用的5*5滤波器模板为
![](https://www.writebug.com/myres/static/uploads/2022/9/21/47c97e324a7488dcb99108700fa7960e.writebug)
使用公式13,带入并归一化后可以算出:
![](https://www.writebug.com/myres/static/uploads/2022/9/21/d14ea0ca6928cf4120a08d52e67692b1.writebug)
使用Prewitt,Sobel,Canny,FDoG算子处理三张以上图片,分析并比较结果。
### 结果图片展示与分析
![](https://www.writebug.com/myres/static/uploads/2022/9/21/511999aa66ff65c351f834fcd33d9d4a.writebug)
图1
![](https://www.writebug.com/myres/static/uploads/2022/9/21/d73d44500e542ddd1253144f1899f9e6.writebug)
图2
![](https://www.writebug.com/myres/static/uploads/2022/9/21/11a8d898969975efb328c03ed0e3842c.writebug)
图3
![](https://www.writebug.com/myres/static/uploads/2022/9/21/7c2e68d3ebfad29332cb6852b764846f.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/9/21/3347f946b00bf1e423965698c8398b32.writebug)
图4
![](https://www.writebug.com/myres/static/uploads/2022/9/21/f6a99423854bd09893cb26dff44e59d8.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/9/21/59687cb9bf0762b5a2a1fa49813d0eba.writebug)
图5
prewitt算子和sobel算子都是一阶导数算子,只对图像求一阶导数,返回梯度值,而非0-1边界,所以图像较为平滑,并且有明暗灰度的变化,越明显的边界,在图中越亮,也就是梯度值越大。相比较的话, sobel算子的表现力更好一些,因为考虑了局部性原则,对像素点附近的像素附加了更大的权重,所以能更好的还原图像局部细节,如图3的左眼,图1图2的鼻梁;而prewitt算子是平均滤波,所以图像的灰度更加平均,二者在速度上没有什么差异。
Canny算子和FDoG算子都是返回的0-1边界,但是不同之处在于Canny算子进行了非极大值抑制,边界是一个像素宽的,FDoG的边界是多像素。FDoG处理过程中会将不明确的边界方向按邻居的方向来补全,所以边界具有更好的连续性,如图4中脸的左下边界。并且FDoG对于文字的边界能够几乎完整的识别出来,但是Canny的文字边界则是模糊不可辨认的,可能是由于FDoG识别图像的切线而文字较为连续。但是图4中FDoG对于山的边缘识别效果 差,山顶、边缘的山脉边界和雪线都没有识别出来,Sobel识别效果 好,山顶梯度值很高,雪线的边界明显。FDoG还倾向于把边缘连接成线,如图4右下角的草丛。图5中FDoG效果 差,将岩石的纹理全都识别为了边界,并且导致左下角草丛和山的边界不可辨认,而Canny算子效果稍好一些,Prewitt和Sobel算子效果 好。
两者也都具有一些问题,如把纹理识别为边界,如图3卫衣的帽子,这部分在Prewitt和Sobel中也具有较高的梯度值,应该是由于前面较暗,后面较亮,所以对比强烈被误认为了边界。有的边界也没有被识别出来,如图2的衣服图5后面的山脉,同样在Prewitt和Sobel算子中这个边界也并不明显,因为皮肤和白衣服的颜色、雪山和天空的颜色非常相近,所以这个边界的梯度值较小。在处理过程中,Canny的速度要慢得多,因为步骤繁琐,并且是对每个像素逐点计算的。
### 分析参数的影响
对FDoG的参数进行修改:
修改循环次数和有无高斯滤波
![](https://www.writebug.com/myres/static/uploads/2022/9/21/68668a0d9774e53f9e69f68631213186.writebug)
直观来看,循环次数对结果的影响并不大。仔细观察的话,可以发现随着循环次数的增多,图像识别出了更多细微的边缘。
![](https://www.writebug.com/myres/static/uploads/2022/9/21/ca1d3ed9289d6d55e6889d11314e10d0.writebug)
个高斯值的差也会随之变化
![](https://www.writebug.com/myres/static/uploads/2022/9/21/98a9fcc4e958e86a163d15199813b210.writebug)
也就是上式中的f(t)变化,由于没有进行非极大值抑制,边界像素点的数目就会增多,所以导致结果的线条粗细发生变化。
修改的值,论文中默认为3.0
![](https://www.writebug.com/myres/static/uploads/2022/9/21/3567d3a0d89ecb25da408d377a111ad6.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/9/21/2ff4d7f30c0b507da3d96d051c9f5189.writebug)的变化对结果的影响也不明显,主要是边界线条会有更多的延伸, 出现在最后一次积分中:
![](https://www.writebug.com/myres/static/uploads/2022/9/21/c76fa858f3cd214cf48f86ab5d10728d.writebug)
论文中也解释到控制"flow kernel"的拉长程度,所以 增大时,G会减小,然后在 后的阈值判断中,小于阈值的像素点被认为是边界,这导致了会有更多的像素点成为边界,也就表现为线条的拉伸。
### -score评分与其他测试
使用论文中的两个测试用例如下,效果并不好,并且通过修改给定的那几个参数并没有显著提升。应该是在构建ETF时就没有构建好圆形的切线方向,后续的调参都是在ETF的基础上进行的,所以并没有改善结果。
![](https://www.writebug.com/myres/static/uploads/2022/9/21/58f96daca6119b02c36e6ee61203cff9.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/9/21/6990034a6d2fbf3944b4cec10740b3b1.writebug)
#### F-score评分部分是与张庆阳同学合作完成的
为了测试这几种算子的分类效果,使用了伯克利大学提供的这个数据集可以用来进行图像分割和图像边缘检测,数据集中的ground truth是人工标记的。这里将数据集中给定的ground truth标注信息绘制成为黑白边界图像,如下所示。
![](https://www.writebug.com/myres/static/uploads/2022/9/21/d8cfbcfda5bf8bb12bcdec69409eb4e5.writebug)
然后对数据集中的图片应用四种边缘检测算子,与ground truth的结果进行对比,计算准确率、精准率、召回率和F-score。
| |准确率 |精准率 |召回率 |F-score |
|----|----|----|----|----|
| Prewitt |0.883 |0.914 |0.967 |0.940 |
| Sobel |0.909 |0.913 |0.995 |0.953 |
| Canny |0.769 |0.916 |0.840 |0.877 |
| FDoG |0.754 |0.926 |0.822 |0.871 |
| FDoG+NMS |0.894 |0.914 |0.979 |0.945 |
加入非极大值抑制之后,FDoG的F1-score和准确率都有了较大提升,这是因为ground truth中的边界是单像素宽的,如果不加非极大值抑制FDoG的结果会过宽,影响正确率。准确率不够高的另一个原因是 ground truth中只有真正的物体边界曲线而且有一些边界并没有标注(如上图上侧的横向边界),而不论是什么算子都会有一些纹理被识别成边界,造成误差。
#### 对FDoG算法添加非极大