[CS131] Lecture 6 Edge Detection

2023-10-30 09:50
文章标签 detection edge lecture cs131

本文主要是介绍[CS131] Lecture 6 Edge Detection,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

根据 Stanford CS131 课程写的笔记(大部分为 note 翻译),英语水平一般,如有错误请评论指正

Lecture 6 Edge Detection

Edge Detection

Edge Basic

图片上的边缘主要有四个可能的来源:不连续的表面(表面角度突然改变)、深度不连续(一个表面重叠在另一个上)、表面颜色不连续、光照不连续(明 / 暗)。从数学上来看,梯度大的位置为边缘。

Sobel Noise Detector

这个算法利用 2 个 3×3 3 × 3 核,与图像卷积,结构近似于原始图像的 x 和 y 导数。

Gx=121000121,Gy=101202101 G x = [ 1 0 − 1 2 0 − 2 1 0 − 1 ] , G y = [ 1 2 1 0 0 0 − 1 − 2 − 1 ]

这些矩阵代表了光滑化和微分的结果
Gx=121000121=121[101] G x = [ 1 0 − 1 2 0 − 2 1 0 − 1 ] = [ 1 2 1 ] [ 1 0 − 1 ]

但是 Sobel Filter 有许多问题,包括定位差。并且 Sobel Filter 比起倾斜边缘,更偏向于水平和垂直边缘。

Canny Edge Detector

Canny Edge Detector 算法有五步:

  • 抑制噪音

    我们可以用一个类似于 Sobel Filter 的方法,同时减少噪音并计算 x、y 方向上的导数。

  • 计算梯度大小与方向

    |f(x,y)|=f2x+f2yθ=tan1(fy/fx) | ∇ f ( x , y ) | = f x 2 + f y 2 θ = t a n − 1 ( f y / f x )

  • 应用 non-maximum 消除

    我们假设只有梯度最大时出现边缘,所以消除掉所有不含最大梯度值的像素。基本上,如果一个像素不是正方向上三个像素和反方向上三个像素中梯度值最大的一个,那么就将这个像素设为 0。并且,所有的梯度值都要四舍五入到接近 45°

  • 滞后阈值法 (Hysteresis thresholding)

    所有保留的像素都服从于滞后阈值法。这部分用两个值作为高低阈值。像素值高于高阈值的为强边缘,低于低阈值的设为 0,在两个阈值之间的为弱边缘。

  • 通过连通性 (Connectivity) 分析检测边缘

    所有强边缘像素都是边缘。但对于弱边缘像素,只有和强边缘像素相连的弱边缘像素才是边缘。这一部分使用 BFS 或者 DFS 来找到所有边缘。

Hough Transform(霍夫变换)

Intro to Hough Transform

霍夫变换是检测图像特别结构,也就是线条,的一个方法。无论如何,霍夫变换可以检测任何参数方程已知的结构。它在噪音和部分遮挡下提供了一个强健的检测器。

Goal of Hough Transform for detecting lines

要使用霍夫变换,首先要确定图像中构成直线的像素集。这项工作要在边缘检测器检测出边缘后进行,这样才能更好的找出组成直线的像素集。

Detecting lines using Hough Transform in a,b space

假设一条穿过像素 xi,yi x i , y i 的线为:

yi=axi+b y i = a ∗ x i + b

那么,可以得出将像素转换到 a,b a , b 空间的公式:
b=axi+yi b = − a ∗ x i + y i

这个公式代表了一条在 a,b a , b 空间上的线,并且每个在线上的点 a,b a , b 代表了一条穿过点 xi,yi x i , y i 的线。

因此,对于边缘像素集上的每一个像素,我们都将它转换到 a,b a , b 空间上得到一条线。

