CS131学习笔记(lecture5)

2024-03-26 16:48
文章标签 学习 笔记 cs131 lecture5

本文主要是介绍CS131学习笔记(lecture5),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

讲义链接:http://vision.stanford.edu/teaching/cs131_fall1718/files/05_edges.pdf

图像梯度(gradient)

由于图像中平面的截止、深度的截止以及图案的构成都是以边缘(edge)为基础的,所以边缘检测成为识别图像包含信息和重建几何观测的一个重要手段。我们不难想到,借助数学中的导数工具,即可在矩阵某一维度导数突变处获得图像边缘信息。一维连续和离散导数定义式和滤波器函数如下:
连续:

df(x)dx=limx0f(x)f(Δx)Δx=f(x) d f ( x ) d x = lim △ x → 0 f ( x ) − f ( Δ x ) Δ x = f ‘ ( x )

后向:
df(n)dn=f(n)f(n1)1=f(n)f(n1)=f(n)kernel[0,1,1] d f ( n ) d n = f ( n ) − f ( n − 1 ) 1 = f ( n ) − f ( n − 1 ) = f ‘ ( n ) , 卷 积 k e r n e l : [ 0 , 1 , − 1 ]

前向:
df(n)dn=f(n)f(n+1)1=f(n)f(n+1)=f(n)kernel[1,1,0] d f ( n ) d n = f ( n ) − f ( n + 1 ) 1 = f ( n ) − f ( n + 1 ) = f ‘ ( n ) , 卷 积 k e r n e l : [ − 1 , 1 , 0 ]

中心:
df(n)dn=f(n+1)f(n1)1=f(n+1)f(n1)=f(n)kernel[1,0,1] d f ( n ) d n = f ( n + 1 ) − f ( n − 1 ) 1 = f ( n + 1 ) − f ( n − 1 ) = f ‘ ( n ) , 卷 积 k e r n e l : [ 1 , 0 , − 1 ]

举例:序列 f(n)=10,15,10,10,25,20,20,20 f ( n ) = 10 , 15 , 10 , 10 , 25 , 20 , 20 , 20
则三种导数分别为:
前向导数:0, 5, -5, 0, 15, -5, 0, 0.
后项导数:-5, 5, 0, -15, 5, 0, 0, 0.
中心导数:0,-5, -5, 20, -5, -15, 5,0
由矩阵f(x, y)中x方向和y方向的导数 f(x,y)x ∂ f ( x , y ) ∂ x f(x,y)y ∂ f ( x , y ) ∂ y 可引入梯度的概念,梯度是个矢量,其方向和大小分别为 arctanfy(x,y)fx(x,y),f2y(x,y)+f2x(x,y) arctan ⁡ f y ( x , y ) f x ( x , y ) , f y 2 ( x , y ) + f x 2 ( x , y )
举例1:令
I=10101010101010101010202020202020202020202020202020 I = [ 10 10 20 20 20 10 10 20 20 20 10 10 20 20 20 10 10 20 20 20 10 10 20 20 20 ]

则由x向导数滤波器和y向导数滤波器获得x向导数 Ix I x 和y向导数矩阵 Iy I y ,综合求得梯度值矩阵和梯度方向矩阵。
Ix=0000001010100010101000000000000 I x = [ 0 0 0 0 0 0 10 10 0 0 0 10 10 0 0 0 10 10 0 0 0 0 0 0 0 ]

Iy=0000000000000000000000000 I y = [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ]

举例2:对以下左图矩阵按照图示的卷积kernel求x向导数和y向导数并作图:
这里写图片描述
可知图片中x向导数受竖线影响较大,可以刻画原图中经向边缘的性质,y向导数受横线影响较大,可以刻画原图中纬向边缘的性质。由此我们获得了一个简单的边缘检测器。

一个简单的边缘检测器(edge detector)

前面得到的简单detector有一个很致命的缺点——受噪点影响极大。原因是在某个方向上,噪点和两侧像素点的差异近似于边缘处和两侧像素点的差异。考虑到噪点只是一个孤立的点,而边缘是全平面上一些有联系的点的集合,我们采用光滑处理(smoothing)然后求导的办法,如均匀光滑(mean smoothing)和高斯滤波(Gaussian)等,然而数学上先高斯后卷积的过程( ddx(fg) d d x ( f ∗ g ) )等价于直接和高斯滤波器的导数进行卷积( dfdgdx d f ∗ d g d x ),由此我们得到了一个有一定抗噪声能力的入门级edge detector。
噪点对梯度的影响
Canny提出,一个好的edge detector必须具有以下特点:
高信噪比——既要不错过边缘,又要能克服噪声的影响,即:不能把噪声检测为边缘,又忽略真正的边缘。
高定位精度——检测结果要尽可能地与真实边缘重合,检测结果不能离真实的边缘太远。
低误报率——一个边就应该用最少的像素刻画,不能一条实际3个像素宽的边,检测结果变成30个像素。
(注:这三个特点的汉译来自《计算机视觉一种现代方法》,和讲义中的直译相距甚远,但含义近似)
为达到以上效果,本课后续介绍了两个经典的edge detector。

Sobel检测器

搜了一下wiki和其他博客,Sobel算子的内容并不是很深奥,横向卷积算子和纵向卷积算子分别如下:

Gx=121000121=121[1  0  1] G x = [ 1 0 − 1 2 0 − 2 1 0 − 1 ] = [ 1 2 1 ] [ 1 0 − 1 ]

Gy=101202101=101[1  2  1] G y = [ 1 2 1 0 0 0 − 1 − 2 − 1 ] = [ 1 0 − 1 ] [ 1 2 1 ]

