使用反滤波来消除图像的模糊

138视图(过去30天)
sid101
sid101 8月5日
评论道: 图像分析员 2020年11月12日
我正在尝试使用反向滤波对图像进行去模糊,该图像使用sigma=15的25x25高斯模糊函数进行模糊。我正在从.mat文件中提取模糊图像,并正确显示。
接下来我定义了高斯滤波器,然后计算滤波器的频率响应,为了去模糊图像,我将模糊图像除以滤波器的频率响应,然后进行ifft。
模糊的图像在图1中正确显示,但应该显示去模糊图像的图2显示全部为紫色。我试图让我的代码尽可能的简单和最小。
我哪里做错了?我将感激任何提示或意见
图像=加载(“project_images.mat”);%加载包含图像的mat文件
m_blur = images.mandrill_blurred;%提取第一幅图像
显示亮度图像(m_blur);%显示模糊图像
h = fspecial (“高斯”,[25 25],15);% 25x25高斯模糊函数,sigma = 15
高频= fft2 (h,大小(m_blur, 1),大小(m_blur 2));
m_deblur =实际(ifft2 (m_blur)。/高频);%反滤波器
图(2)
imagesc(m_deblur)显示去模糊的图像
2的评论
sid101
sid101 8月5日
未上载project_images.mat,因为它是一个大文件。
我上传了模糊图像的mat文件

登录评论。

公认的答案

里克
里克 8月5日
通过一些数据探索,您的图像中有一个异常值:
图(3)中,clf (3)
直方图(m_deblur)
set(gca,“YScale”“日志”
轴([-10 140 0.1 max(ylim)])
一旦您将其替换为0,自动缩放应该再次按照预期工作。在下面的代码中,我进一步设置了 caxis 手动评估感觉正确的东西。
图(2)
imagesc(m_deblur)显示去模糊的图像
caxis ([-0.15 - 0.15])
总之,这张图片还没有准备好。
这样做的原因是你还没有把模糊图像放到傅里叶域中,所以除法没有多大意义。
图像=加载(“mandrill_模糊。mat”);%加载包含图像的mat文件
m_blur = images.mandrill_blurred;%提取第一幅图像
显示亮度图像(m_blur);%显示模糊图像
h = fspecial (“高斯”,[25 25],15);% 25x25高斯模糊函数,sigma = 15
高频= fft2 (h,大小(m_blur, 1),大小(m_blur 2));
m_deblur =实际(ifft2 (fft2 (m_blur)。/高频));%反滤波器
% ^^^^^ ^^
%你忘了这个
图(2)
imagesc(m_deblur)显示去模糊的图像

答案(1)

图像分析员
图像分析员 8月5日
你必须在傅里叶空间中做除法。在使用ifft2()将图像转换回空间域之后,您将在空间域中执行此操作。
m_deblur =实际(ifft2 (m_blur)。/高频);
如果m_blur是频谱,那么ifft2(m_blur)就是空间域图像。hf是h的频谱,所以在上面这条线中你将一个空间域阵列除以一个频域阵列。这说不通啊。你需要这样做(根据需要调整名称):
freqImage = fft2 (spaceDomainImage);
freqFilter = fft2 (spaceDomainFilter);
inverseFilteredImage = freqImage ./ freqFilter;%这仍然是在频域中。
spatialFilteredImage = ifft2 (inverseFilteredImage);%将其转换回空间域。
3评论
图像分析员
图像分析员 2020年11月12日
你不可能通过反滤镜将极度模糊的图像恢复到接近原始图像的状态。

登录评论。

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始打猎吧!