a,b a , b 空间上两条线交点处的 ab 值代表了 yi=axi+b y i = a ∗ x i + b 这条线同时穿过几个点。例如:xy 空间上有 x1,y1=(1,1) x 1 , y 1 = ( 1 , 1 ) x2,y2=(2,3) x 2 , y 2 = ( 2 , 3 ) ,转换得到 ab 空间上两条线 b=a1+1 b = − a ∗ 1 + 1 b=a2+3 b = − a ∗ 2 + 3 ,联立方程解得 a=2,b=1 a = 2 , b = − 1 。这种 ab 空间上的交叉点告诉了我们在 xy 空间上同时经过两点的线。

Accumulator Cells

为了得到最佳的线,我们将 ab 空间量化为细胞。对于 ab 空间中的每一条线,我们都会在这条线经过的每个细胞上添加一个计数。最后,有最多计数的细胞代表 ab 空间上有最多的交点,即为在 xy 空间上穿过最多点的线。所以可以代表图像真正的线。

霍夫变换的具体算法为:

  • 通过将参数空间 (a,b) 划分成细胞来进行量化。
  • 量化后的空间常被称为累加器细胞
  • 计算一条线在特定细胞交叉的次数
    • 针对每一对被检测为边缘的点 (x1,y1),(x2,y2) ( x 1 , y 1 ) , ( x 2 , y 2 ) ,找到其在 (a,b) ( a , b ) 空间上的交叉点 (a’,b’)
    • (a,b) ( a ′ , b ′ ) 所属细胞(范围 [[amin,amax],[bmin,bmax]] [ [ a m i n , a m a x ] , [ b m i n , b m a x ] ] )上增加值
    • 值超过某个特定界限的细胞可认为是 (x,y) 空间上的一条线

Hough transform in ρ,θ ρ , θ space

用 ab 空间表示线的问题在于它们收到限制而且不能表示垂线。所以,我们考虑用极坐标 (polar coordinates) 来表示线。

xcosθ+ysinθ=ρ x ∗ c o s θ + y ∗ s i n θ = ρ

在极坐标中,线被表示为类正弦波函数。

同 ab 空间,在极坐标中交叉点仍然表示同时穿过几个点的直线。所以,我们同样可以使用上面提到的累加器算法。

Concluding Remarks

霍夫变换有以下优点:

  • 概念简单,易于实践
  • 可以很好的处理缺失、遮挡的数据
  • 可以找到有参数方程的结构,不止是线

和缺点:

  • 参数越多,计算复杂度越高
  • 只能找一种结构(例如,不能同时找线和圆)
  • 不能检测线段的长度和位置
  • 在同一条线上的线段不能分割

RANSAC

随着模型复杂度的提高(例,参数量的提高),霍夫变化失去了效率。这个章节将阐述 RAndom SAmple Consensus (RANSAC,随机样本一致性) 技术的设计,它提供了一种计算效率高的拟合图像模型的方法。

Introduction RANSAC Basics

RANSAC 用于估算图像模型的参数。RANSAC 背后的基本想法是:用随机选择的数据最小子集来解决拟合问题,并选出最佳拟合。为了实现这个想法,RANSAC 尝试反复地识别符合我们想拟合的模型的数据点。

下图 a) 描述了一个被拟合进数据的线性模型,虽然大部分点可以和线性模型,但是两个偏离的绿点可以极大影响整体拟合精度。RANSAC 算法将通过识别数据正常值 (inliers) 和异常值 (outliers) 来解决这个问题。

RANSAC 随机在数据中选择样本(样本不是点,而是包含许多点的集合),基于一个假设:只要选择足够多的样本,拟合效果差的可能性较低。

Applications

RANSAC 算法可以估算不同模型的参数。这已经被证明在图像拼接(上图 b))、异常值检测、车道识别(线性模型估计)、立体相机计算方面有效。

The Algorithm

RANSAC 算法迭代的采样原始数据的标称子集(例如,线性估计所用的两个点)。模型对每个样本拟合,且计算对应这种拟合的正常值数量,这包括接近于拟合模型的数据点。在两个极限值内的点(例如,两个标准偏差,或者一个先前决定的像素数量)被视作正常值。如果数据的大部分是正常值,那么拟合模型效果较好。在拟合效果好的情况下,模型会使用所有正常值进行重新拟合,而异常值将被丢弃。反复执行以上过程,找出有足够多的正常值的模型,再对比选择出最佳模型。

