1、基础

卷积定理

折叠误差补零

当处理DFT时,图像及其变换是周期的。在周期接近函数非零部分的持续周期时,对周期函数进行卷积会引起相邻周期的串扰。

这种称为 折叠误差 的串扰可通过补零方法来避免。

假设函数 f(x,y) 和 h(x,y) 的大小分别为 A x B 和 C x D。通过对 f 和 g 补零,构造两个大小均为 P x Q 的扩展函数。

按如下方式进行选择可以避免折叠误差:

下面 paddedsize 的函数可以满足上面等式的 P 和 Q 的最小偶数值。

function PQ = paddedsize(AB, CD, PARAM)

if nargin == 1

PQ = 2*AB;

elseif nargin == 2 && -ischar(CD)

PQ = AB + CD - 1;

PQ = 2 * ceil(PQ / 2);

elseif nargin == 2

m = max(AB);

P = 2^nextpow2(2*m);

PQ = [P, P];

elseif (nargin == 3) && strcmp(PARAM, 'pwr2')

m = max([AB CD]);

P = 2^nextpow2(2*m);

PQ = [P, P];

else

error('Wrong number of inputs.')

end

示例

[f, revertcalss] = tofloat(f);

sig = 10;

PQ = paddedsize(size(f));

Fp = fft2(f, PQ(1), PQ(2));

Hp = lpfilter('gaussian', PQ(1), PQ(2), 2*sig); %滤波器大小是未填充时的两倍

Gp = Hp .* Fp;

gp = ifft2(Gp);

gpc = gp(1:size(f, 1), 1:size(f, 2));

gpc = revertcalss(gpc);

imshow(gp)

2、DFT 滤波的基本步骤

1、使用函数 tofloat 把输入图像转换为浮点图像:

[f, revertclass] = tofloat(f);

2、使用函数 paddedsize 获得填充参数:

PQ = paddedsize(size(f));

3、得到有填充图像的傅里叶变换:

F = fft2(f, PQ(1), PQ(2));

4、生成一个大小为 PQ(1) * PQ(2) 的滤波器函数。如果它是居中的,使用前要令 H = ifftshift(H)。

5、使用滤波器乘以该变换:

G = H .* F;

6、获得G的IFFT:

g = ifft2(G);

7、将左上部的矩形修剪为原始大小:

g = g(1:size(f, 1), 1:size(f, 2));

8、需要时,将滤波后的图像转换为输入图像的类:

g = revertclass(g);

用于频率域滤波的M函数

function g = dftfilt(f, H, classout)

[f, revertcalss] = tofloat(f);

F = fft2(f, size(H, 1), size(H, 2))

g = ifft2(H .* F);

g = g(1:size(f, 1), 1:size(f, 2));

if nargin == 2 || strcmp(classout, 'original')

g = revertcalss(g);

elseif strcmp(classout, 'fltpoint')

return

else

error('Undefined class fot the output image.')

end

3、从空间滤波器获得频域滤波器

通常当滤波器较小时,在计算上空间滤波要比频率域滤波更有效率。

当滤波器大约有 32 个或更多元素时,使用 FFT 算法的滤波处理要比空间实现快。

函数 freqz2 可以将空间滤波器转换为频率域滤波器

H = freqz2(h, R, C)

示例

h = fspecial('sobel')'

freqz2(h)

% 频率域滤波器

PQ = paddedsize(size(f));

H = freqz2(h, PQ(1), PQ(2));

H1 = ifftshift(H)

函数 dftfilt 用于处理频率域滤波

gf = dftfilt(f, H1);

4、在频率域中直接生成滤波器

创建用于实现频率域滤波器的网格数组

function [U, V] = dftuv(M, N)

u = single(0:(M - 1));

v = single(0:(N - 1));

idx = find(u > M/2);

u(idx) = u(idx) - M;

idy = find(v > N/2);

v(idy) = v(idy) - N;

[V, U] = meshgrid(v, u);

% ----------------------- %

[U, V] = dftuv(8, 5);

DSQ = hypot(U, V)

低通(平滑)频率域滤波器

理想低通滤波器(ILPF)

巴特沃斯低通滤波器(BLPF)

