使用 matlab 数字图像处理(九)—— 去卷积(deconvolution,逆滤波复原)
2016-04-17 19:15
513 查看
在没有噪声的情况下,频域退化模型可由下式给出:
G(u,v)=H(u,v)F(u,v)
G(u,v) :退化图像;
H(u,v) :退化函数;
F(u,v):原始图像。
则原始图像可通过退化图像和退化函数得到:
F(u,v)=G(u,v)H(u,v)
也即,如果已知退化图像和退化传递函数的频域表示就可以求得原始图像的频域表达式,随后取傅里叶逆变换即可得到原始图像:
f(x,y)=F−1[F(u,v)]=F−1[G(u,v)H(u,v)]
这就是所谓的去卷积(deconvolution),或叫逆滤波法。在有噪声的情况下:
G(u,v)=H(u,v)F(u,v)+N(u,v)
所以:
F(u,v)=G(u,v)H(u,v)−N(u,v)H(u,v)
然而退化过程的传递函数(一般为系统特性)是不可知的,且噪声项也无法精确得到。且上式中,H(u,v) 充当分母,在很多情况下传递函数的值为 0 或接近 0,此时得到的结果往往是极度不准确的。一种解决方法是,仅对半径在一定范围内的傅里叶系数进行运算,由于通常低频系数值较大,高频系数接近于0,这种方法能大大减少遇到 0 的概率。
(2)去卷积函数的实现:
G(u,v)=H(u,v)F(u,v)
G(u,v) :退化图像;
H(u,v) :退化函数;
F(u,v):原始图像。
则原始图像可通过退化图像和退化函数得到:
F(u,v)=G(u,v)H(u,v)
也即,如果已知退化图像和退化传递函数的频域表示就可以求得原始图像的频域表达式,随后取傅里叶逆变换即可得到原始图像:
f(x,y)=F−1[F(u,v)]=F−1[G(u,v)H(u,v)]
这就是所谓的去卷积(deconvolution),或叫逆滤波法。在有噪声的情况下:
G(u,v)=H(u,v)F(u,v)+N(u,v)
所以:
F(u,v)=G(u,v)H(u,v)−N(u,v)H(u,v)
然而退化过程的传递函数(一般为系统特性)是不可知的,且噪声项也无法精确得到。且上式中,H(u,v) 充当分母,在很多情况下传递函数的值为 0 或接近 0,此时得到的结果往往是极度不准确的。一种解决方法是,仅对半径在一定范围内的傅里叶系数进行运算,由于通常低频系数值较大,高频系数接近于0,这种方法能大大减少遇到 0 的概率。
仿真测试
(1)原始图像退化clear all; close all; clc I = imread('pout.tif'); f = im2double(I); subplot(1, 3, 1), imshow(f), title('原始图像') F = fftshift(fft2(f)); [M, N] = size(F); [u, v] = meshgrid(1:N, 1:M); k = 0.0025; H = exp(-k*((v-M/2).^2+(u-N/2).^2).^(5/6)); G = F.*H; g = ifft2(ifftshift(G)); g = uint8(abs(g)*255); subplot(1, 3, 2), imshow(g), title('退化图像') I = deconv(g, H, 128); % 可尝试不同的半径,128、108、78、48 subplot(1, 3, 3), imshow(I), title('复原图像')
(2)去卷积函数的实现:
function I_new = deconv(I, H, thresh) if size(I, 3) == 3, I = rgb2gray(I); end I = im2double(I); G = fftshift(fft2(I)); [M, N] = size(G); F = G; [x, y] = meshgrid(1:N, 1:M); if thresh > M/2, F = G./(H+eps); else idx = (x-N/2).^2 + (y-M/2).^2 < thresh^2; F(idx) = G(idx)./(H(idx)+eps); end I_new = ifft2(ifftshift(F)); I_new = uint8(abs(I_new)*255);
相关文章推荐
- Matlab函数重载_变参数个数
- Differences between Octave and MATLAB
- Matlab隐函数求导作图
- 【机器学习】Matlab中实现QQ-plot的一个好工具gqqplot
- 【matlab】:matlab实现对一个图片进行平移
- 使用 matlab 数字图像处理(八)—— 画圆
- 【matlab】:matlab如何实现计算三个点组成的角的角度值
- 基于MATLAB的QPSK通信系统
- 機器學習基石(Machine Learning Foundations) 机器学习基石 作业四 Q13-20 MATLAB实现
- 使用 matlab 数字图像处理(七)—— 频率域处理
- 用matlab实现感知机学习算法,训练分类器并解决井字游戏
- 使用 matlab 数字图像处理(六)—— 空域滤波
- 使用 matlab 数字图像处理(五)—— 双线性插值(Bilinear Interpolation)
- 使用 matlab 数字图像处理(三)—— 实现图像的旋转(不使用 imrotate)
- C# matlab混合编程
- 使用 matlab 数字图像处理(二)—— 直方图均衡化(极简实现)
- Matlab Codes and Datasets for Feature Learning
- matlab相关函数
- 使用 matlab 数字图像处理(一)—— 归一化直方图
- matlab 可视化 —— 常用绘图函数