下图展示了这个过程,图三为最佳拟合。

以下是 RANSAC 的伪代码

Determine:n -- the smallest number of points requiredk -- the number of iterations requiredt -- the threshold used to  identify a point that fits welld -- the number of nearby points required to assert a model fits well
Until there is a good fit or k iterations have occurreddraw a sample of n points from the data uniformly and at randomfit to that set of n pointsfor each data points outside the sampletest the distance from the point to the line against t; if the distance from the point to the lineis less than t,the point is closeendif there are d or more points close to the linethen there is a good fit. Refit the line using allthese points, and terminate
end

RANSAC 主要循环的步骤如下:

  1. 随机从数组中选择一组种子
  2. 用所选的种子进行参数估计
  3. 确定正常值(靠近估计模型的点数量)
  4. (如果存在足够多的正常值,)用这些正常值重新估计模型
  5. 重复 1-4,最终保证模型有最多的正常值和最佳的拟合。

How Many Samples are Needed?

RANSAC 是一种非确定性模型拟合方法,意味着需要足够多的样本来对参数进行可靠的估计。需要的样本数取决于:

  • 需要拟合的参数的数量
  • 噪音的数量

下图列出了基于 p=0.99 p = 0.99 和样本大小变化(例如,参数的数量)和异常值的分数(例如,噪音)的所需最小样本数。噪音越多、模型越大,所需的样本数也就越多。

需要选择足够多的样本 ( k k ),这样所有样本都失败的概率 (Pf) 较低:

Pf=(1Wn)k=1p P f = ( 1 − W n ) k = 1 − p

其中, Wn W 、 n 分别表示样本拟合正确的概率和每个样本所含点的数量。所以,最小样本数为:
k=log(1p)log(1Wn) k = l o g ( 1 − p ) l o g ( 1 − W n )

Advantages, Limitations, and Considerations

优势:

  • 实现简单
  • 在模型拟合领域适用范围广
  • 计算效率高
  • 抽样方法为所有可能的特征组合提供了更好的解决问题的方法。

在一些情况下,使用霍夫转换更好:

  • 特征数小。例如,线性模型估计(2 个特征)用霍夫转换,但图像拼接需要像 RANSAC 一样计算效率更高的方法
  • 噪音数高;如上文所提及,更多的噪音需要更广泛的抽样方法(即更多的样本数),提高了计算成本。更高的噪音也减少了正确参数估计的机会和异常值分类的精度。

值得注意的是,RANSAC 最大的限制是在高噪下表现较差,而现实世界的问题总是有着较高的异常值。

这篇关于[CS131] Lecture 6 Edge Detection的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/307081

相关文章

时间序列|change point detection

change point detection 被称为变点检测,其基本定义是在一个序列或过程中,当某个统计特性(分布类型、分布参数)在某时间点受系统性因素而非偶然因素影响发生变化,我们就称该时间点为变点。变点识别即利用统计量或统计方法或机器学习方法将该变点位置估计出来。 Change Point Detection的类型 online 指连续观察某一随机过程,监测到变点时停止检验,不运用到

MACS bdgdiff: Differential peak detection based on paired four bedGraph files.

