使用MATLAB进行图像去模糊

时间:2012-11-16 00:21:37

标签: matlab image-processing

我有两张图片,一张是降级的,一张是原始图片的一部分。我需要使用第二个图像来增强第一个图像,我需要在frequency domain中执行此操作。我从降级图像中剪切了相同的区域,进行了FFT,并尝试计算传递函数,但是当我将该函数应用于图像时,结果非常糟糕。

所以我尝试h=fspecial('motion',9,45);作为我的传递函数,然后使用下面给出的代码重建图像。

im = imread('home_degraded.png');
im = rgb2gray(im);
h = fspecial('motion',9,45);
H = zeros(519,311);
H(1:7,1:7) = h;
Hf = fft2(H);
d = 0.02;
Hf(find(abs(Hf)<d))=1;
I = ifft2(fft2(im)./Hf);
imshow(mat2gray(abs(I)))

我现在有两个问题:

  1. 如何使用小矩形生成传递函数(我的意思是不使用h=fspecial('motion',9,45);)?

  2. 我可以使用哪些方法消除增强图像中的噪点?

  3. Enter image description here

2 个答案:

答案 0 :(得分:5)

我可以推荐几种方法:

  1. 算术平均滤波器:

    f = imfilter(g, fspecial('average', [m n]))
    
  2. 几何平均滤波器

    f = exp(imfilter(log(g), ones(m, n), 'replicate')) .^ (1/(m*n))
    
  3. 谐波均值滤波器

    f = (m*n) ./ imfilter(1 ./ (g + eps), ones(m, n), 'replicate');
    

    其中n和m是掩码的大小(例如,您可以设置m = 3 n = 3

答案 1 :(得分:0)

基本上你想做的事情有两个步骤(至少):

  1. 使用带有方块的图像补丁估算PSF(模糊内核)。
  2. 使用估计的内核对模糊图像进行反卷积
  3. 如果你想“猜测”步骤1的PSF,那很好,但最好是计算它。

    对于第2步,您必须首先使用edgetaper,这会消除图像中的振铃效果,您称之为噪音。

    您可以按照以下语法使用函数deconvlucy来使用非盲解卷积(步骤2):

    J = deconvlucy(I,PSF)
    

    这种反卷积程序会增加一些噪音,特别是如果你的PSF不是100%准确的,但如果你允许更多的迭代(交易细节,NFL)你可以使它更顺畅。

    第一步,如果你不关心你有“尖锐”方块的事实,你可以使用盲去卷积 deconvblind 并得到一些PSF的估计。 如果你想正确地使用并使用尖锐的补丁,那么你可以在任何涉及估算PSF的优化方案中将它用作数据项目标。