高斯低通滤波器

示例,对图像 f 应用一个高斯低通滤波器,其中 D0 为所填充图像宽度的 5%。

[f, revertclass] = tofloat(f);

PQ = paddedsize(size(f));

[U, V] = dftuv(PQ(1), PQ(2));

D = hypot(U, V);

D0 = 0.05 * PQ(2);

F = fft2(f, PQ(1), PQ(2));

H = exp(-(D .^ 2) / (2 * (D0^2)));

g = dftfilt(f, H);

g = revertclass(g)

低通滤波器整合函数

function H = lpfilter(type, M, N, D0, n)

[U, V] = dftuv(M, N);

D = hypot(U, V);

switch type

case 'ideal'

H = single(D <= D0);

case 'btw'

if nargin == 4

n = 1;

end

H = 1 ./ (1 + (D./D0) .^ (2*n));

case 'gaussian'

H = exp(-(D.^2) ./ (2*(D0^2)));

otherwise

error('Unknown filter type.')

end

5、绘制线框图和表面图

绘制二维函数的最简单方法是使用函数 mesh

mesh(H(1:k:end, 1:k:end))

默认绘出彩色网格图命令为

colormap([0 0 0])

关闭网格和坐标轴命令

grid off

axis off

观察点由函数 view 控制

view(az, el) %az,el 代表方位角和仰角

view(3) %默认观察点

示例,绘制一个高斯低通滤波器

H = fftshift(test2('gaussian', 500, 500, 50));

mesh(double(H(1:10:500, 1:10:500)))

axis tight

colormap([0 0 0])

untitled.jpg

表面图

surf(H)

6、高通(锐化)频率域滤波器

理想高通滤波器(IHPF)

巴特沃斯高通滤波器(BHPF)

高斯高通滤波器

基于 lpfilter 构建一个高通滤波器函数

function H = hpfilter(type, M, N, D0, n)

if nargin == 4

n = 1;

end

H1p = lpfilter(type, M, N, D0, n);

H = 1 - H1p;

% ---------------------------%

H = fftshift(hpfilter('ideal', 500, 500, 50));

高频强调滤波

高通滤波器偏离了直流项,将图像的平均值降低为0.补偿方法之一是给高通滤波器加上一个偏移量。把偏移量与将滤波器乘以一个大于1的常数结合起来的方法就称为 高频强调滤波。

示例,联合使用高频强调滤波和直方图均衡

PQ = paddedsize(size(f));

D0 = 0.05 * PQ(1);

HBW = hpfilter('btw', PQ(1), PQ(2), D0, 2);

H = 0.5 + 2*HBW;

gbw = dftfilt(f, HBW, 'fltpoint');

gbw = gscale(gbw);

ghf = dftfilt(f, H, 'fltpoint');

ghf = gscale(ghf);

ghe = histeq(ghf, 256);

