使用MATLAB进行图像去模糊

ext*_*ion 4 matlab image-processing

我有两个图像,一个是降级的,一个是原始图像的一部分.我需要使用第二个图像来增强第一个图像,我需要在频域中执行此操作.我从降级图像中剪切了相同的区域,进行了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)))
Run Code Online (Sandbox Code Playgroud)

我现在有两个问题:

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

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

在此输入图像描述

小智 5

我可以推荐几种方法:

  1. 算术平均滤波器:

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

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

    f = (m*n) ./ imfilter(1 ./ (g + eps), ones(m, n), 'replicate');
    
    Run Code Online (Sandbox Code Playgroud)

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