博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
计算机视觉(3)随记
阅读量:5914 次
发布时间:2019-06-19

本文共 2983 字,大约阅读时间需要 9 分钟。

我们常指的滤波是指空间滤波和频率滤波。

Images

在图像处理里面,管图像复原,去噪,可以说为图像复原,图像滤波,他是我们拿到图像的第一步操作,受到噪声污染的图像叫做退化,去噪就是复原。常见的噪声有加性噪声(与信号有关,一般把加性的随机性看成是系统的背景声),乘性噪声(传输过程中的信道不理想,他与信号的关系是相乘的,只有信号存在乘性噪声才存在,一般把乘性的随机性看成是系统的变性),常听到的噪声有白噪声,高斯噪声,泊松噪声,乘性噪声,椒盐噪声。

白噪声就是在整个频率内分布的噪声

2D filtering

对图像做复原就涉及到怎么样滤波(去燥)的问题!!

对于一维数据做滤波,我们首先想到的是做滑动平均。

滑动平均去燥。滑动的平均窗口中除以9是为了做归一化。

Image filtering

从图像的左上角开始滑动,切记保持原图像不变,不要用计算后的值替换原图像对应位置的值。

Smoothing with box filter Cross-correlation

计算完之后拿到一个比原图像略小的输出图。输出图不是那么的平滑,含有噪声,因为在频域里面我们用的矩形框滤波在高频位置是有跳跃的,某些高频噪声是可以通过的,并不是一个真正的低频滤波器。

boxFilter in OpenCV

boxFilter在OpenCV中的两种实现方式。

boxFilter是不用归一化的,blur是归一化的

Convolution in 2D

卷积和滑动平均并不一样,可以从给出的公式中看到用了减号,但是对于一个对称的boxFilter是没有影响的。

由于公式中用的是减号,在运算时,从boxFilter的右下角拿值。

在这个公式中的f它是把原图像进行了翻转,但是在实际实现当中我们不对原图像翻转,因为原图像更大,翻转的是boxFilter

Filtering vs. Convolution

对于2维的filter我们称为相关(correlation)

卷积运算对于filter是对称的来说,卷积与相关计算结果是一样的,只有对那些非对称的filter,卷积与相关的计算结果是不一样的,但是他们的意义是大同小异的。

matlab的实现先对h=filter2(g,f)和h=conv2(g,f)中的g先翻转180度。

Important filter:Gaussian

这是一种真正的低频滤波器,高频是完全阻断的,在一维时2πa是有根号的,而二维没有

Smoothing with Gaussian filter

Practical matters

线性滤波器满足的一些性质,交换律,结合律,还有微分运算。

线性10不变性质系统,两个滤波器依次对图像做运算等于先对两个滤波器做运算再对图像做运算。这种性质对后面的加速运算效果会很明显。

注意:上面提到的相关与卷积运算都是一种线性的操作。

Median filter(中值滤波器)

这是个非线性滤波器。

示例:
将罗列出来的数值进行排序,取中间值。

Bilateral filter(双边滤波器)是种保边的滤波器,不但能滤除噪声还能保证边缘的陡峭性,效果很好就是会很慢,可以在线下使用。

还有自适应滤波器等等

Median filter

Summary

对图像增强,去噪,增强对比度方面用的非常多。

数字散斑相关方法

学习这些首先眼界要宽,不仅仅局限于当前最火最热的话题比如深度学习,使得所有的问题都想着用深度学习来解决,没有他不行,不是这样的!!眼界不能这么狭隘,很多基本方法也可能会解决工业方面的大问题。

爬山法,最快下降法,预测算法,根据前后两个形变位置的关系,缩小搜索的个数,减小计算量。

Edge detection

计算机几何视觉中的应用

Why do we care about edges?

What Causes an Edge?(边缘是怎么产生的)

Image Features -- Edges

灰度的变化过程中会有一个边缘的产生,数据不会突变,一般是渐变的过程。

Edge detection(1D)

一维数据,求导取最大值

