去卷积:用魔法打败魔法,让图像清晰

文章目录

图像的模糊有很多种可能性,包括了:镜头的缺陷、相机的抖动、场景的运动、后期的处理等等。针对图像模糊,我们可以通过去卷积的方式实现图像复原。其中,去卷积分为非盲去卷积和盲去卷积,本文主要介绍非盲去卷积。

问题描述

假设有一个理想镜头,用它所成的像为x, 而实际镜头的点扩散函数(PSF)为c, 实际镜头的成像是b,那么这三者之间的关系是一种典型的卷积关系:

那么一个很自然的想法就是,如果我们有实际镜头的成像,另外还知道了镜头的PSF,即我们知道了上式的b和c,是否可以得到更加理想的成像x呢?

去卷积

这似乎是很显然能够成立的。由于空域的卷积等效于频域的乘法,因此我们只需要在频域上做除法,就能很好的恢复出 X X X了,我们把这个过程称为去卷积:

X ∗ c = b X * c = b X∗c=b

注意:空域的卷积相当于频域的乘法

F ( X ) ⋅ F ( c ) = F ( b ) F(X) \cdot F(c) = F(b) F(X)⋅F(c)=F(b)

去卷积相当于在频域上做除法

F ( X est ) = F ( b ) ∖ F ( c ) F(X_{\text{est}}) = F(b) \setminus F(c) F(Xest)=F(b)∖F(c)

只需要对除法的结果做反傅里叶变换就可以得到去卷积的结果了

X est = F − 1 ( F ( b ) ∖ F ( c ) ) X_{\text{est}} = F^{-1} (F(b) \setminus F(c)) Xest=F−1(F(b)∖F(c))

实际成像系统有噪声,所以实际的成像公式是(其中n是指噪声)
X ∗ c + n = b X * c + n = b X∗c+n=b

也就是说b里面含有噪声,所以如果简单的用F(b)/F©, 就会放大系统中高频部分的的噪声,最后只会得到一幅全是噪声的图像。

维纳滤波

那么,有没有更好的方法呢?事实上,已知模糊的图像以及成像系统的PSF,恢复原始图像的过程称为非盲去卷积(Non-blind deconvolution)。这个领域有大量的研究成果。

其中最最经典的方法之一,莫过于1942年发表的维纳滤波(Wiener Filter),它把图像和噪声都看做是随机过程,并把去卷积的问题看作是一个最大似然问题去求解。最后的结果中,包含了一个关键的噪声相关的阻尼因子。

X est = F − 1 ( ∣ F ( c ) ∣ 2 ∣ F ( c ) ∣ 2 + K ⋅ F ( b ) F ( c ) ) X_{\text{est}} = F^{-1} \left( \frac{|F(c)|^2}{|F(c)|^2 + K} \cdot \frac{F(b)}{F(c)} \right) Xest=F−1(∣F(c)∣2+K∣F(c)∣2⋅F(c)F(b))

其中分母有一项是K,它是一个规定常数:
K = 1 / S N R ( ω ) K=1/SNR(\omega) K=1/SNR(ω)

因此,维纳滤波可以看成是修正后的去卷积,当噪声很低时,噪声相关的阻尼因子趋于1。
X est = F − 1 ( 噪声相关的阻尼因子 ⋅ F ( b ) F ( c ) ) X_{\text{est}} = F^{-1} \left(\text{噪声相关的阻尼因子}\cdot\frac{F(b)}{F(c)}\right) Xest=F−1(噪声相关的阻尼因子⋅F(c)F(b))

维纳滤波的核心思想是寻找一个频域滤波器 H ( ω ) H(\omega) H(ω),使得估计值 X ^ = H ( ω ) B \hat{X} = H(\omega)B X^=H(ω)B 与真实值 X X X 之间的均方误差最小,因此维纳滤波也叫最小均方误差滤波。

min ⁡ H E ∥ X − H ( ω ) B ∥ 2 \min_H E\left\\\|X - H(\\omega)B\\\|\^2\\right HminE∥X−H(ω)B∥2

使用维纳滤波去模糊

维纳滤波器在频域的表达式为:
H ( u , v ) = P ∗ ( u , v ) ∣ P ( u , v ) ∣ 2 + K H(u,v) = \frac{P^*(u,v)}{|P(u,v)|^2 + K} H(u,v)=∣P(u,v)∣2+KP∗(u,v)

其中:

  • P ( u , v ) P(u,v) P(u,v) 是点扩散函数(PSF)的傅里叶变换(光学传递函数,OTF)。

在频域内进行维纳滤波时,根据以上维纳滤波器公式,由点扩散函数计算得到维纳滤波器,再将滤波器乘以图像以达到去模糊的目的,最后将结果反变换到空域即可。

💡 NOTE : K = 0 K=0 K=0 时退化为逆滤波; K K K 增大时抑制噪声但会平滑细节。

MATLAB实现

matlab 复制代码
clc;
clear;
close all;