参考原文地址:[http://manpages.ubuntu.com/manpages/xenial/man1/macs2_bdgdiff.1.html](http://manpages.ubuntu.com/manpages/xenial/man1/macs2_bdgdiff.1.html) 文章目录 一、MACS bdgdiff 简介DESCRIPTION 二、用法

Edge 100 个好用插件

Microsoft Edge 浏览器自推出以来,凭借其快速、安全和丰富的扩展插件,赢得了许多用户的青睐。以下是一些精选的 Edge 浏览器插件,它们能够显著提升你的浏览体验和生产力。 Tampermonkey:这是一个强大的用户脚本管理器,可以让你自定义网页行为,实现各种自动化操作,如自动填写表单、绕过版权限制等。 Infinity 新标签页 (Pro):这个插件可以让你自定义新标签页,添加

Learning Memory-guided Normality for Anomaly Detection——学习记忆引导的常态异常检测

又是一篇在自编码器框架中研究使用记忆模块的论文,可以看做19年的iccv的论文的衍生,在我的博客中对19年iccv这篇论文也做了简单介绍。韩国人写的,应该是吧,这名字听起来就像。 摘要abstract 我们解决异常检测的问题,即检测视频序列中的异常事件。基于卷积神经网络的异常检测方法通常利用代理任务(如重建输入视频帧)来学习描述正常情况的模型,而在训练时看不到异常样本,并在测试时使用重建误

REMEMBERING HISTORY WITH CONVOLUTIONAL LSTM FOR ANOMALY DETECTION——利用卷积LSTM记忆历史进行异常检测

上海科技大学的文章,上海科技大学有个组一直在做这方面的工作,好文章挺多的还有数据集。 ABSTRACT 本文解决了视频中的异常检测问题,由于异常是无界的,所以异常检测是一项极具挑战性的任务。我们通过利用卷积神经网络(CNN或ConvNet)对每一帧进行外观编码,并利用卷积长期记忆(ConvLSTM)来记忆与运动信息相对应的所有过去的帧来完成这项任务。然后将ConvNet和ConvLSTM与

COD论文笔记 ECCV2024 Just a Hint: Point-Supervised Camouflaged Object Detection

这篇论文的主要动机、现有方法的不足、拟解决的问题、主要贡献和创新点: 1. 动机 伪装物体检测(Camouflaged Object Detection, COD)旨在检测隐藏在环境中的伪装物体,这是一个具有挑战性的任务。由于伪装物体与背景的细微差别和模糊的边界,手动标注像素级的物体非常耗时,例如每张图片可能需要 60 分钟来标注。因此,作者希望通过减少标注负担,提出了一种仅依赖“点标注”的弱

COD论文笔记 Adaptive Guidance Learning for Camouflaged Object Detection

论文的主要动机、现有方法的不足、拟解决的问题、主要贡献和创新点如下: 动机: 论文的核心动机是解决伪装目标检测(COD)中的挑战性任务。伪装目标检测旨在识别和分割那些在视觉上与周围环境高度相似的目标,这对于计算机视觉来说是非常困难的任务。尽管深度学习方法在该领域取得了一定进展,但现有方法仍面临有效分离目标和背景的难题,尤其是在伪装目标与背景特征高度相似的情况下。 现有方法的不足之处: 过于

Detection简记3-Region Proposal by Guided Anchoring

创新点 1.新的anchor 分布策略:Guided Anchoring 2.feature adaption module,根据潜在的anchor精调特征 总结 Guided Anchoring:流程如图所示 特征图F1接两个分支:位置预测分支产生物体可能存在的位置的概率图,形状预测分支预测物体的形状,独立于位置。根据两个分支的输出,得到anchor。 位置预测分支: 1X1的卷积+si

Detection简记2-DAFE-FD: Density Aware Feature Enrichment for Face Detection

创新点 1.使用密度估计模型增强检测中的特征图 总结 整个流程还是很清晰的。 conv1-3的特征图经过密度估计模块由检测器D1进行检测。 D2-4分别是四个检测器。 FFM是特征融合模块,将不同层不同大小的特征融合。 FFM网络结构如下: 首先使用1X1的卷积减少两组特征的厚度到128,然后使用双线性插值统一两组特征图的尺寸,然后相加。类似于cvpr2017的SSH。 多尺度检测器的网

DS简记1-Real-time Joint Object Detection and Semantic Segmentation Network for Automated Driving

创新点 1.更小的网络,更多的类别,更复杂的实验 2. 一体化 总结 终于看到一篇检测跟踪一体化的文章 网络结构如下: ResNet10是共享的Encoder,yolov2 是检测的Deconder,FCN8 是分割的Deconder。 其实很简单,论文作者也指出:Our work is closest to the recent MultiNet. We differ by focus