OpenCV笔记20 频率域滤波
作者:互联网
一、概述
图像的傅里叶变换及其两个重要的度量:幅度谱和相位谱。了解两个重要的概念:低频和高频。低频指的是图 的傅里叶变换 “ 中心位置 ” 附近的区域。注意,如无特殊说明,后面所提到的图像的傅里叶变换都是中心化后的。高频随着到“ 中心位置 ” 距离的增加而增加,即傅里叶变换中心位置的外围区域,这里的“ 中心位置 ” 指的是傅里叶变换所对应的幅度谱最大值的位置。 频率域滤波器在程序或者数学运算中的呈现可以理解为一个矩阵,该矩阵的宽、高和图像的傅里叶变换的宽、高是相同的,下面所涉及的常用的低通、高通、带通、带阻 等滤波的关键步骤,就是通过一定的准则构造该矩阵的。二、步骤
步骤如下:下面通过一个简单的例子来详细解释频率域滤波的整个步骤。 第一步:输入图像矩阵 I 。假设为: 第二步:图像矩阵的每一个像素值乘以 (-1)r+c 得到矩阵 I′ , I′ =I.* ( -1 ) r+c ,其 中 r 和 c 代表当前像素值在矩阵中的位置索引。 第三步:因为图像矩阵的宽和高均为 7 ,为了利用傅里叶变换的快速算法,对 I′ 补 0 ,使用命令getOptimalDFTSize ( 7 )得到一个不小于 7 且可以分解为 2p ×3q ×5r 的最小整数,计算结果为8 。所以在矩阵 I′ 的右侧和下侧各补一行 0 ,记为 f :
第四步:利用傅里叶变换的快速算法得到复数矩阵F。
OpenCV是将复数矩阵按照双通道存储的,即第一通道存储的是复数矩阵的实部,第二通道存储的是复数矩阵的虚部。
第五步:构建频率域滤波器 Filter 。频率域滤波器本质上是一个和第四步得到的快速傅里叶变换矩阵F 具有相同行数、列数的复数矩阵,一般情况下为实数矩阵,这里假设是 一个全是1的矩阵:
本章提到的频率域滤波,如低通滤波、高通滤波、自定义滤波等,其关键步骤就是 通过一定的标准构造该矩阵以完成图像在频率域上的滤波。 第六步:将第四步得到的快速傅里叶变换矩阵 F 和第五步得到的频率域滤波器 Filter 的对应位置相乘(矩阵的点乘)。当然,如果滤波器是一个实数矩阵,那么在代码实现 中,将傅里叶变换的实部和虚部分别与频率域滤波器进行点乘即可,即Ffilter =F.*Filter,因为这里构造的滤波器是一个全是1 的矩阵,所以 F filter =F 。 第七步:对第六步得到的点乘矩阵 Ffilter 进行傅里叶逆变换,得到复数矩阵 F′ 。 第八步: 取复数矩阵F′的实部 。 第九步:与第二步类似,将第八步得到的矩阵乘以( -1 ) r+c 。 第十步:因为在快速傅里叶变换的步骤中进行了补 0 操作,所以第九步得到的实部矩 阵的尺寸有可能比原图大,所以要进行裁剪,取该实部矩阵的左上角,尺寸和原图相同。裁剪得到的结果,即为频率域滤波的结果。在该示例中,因为滤波器是一个全是1 的 矩阵,相当于对原图没有做任何处理,即最后滤波的结果和原图是一样的。 频率域滤波算法均是按照上述十个步骤完成的,接下来详细介绍常用滤波器的构建 方法、代码实现及其效果。
三、低通滤波
针对图像的傅里叶变换,低频信息表示图像中灰度值缓慢变化的区域;而高频信息则正好相反,表示灰度值变化迅速的部分,如边缘。低通滤波,顾名思义,保留傅里叶变换的低频信息;或者削弱傅里叶变换的高频信息;而高通滤波则正好相反,保留傅里叶变换的高频信息,移除或者削弱傅里叶变换的低频信息。 三种常用的低通滤波器: H、 W 分别代表图像快速傅里叶变换的高、宽, 傅里叶谱的最大值(中心点)的位置在maxR,maxC , radius 代表截断频率, D ( r , c )代表到中心位置的距离 1、理想低通滤波:ilpFilter=[ilpFilter(r,c)]H*w,2、巴特沃斯低通滤波器
第二种是巴特沃斯低通滤波器,记 blpFilter=[blpFilter ( r , c ) ]H×W3、高斯低通滤波器
记glpFilter=[glpFilter(r,c)]H×W;
作用:
滤波器越靠近中心点位置的值越接近于1,越远离中心位置的值就越小于1,与傅里叶变换相乘后,相当于保留了低频信息,消弱或者移除了高频信息四、低通滤波的代码实现
标签:滤波器,20,变换,矩阵,滤波,OpenCV,傅里叶,通滤波 来源: https://blog.csdn.net/weixin_39354845/article/details/122804905