美文网首页
边缘检测

边缘检测

作者: 陈继科 | 来源:发表于2017-01-12 18:22 被阅读185次

边缘表示了一个图像的重要信息,hin重要

Paste_Image.png

边缘检测目标:
确定图像中突然变化的部分
为啥边缘检测:
后续可以提取信息,识别物体,恢复几何图形

Paste_Image.png

边缘的起源
表面不连续

Paste_Image.png

深度不连续

Paste_Image.png

平面颜色的变化

Paste_Image.png

还有光照的不连续

确定边缘##

边缘是图像像素快速变化的地方

Paste_Image.png

图像的梯度,梯度是矢量,有大小有方向

Paste_Image.png Paste_Image.png Paste_Image.png

图像梯度栗子

Paste_Image.png

这种通过图像梯度的方法检测边缘固然好,然而未经去噪处理的图像辣鸡

Paste_Image.png

显然梯度难以看出边缘在哪儿
解决方案:首先先平滑图像,也即使得图像中每个像素和他周围的像素接近

Paste_Image.png

此时最后一张图中的峰值即为我们认为的边缘位置
由卷积的微分特性

Paste_Image.png Paste_Image.png

在图像中我们实际使用的是二维高斯正太函数

Paste_Image.png

使用高斯平滑滤波器的缺点:
降噪的同时,会使得边缘变宽,这实际上是一种tradeoff

Paste_Image.png

一些实现方面的细节
实际上像素梯度幅度并不是一个冲击函数,而更像一个单位方波函数,这使得我们在选取作为边缘的点时很棘手
我们怎么样才能把选取的边界点连起来形成曲线呢?
在说明上述问题之前,我们首先说明一个好的边缘检测器所具备的特征。
(1)对噪声鲁棒,既不多检测边缘点,又不少检测边缘点。
(2)好的定位,边缘点尽可能和实际边缘位置接近
(3)别太粗,一个实际边界点只有一个边缘点输出。

Paste_Image.png

大名鼎鼎的Canny 边缘检测##

(1)首先计算DoG(Derivative of Gaussian)

Paste_Image.png

(2)获取每个像素梯度的幅度和方向
(3)非极大值抑制

Paste_Image.png

非最大抑制是回答这样一个问题:“当前的梯度值在梯度方向上是一个局部最大值吗?“

所以,要把当前位置的梯度值与梯度方向上两侧的梯度值进行比较。梯度方向垂直于边缘方向。但实际上,我们只能得到C点邻域的8个点的值,而梯度方向上的值并不在其中,要得到这两个值就需要对该两个点两端的已知灰度进行线性插值,这要用到其梯度方向,这是Canny算法中要求解梯度方向矩阵的原因。

(4)双阈值法(Hysteresis thresholding)把边缘点连起来
设置两个阈值,一个高阈值一个低阈值
高阈值说明筛选比较严格,则选取的边缘点比较少,这些一定是边的组成,但可能边不连续
低阈值则会筛选很多边缘点,有的是边的组成,有的不是。
对于高阈值边不连续的情况,我们选取梯度正交的方向的低阈值点作为边界,例如下图中的r或者s

Paste_Image.png

细节问题
高斯平滑函数方差的选择对结果的影响

Paste_Image.png

大的方差检测大致的边缘。
小的方差会检测出来很多细节

除了canny这种梯度求边界的算法外,我们还可以根据颜色聚类、语义分析或者他们的组合来进行边界求解,这些算法和人类手工选取边界效果对比如下

Paste_Image.png

RANSAC##

Random Sample Consensus
假设我们上面找到了边界点,那么我们想从这些边界点中你和几条边界“直线”,改怎么做?
问题的难点在于我们不知道哪些点是属于哪些边的。
所以现在问题化为:
我们有一些我们需要的点来拟合一条直线,但是这些点又掺进去许多非此直线的数据(噪声、其他直线等等),那么我们怎样选择适合这条直线的点来找到这条直线。
也即这种方法将所有的点分为两类,inline(用来拟合) outline(是噪声)

Paste_Image.png

显然最小二乘法不再适用,因为这种方法会考虑所有数据对结果的影响。
这里我么内采用RANSAC方法,我们随机选点拟合直线,如果在这条直线误差范围内的点足够多,那么我们认为这是一个好的拟合。

Paste_Image.png

关于迭代次数的选择,自然是越多越好,但多的话浪费时间,所以这里我们估一个大概值

Paste_Image.png

选择k让这个值小于0.05.

相关文章

  • opencv+python学习记录(二十)边缘检测

    边缘检测包含:Prewitt边缘检测、Sobel边缘检测、Scharr算子、Canny边缘检测、Laplacian...

  • Canny边缘检测---OpenCV-Python开发指南(22

    什么是Canny边缘检测 Canny边缘检测是一种使用多级边缘检测算法检测边缘的方法。该方法由John F. Ca...

  • Opencv第三课---边缘检测

    边缘检测 边缘检测是图像领域非常重要的一种处理手段,要理解边缘检测,首先要理解什么是边缘。边缘是图像局部强度具有非...

  • Task06 边缘检测

    6.1 简介 6.1.1 什么是边缘? 边缘是图像强度函数快速变化的地方 6.1.2 如何检测边缘? 为了检测边缘...

  • cv领域之边缘检测技术学习

    一、边缘检测简单介绍 边缘检测是图像分割中最常见的操作之一,一般提到边缘可能有三个概念: 边缘检测:定位边缘像素的...

  • 图像轮廓(1)

    边缘检测虽然能够检测出边缘,但是边缘不是连续的,检测到的边缘不是一个整体。图像轮廓是指将边缘连接起来形成一个整体 ...

  • 数字图像 - 边缘检测原理 - Sobel, Laplace,

    先来看张图,左边是原图,右边是边缘检测后的图,边缘检测就是检测出图像上的边缘信息,右图用白色的程度表示边缘的深浅。...

  • 【Unity Shader入门精要学习】高级(二)

    屏幕后处理效果 边缘检测 边缘检测的原理是利用一些边缘检测算子对图像进行卷积(convolution)操作 一、卷...

  • 边缘检测

    1. 关于边缘模式的算法 边缘指的是图像内出现的明部和暗部的边界。边缘检测则是通过图像处理检测出该浓度变化的边界。...

  • 边缘检测

    边缘表示了一个图像的重要信息,hin重要 边缘检测目标:确定图像中突然变化的部分为啥边缘检测:后续可以提取信息,识...

网友评论

      本文标题:边缘检测

      本文链接:https://www.haomeiwen.com/subject/pwhlbttx.html