求得横向导数和纵向导数之后梯度的求法同前。

Canny检测器

来源:J. Canny, A Computational Approach To Edge Detection, IEEE Trans. Pattern Analysis and Machine Intelligence, 8:679-714, 1986
Canny detector是CV中几乎最常用的edge detector之一,算法如下:

1.使用Sobel operator计算矩阵中各点的梯度,得到规模等同于原图的梯度值矩阵和梯度方向矩阵。
2.采用“非极大抑制(no-maxium suppression,nms)”的方法删除冗余点。
3.使用“滞后阈值(hysteresis thresholding)”的方法确定真正的边缘点并连接。

非极大抑制
顾名思义,”非极大抑制“即”删除一个点集中不是最大的那些点“。自然,该算法的输入应当是一些点集和每个点的可量化性质的值。输出应当是这些点集的一个子集。
承前述,在Canny detector中,输入了一个图像矩阵、梯度幅值矩阵和梯度方向矩阵。为了简化计算,将所有任意的梯度方向就近近似到“水平(0°)、竖直(90°)、斜上(45°)、斜下(135°)”四个方向。对于给定的方向d,对于图像中的某一个点,其周围4个方向上一共有8个点,若方向d上的2个点中存在一个比当前梯度幅值更大的点,则当前的小点抑制归零。其原理如图:
NMS
若点(x, y)的梯度方向如图中箭头所指,则选取3个点中梯度幅度最大的点作为edge(绿色线条)在当前梯度方向上的代表。于是问题来了,为什么非最大的点可以删去呢?答案很简单,因为梯度是垂直于edge的呀,一条粗线在横截面上删去若干个(不是全部)点并不会让这条线断掉,对吧?对于所有的点,在各自的梯度方向上执行nms即可删除冗余点。
课程lab中给出了一个例子,对于矩阵 0.40.30.40.50.50.50.60.70.6 [ 0.4 0.5 0.6 0.3 0.5 0.7 0.4 0.5 0.6 ] 在四个方向进行nms,可得:

θ=0:0000000.60.70.6 θ = 0 时 : [ 0 0 0.6 0 0 0.7 0 0 0.6 ]

θ=45:0.4000.5000.60.70.6 θ = 45 时 : [ 0.4 0.5 0.6 0 0 0.7 0 0 0.6 ]

θ=90:0.400.40.50.50.500.70 θ = 90 时 : [ 0.4 0.5 0 0 0.5 0.7 0.4 0.5 0 ]

θ=135:000.4000.50.60.70.6 θ = 135 时 : [ 0 0 0.6 0 0 0.7 0.4 0.5 0.6 ]

滞后双阈值
经过筛选的点还需要通过一关才有可能作为最终的edge点。首先设置一低一高两个阈值。这些点中,梯度值小于低阈值的点将被判定不是edge上的点而被忽略;梯度值大于高阈值的点,必然被判定为bedge上的点,称为“strong pixel”(注意这里strong是绝对的);对于梯度值在两阈值中之间的点,观察其周围的8个点,若存在这样一个strong pixel,则判定该点在edge上;若所有的点都不是stong pixel,则判定该点不再edge上。

本节的最后讨论了Sobel operator中Gaussian方差 σ σ 对检测结果的影响。直观上来说,较大的 σ σ 可能会是原图像滤波后更加“平滑”(或者“模糊”),因此会使edge更加难以被检测出,观察实验结果可验证以上猜想。
sigma

Hough变换

做lab的时候这块死活过不去,在此细细整理一下。
HT可用于检测具有特定结构(参数方程已知)的几何图形(直线、圆圈、etc.),它在有噪点或者部分遮挡(partial occlusion)的环境中具有较好的性能。假设我们已经检测到了一些边缘点,这意味着我们已经有了一些可以部分描述检测几何对象的点,HT要做的就是把这部分恢复成一个完整的几何对象。以下以直线为例进行说明。
对于图像中的任意取定的像素点( xi x i , yi y i ),过该点的直线系可以表示为 yi=axi+b y i = a x i + b 的形式,移项得到 b=xia+yi b = − x i a + y i ,这样x-y空间中的一个点就变成了a-b空间中的一条直线。同理,x-y空间中的一条直线也就对应于a-b空间中的一个点。且以上两组关系是一一对应的。同样的,x-y空间中的“两点确定一条线段(直线)”对应于a-b空间中的”两条线相交确定一个点”。
HT
HT算法如下:

Input:edge detector产生的一些点坐标。output:图中一个完整object的标注。
1. 量化参数空间:把a-b空间划分成一些小的cell,对每个cell维护一个从0开始的counter;
2. 输入点必然对应于a-b空间内的一些线;
3. 对于2中的这些线,两两相交必然存在一些交点(a’b’);
4. 每一个交点所在的cell的counter分别增加1;
5. 对count超过某一threshold的cell恢复到原x-y空间中,即为检测出的一条直线。

当然了,如果用极坐标描述原图中的点,同样能得到理想的结果。lab中包含了相应的内容,此处不再赘述。一个例子如下:https://youtu.be/4zHbI-fFIlI?t=3m35s
总结一下HT:

好处:
概念在直觉上容易理解;
易于实现;
受部分缺失的信息影响不大;
应用广泛,凡是可以写出参数方程的object均可实现;
不好处:
参数越多计算量越大;
一次只能找出一种object;
Can be “fooled” by “apparent lines”(这句话不知怎么翻译,还请看懂的筒子解释下);
识别结果的长度和范围不能确定;
重合直线无法分离。

这篇关于CS131学习笔记(lecture5)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件