频率域滤波matlab函数,6、频率域滤波相关推荐

  1. matlab 对图像进行低通滤波,matlab图像处理实现低通滤波

    matlab图像处理实现低通滤波 matlab图像处理实现低通滤波 clc; clear all; img=imread('lena.jpg'); img_noise = imnoise(img, ' ...

  2. 频率域滤波matlab函数,频率域滤波(2) - osc_t0xmr011的个人空间 - OSCHINA - 中文开源技术交流社区...

    一.频率域滤波的基本步骤: 1)使用函数tofloat把输入图像转换为浮点图像(im2double函数也可以) [f,revertclass] = tofloat(f) 2)使用函数paddedsiz ...

  3. 计算机图像进行滤波的函数,数字图像处理图像滤波.ppt

    数字图像处理图像滤波 图像滤波 图像处理中所用到的图像往往含有噪声,需要用图像滤波的方法去除噪声. 内容框架 像素基础知识介绍 算术和逻辑运算 直方图 直方图均衡算法,用于图像锐化. 图像增强基本方法 ...

  4. 引导滤波matlab代码实现,引导图滤波(Guided Image Filtering)原理以及OpenCV实现

    引导图滤波器是一种自适应权重滤波器,能够在平滑图像的同时起到保持边界的作用,具体公式推导请查阅原文献<Guided Image Filtering>以及matlab源码:http://ka ...

  5. (图像处理之滤波)OpenCV实现频率域的低通高斯滤波(C++)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接: https://blog.csdn.net/weixin_40647819/art ...

  6. matlab绘制系统函数频率特性,实验七用MATLAB进行系统频率特性曲线绘制

    实验七用MATLAB进行系统频率特性曲线绘制 自动控制原理 课程验证性实验报告 实验名称 用MATLAB进行系统频率特性曲线绘制 实验时间 2013年 05月30日 学生姓名 实验地点 070312 ...

  7. 基于matlab的离散系统变换域分析实验,数字信号处理实验 离散时间系统的变换域分析.docx...

    实验二 离散时间系统的变换域分析一 实验目的:线性时不变(LTI)离散时间系统的特性完全可以用其冲击响应序列h[n]来表示.则前面给出的离散时间信号的变换分析手段也可以用于离散时间系统的分析中.在LT ...

  8. 第5章 Python 数字图像处理(DIP) - 图像复原与重建12 - 空间滤波 - 使用频率域滤波降低周期噪声 - 陷波滤波、最优陷波滤波

    标题 使用频率域滤波降低周期噪声 陷波滤波深入介绍 最优陷波滤波 本章陷波滤波器有部分得出的结果不佳,如果有更好的解决方案,请赐教,不胜感激. 使用频率域滤波降低周期噪声 陷波滤波深入介绍 零相移滤波 ...

  9. 【红队APT】反朔源隐藏C2项目CDN域前置云函数数据中转DNS转发

    文章目录 域前置-CDN隐藏C2真实IP 防止被溯源 什么是域前置 条件 原理 ==完整复现== 域前置溯源 DNS协议-域名记录解析 云函数-腾讯云操作 云函数如何溯源 端口转发-Iptables ...

最新文章

  1. 高通---GPUCPU频率和工作模式的获取设置
  2. 什么是HADOOP、产生背景、在大数据、云计算中的位置和关系、国内外HADOOP应用案例介绍、就业方向、生态圈以及各组成部分的简介(学习资料中的文档材料)
  3. 【wordpress基础教程一】:wordpress简介和安装
  4. 下班搜包被诉 苹果支付近3000万美元与加州门店员工和解
  5. access计算机二级改工号,Access新手来看:如何更改表/窗体/报表...得名字
  6. mysql 数据库中根据当前系统时间,取前后几秒、几分钟、几小时、几天
  7. Java经典编程题50道之二十四
  8. java集合的相互转化(map,set,list,array)
  9. php实现手机号注册登录,thinkphp 手机号和用户名同时登录
  10. mysql课程表设计_MySQL如何设计课程表的数据库
  11. kindle 耗电飞速,电池坏了?你可能给kindle“吃了有毒的食物”
  12. python毕业设计总结范文大全_毕业设计心得体会范文3篇
  13. php判断是否夏令时,关于php:时区和夏令时问题
  14. 微信小程序支持分享到朋友圈了
  15. 怎么提高图片分辨率?如何改变图片的分辨率?
  16. 中国连锁药店行业发展机遇与竞争格局分析报告2022-2028年版
  17. Linux weblogic日志查看tail -f nohup.out
  18. 英语学习单词篇(12)
  19. 【鸿蒙 HarmonyOS】HarmonyOS 开发环境搭建 ( 下载 | 安装 | 启动 | 支持的设备与开发语言 )
  20. 大对象数据的访问控制 (2)

热门文章

  1. 找不到凭据分配oracle修正,远程连接身份验证错误,又找不到加密Oracle修正
  2. 工作狂小废物的桌面[51CTO博客接龙桌面秀]
  3. vs2015c语言函数,c++中strcpy函数在VS2015无法使用的问题
  4. Spring个人学习笔记
  5. spring boot 代理(not eligible for auto-proxying)
  6. 终极音频增强软件 SRS Audio Sandbox 特别版
  7. 模块例化是怎么进行的?——FPGA学习笔记(四)
  8. matlab学习日志20210812
  9. Overcoming Language Priors in VQA via Decomposed Linguistic Representations阅读笔记
  10. python基础实例