%% 给图像加模糊
img = imread('cameraman.tif');
% img = rgb2gray(img); 
img = im2double(img);
% img = imnoise(img, 'gaussian', 0, 0.1);% 添加噪声

psf = fspecial("gaussian", 7, 1);
blurred = imfilter(img, psf, 'circular');

%% 只有模糊,直接逆滤波
fft_img = fft2(blurred); % 傅里叶变换
fft_psf = fft2(psf, size(img, 1), size(img, 2));
deblurred = ifft2(fft_img./fft_psf);

figure;
subplot(1, 3, 1), imshow(img), title("原图");
subplot(1, 3, 2), imshow(blurred), title("模糊,未叠加噪声");
subplot(1, 3, 3), imshow(deblurred), title("直接逆滤波,对未叠加噪声时效果较好");

%% 添加噪声,维纳滤波、约束最小二乘方滤波
mean = 0; 
var = 0.0001;
noised = imnoise(blurred, 'gaussian', mean, var);% 添加噪声
fft_img = fft2(noised); % 对含噪声图像进行傅里叶变换

% 直接逆滤波
deblurredn=ifft2(fft_img./fft_psf);

% 维纳滤波
K = 0.01; % 噪声与信号功率比的估计值,可根据实际情况调整
WienerFilter = conj(fft_psf)./(abs(fft_psf).^2 + K);
deblurred_wiener = ifft2(fft_img.* WienerFilter);

figure,
subplot(2, 2, 1), imshow(img), title("原图");
subplot(2, 2, 2), imshow(noised), title("模糊,叠加了高斯噪声");
subplot(2, 2, 3), imshow(deblurredn),title("直接逆滤波,对噪声非常敏感")
subplot(2, 2, 4), imshow(deblurred_wiener), title("维纳滤波");

其他非盲去卷积的方法

约束最小二乘方滤波

除了维纳滤波,还有维纳滤波的改进版本------约束最小二乘方滤波。该方法旨在降低维纳滤波器对噪声的敏感度,以平滑测度的最优复原为基础,因此添加拉普拉斯核进行约束。

约束最小二乘方滤波器在频域的表达式为:
H ( u , v ) = P ∗ ( u , v ) ∣ P ( u , v ) ∣ 2 + K ⋅ L ( u , v ) H(u,v) = \frac{P^*(u,v)}{|P(u,v)|^2 + K\cdot{L(u,v)}} H(u,v)=∣P(u,v)∣2+K⋅L(u,v)P∗(u,v)

其中:

  • L ( u , v ) L(u,v) L(u,v) 是拉普拉斯核的傅里叶变换。

迭代法

Richardson-Lucy (RL) 反卷积算法是一种基于最大似然估计(Maximum Likelihood Estimation, MLE)的图像去卷积方法,常用于去模糊和图像增强。

该算法通过不断地更新图像估计值,来最小化模糊图像和恢复图像之间的误差,逐步消除模糊,最终接近真实的原始图像。每次迭代都会根据当前估计的图像来修正下次迭代的结果。

该算法最初由 Richardson 和 Lucy 在 1972 年提出,应用于天文学中的 X 射线成像。

相关推荐
kaixin_啊啊3 天前
Micam 多容器太吃资源?用 Go2RTC + EasyNVR 给小米摄像头换一套轻量本地录像方案
图像处理·人工智能·摄像头
PixelBai4 天前
SVG 文件如何打开、预览与压缩?前端图标优化的一条龙做法
图像处理
szxinmai主板定制专家4 天前
NXP LS1046A 硬件方案: LS1046A+FPGA 异构加速架构实践
大数据·图像处理·人工智能·嵌入式硬件·fpga开发
sali-tec4 天前
C# 基于OpenCv的视觉工作流-章108-区域筛选
图像处理·人工智能·opencv·算法·计算机视觉
岁月蹉跎的一杯酒5 天前
ISPDiffuser:用扩散模型学习 RAW→sRGB 映射
图像处理·isp
刘广睿5 天前
影栈实战:AI 生图放大不再糊,Hires.fix 与 ESRGAN 超分从 512 到 4K 封面
图像处理·人工智能·深度学习·aigc·效率工具
Zentceh6 天前
海洋牧场夜间监测:AI全彩夜视+水下成像集成方案
图像处理·人工智能·科技·计算机视觉·车载系统·无人机·智能家居
FLJwu7 天前
传感器与图像 ISP 实战 03:运动相机图像量产一致性|批次色差、白平衡漂移、整机标定与出厂图像质检方案|20 年源头工厂量产经验
图像处理·经验分享·数码相机·相机·isp
Evand J7 天前
【MATLAB例程|图像滤波降噪13】局部噪声方差自适应滤波(LNR)图像降噪与效果展示。附完整例程的下载链接
图像处理·计算机视觉·matlab·滤波·代码·降噪
Zentceh8 天前
0.001Lux是什么概念
图像处理·人工智能·科技·计算机视觉·车载系统·无人机·智能硬件