opencv笔记5:频域和空域的一点理解

简介: time:2015年10月06日 星期二 12时14分51秒# opencv笔记5:频域和空域的一点理解空间域和频率域傅立叶变换是f(t)乘以正弦项的展开,正弦项的频率由u(其实是miu)的值决定。

time:2015年10月06日 星期二 12时14分51秒

# opencv笔记5:频域和空域的一点理解

空间域和频率域

傅立叶变换是f(t)乘以正弦项的展开,正弦项的频率由u(其实是miu)的值决定。因为积分后左边剩下的为一变量是频率,所以我们说傅立叶变换域是频率域。
(《数字图像处理》冈萨雷斯,中文第三版P128)

当变量t用于说明图像时,我们一般将变量t的域称为空间域。

按《图像处理》(章毓晋)的理解,首先是认同模板操作的,然后借助卷积定理,将模板操作转化为傅立叶的乘积,也就是图像的傅立叶结果F(u,v)与转移函数H(u,v)相乘。

这个方向上看是OK的,无论是推导证明,还是物理意义。但是反过来呢?图像的傅立叶F与转移函数H相乘,这本身有什么意义吗?

===
并不需要考虑频率域中傅立叶F和转移函数H相乘的含义。我们就从模板操作考虑就好了。模板操作,就是说用模板框定的范围内的像素点,来更新当前点的灰度值。
更性的时候,有个问题:为什么(空间域的)高斯滤波又叫高斯模糊?所谓模糊不就是平滑的意思吗?平滑和锐化是相对的,平滑可以理解为“去除高频分量”,这不就是在说低通滤波吗?也就是(模糊<=>平滑<=>去除高频分量<=>低通滤波),这几个概念是等价的。那么,高斯滤波为什么算是低通滤波呢?

再观察几个其他的空间域滤波模板,比如平均模糊,就又一个更大的疑问:模板矩阵中元素都为正数,这是低通滤波(平滑、模糊操作)的特性吗?

是的。But why?这可以从频率域相关公式推导出来:频率域的高斯低通滤波器H(u),用反傅立叶变换得到的空间域相应的低通滤波器h(x),发现它们的取值都是正的。因此,使用一个全部带正系数的模板就可以在空间域中实现低通滤波
同时还有另一个结论:空间域模板尺寸越大,模糊的就越厉害。
(具体细节,参考冈萨雷斯《数字图像处理》第三版中文翻译本,P167~168)

类似地,用两个高斯函数做差,其结果是一个高斯高通滤波器H(u),用反傅立叶变换得到的空间域相应的低通滤波器h(x),观察h(x)图像发现中间为正,两边是负的。这说明:频域空间高通滤波器对应的空间域高通滤波器的模板,其系数是:锚点(也就是中心点)是正的,其他点是负的或者是0(4邻域和8邻域还是有点不同的)

我认为看频域滤波的目的,就是了解以上两条结论。

当然,上述两条结论的推导中,还有点小疑问。为什么高斯函数它就是低通滤波器?
因为是H(u)和F(u)相乘,所以观察H(u)的图像就好了。发现低通滤波的H(u)图像,都是中间有隆起,两边衰减。那么相乘的效果就是,中心附近的F(u)会被放大(其实不会放大,因为H(u)中心取值都是1,其他地方都小于1)、保留,就算是衰减,也是从中心往四周衰减的。也就是说,距离H(u)的中心越远,衰减越厉害。那么这个距离,和频率是什么关系?

前面看到,u表示频率。这里其实图像是二维的,准确讲应该是使用H(u,v)和F(u,v),即u,v都是频率。那么(u,v)元组之间的大小关系,就使用距离来衡量了,也就是“点到点之间的距离”,那么所谓“低频”就是指“那些到中心点(u0,v0)的距离小的点(u,v)”,这些(u,v)点对应的傅立叶函数值F(u,v),是需要保留的低频分量

ref:《数字图像处理》冈萨雷斯,中文第三版