Digital Approximation of 1st derivatives

求前后两点的像素差取平均值。

就是用1*3的卷积模版在图像上进行滑动,得到的输出值就df(x)/dx

Edge Detection(2D)

左侧图像强调是竖直方向的边缘,增大了由黑到白的变化,采用的filter是1/2[-1,0,1],用的水平模版。右侧图像上看到很多水平方向的边缘,说明我们拿到的是水平边缘,用的是竖直模版来滤的波。最右边的图表示的是梯度的大小,幅值。

Effects of noise

真实的图片数据是有噪声的,直接拿f(x)来做微分的话,得到的梯度 噪声是非常大的,无法找到边缘的位置。所以在拿到原图像之后先去噪,再求微分。

Noise cleaning and Edge Detection

先经过一个线性滤波器,例如高斯滤波器。
在竖直方向进行一个去噪,再检测出竖直方向的边缘。

示例:

Sobel Edge Detector

对于图像中心位置给出的权重更大,远离图像中心位置给出的权重更小,这样的一种滤波器也是很常用的。

Other Filters

这是检测一个垂直边缘。
这是检测一个水平边缘。

Robinson Compass Masks

对滤波器进行不同的翻转会得到不同的边缘。

箭头表示的是灰度的变化方向,并不是边缘方向。

通过不同的mask进行卷积运算,我们就可以抽取到图片中不同的某些边缘信息,再将他们组合起来作为图像的某种结果的表达。抽取出来的Robinson信息是可以作为图像的检索,识别等等操作。

Other edge detectors - second-order derivative filters(1D)

Noise cleaning and Edge Detection

此处可以看出来对filter对二阶导再与原图像相乘 和 filter*f在求二阶导的结果是一样的,这样可以节省很多计算开销。在二阶导为零的位置得到边缘的位置。

Edge Detection(2D)

一阶导的幅值大于某个阈值或者二阶导数等于0,为图像的边缘。

图像的拉普拉斯(Laplacian)就是图像的二阶导数。

Notes about the Laplacian

LOG filter滤波器会经常用到。

Image derivatives

图片上的竖直边缘可以对应到右边数学上的一阶导数
右边是一个梯度幅值的图像
图像梯度
梯度的方向

Edge Detection

得到一些可作为边缘的参考点。

how to detect one pixel thin edges ?

我们得到的会是一个比较粗的一个边缘,而我们希望拿到的是一个像素点。所以涉及到我们怎样拿到一个由单一点组成的边缘。

Non-Maximum Supression

非极大值抑制,在梯度的方向上找到每一个位置元素的变化,从而找到局部的最大值,将这样一个点来作为我们的边缘。

An edge is not a line

很多时候我们拿到的边缘并不是条直线,如果我们要检查的边缘需要结果是条直线,怎么做?

转载地址:http://vvqpx.baihongyu.com/

你可能感兴趣的文章
Javascript延时函数
查看>>
UML类图关系大全
查看>>
Ant编译Hadoop 1.0.3的eclipse-plugin插件包
查看>>
tensorflow开发环境搭建
查看>>
JDBCRealm Http Digest
查看>>
CentOS 7 网络配置
查看>>
matplotlib 交互式导航
查看>>
eclipse的插件未安装成功
查看>>
由装箱引发的——Integer比较的来龙去脉
查看>>
java 深拷贝
查看>>
UnicodeEncodeError: 'ascii' codec can't encode
查看>>
jvm在什么时候进行进行垃圾回收,在什么时候进行扩大内存
查看>>
【转载】强大的命令行工具wmic
查看>>
JavaScript里的数组转化新方法Array.From
查看>>
修改eclipse下maven项目的java文件编译目录路径
查看>>
直接启动tomcat时为tomcat指定JDK 而不是读取环境变量中的配置
查看>>
ubuntu 安装 chef安装
查看>>
需求整理步骤规范
查看>>
《JAVA面向对象的特征 》
查看>>
技本功丨收藏!斜杠青年与你共探微信小程序云开发(下篇)
查看>>