目录
相关文章
|
存储 编译器 数据库
[笔记]OpenCV+FFmpeg+Qt实现视频编辑器之OpenCV核心类型 Mat
[笔记]OpenCV+FFmpeg+Qt实现视频编辑器之OpenCV核心类型 Mat
229 1
|
并行计算 PyTorch TensorFlow
Ubuntu安装笔记(一):安装显卡驱动、cuda/cudnn、Anaconda、Pytorch、Tensorflow、Opencv、Visdom、FFMPEG、卸载一些不必要的预装软件
这篇文章是关于如何在Ubuntu操作系统上安装显卡驱动、CUDA、CUDNN、Anaconda、PyTorch、TensorFlow、OpenCV、FFMPEG以及卸载不必要的预装软件的详细指南。
11100 4
|
计算机视觉
Opencv错误笔记(一):通过cv2保存图片采用中文命名出现乱码
在使用OpenCV的cv2模块保存带有中文命名的图片时,直接使用cv2.imwrite()会导致乱码问题,可以通过改用cv2.imencode()方法来解决。
605 0
Opencv错误笔记(一):通过cv2保存图片采用中文命名出现乱码
|
Ubuntu 应用服务中间件 nginx
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
本文是关于Ubuntu系统中使用ffmpeg 3.2.16源码编译OpenCV 3.4.0的安装笔记,包括安装ffmpeg、编译OpenCV、卸载OpenCV以及常见报错处理。
806 2
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
|
机器学习/深度学习 计算机视觉
目标检测笔记(六):如何结合特定区域进行目标检测(基于OpenCV的人脸检测实例)
本文介绍了如何使用OpenCV进行特定区域的目标检测,包括人脸检测实例,展示了两种实现方法和相应的代码。
345 1
目标检测笔记(六):如何结合特定区域进行目标检测(基于OpenCV的人脸检测实例)
|
Ubuntu Linux C语言
Ubuntu安装笔记(二):ubuntu18.04编译安装opencv 3.4.0 opencv_contrib3.4.0
本文介绍了在Ubuntu 18.04系统上编译安装OpenCV 3.4.0及其扩展包opencv_contrib 3.4.0的详细步骤,包括下载源码、安装依赖、配置CMake和编译安装,以及常见问题的解决方法。
1206 1
Ubuntu安装笔记(二):ubuntu18.04编译安装opencv 3.4.0 opencv_contrib3.4.0
|
缓存 监控 计算机视觉
视频监控笔记(三):opencv结合ffmpeg获取rtsp摄像头相关信息
本文介绍了如何使用OpenCV结合FFmpeg获取RTSP摄像头信息,包括网络架构、视频监控系统组成、以及如何读取和显示网络摄像头视频流。
446 1
|
Serverless 计算机视觉
语义分割笔记(三):通过opencv对mask图片来画分割对象的外接椭圆
这篇文章介绍了如何使用OpenCV库通过mask图像绘制分割对象的外接椭圆。首先,需要加载mask图像,然后使用`cv2.findContours()`寻找轮廓,接着用`cv2.fitEllipse()`拟合外接椭圆,最后用`cv2.ellipse()`绘制椭圆。文章提供了详细的代码示例,展示了从读取图像到显示结果的完整过程。
258 0
语义分割笔记(三):通过opencv对mask图片来画分割对象的外接椭圆
|
JSON 数据格式 计算机视觉
Opencv实用笔记(一): 获取并绘制JSON标注文件目标区域(可单独保存目标小图)
本文介绍了如何使用OpenCV和Python根据JSON标注文件获取并绘制目标区域,同时可将裁剪的图像单独保存。通过示例代码,展示了如何读取图片路径、解析JSON标注、绘制标注框并保存裁剪图像的过程。此外,还提供了相关的博客链接,供读者进一步学习。
328 0
|
计算机视觉
[笔记]OpenCV+FFmpeg+Qt实现视频编辑器之OpenCV视频lO接口
[笔记]OpenCV+FFmpeg+Qt实现视频编辑器之OpenCV视频lO接口
408 0