2012-11-16 173 views
3

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

所以我试着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. 我可以使用什么方法从增强图像中去除噪点?

Enter image description here

+0

我是否正确地认为黑色方块是在模糊之前添加的“基本事实”,因此您可以从清晰图像中获得可靠的PSF?还有什么其他假设在这里发挥作用?你运动模糊了图像,使其模糊,或只是使用像平均过滤器? – Bill

+0

@Bill前两张图片给我(模糊一个和真正的正方形),我需要增强图像。问题是我没有能够从广场生成传递函数(真实和模糊的一个)所以我做了一个假设并且定义了h = fspecial('motion',9,45);成为我的psf,工作挺好,因为右侧的增强图像具有完美的正方形,但它有很多噪音。我怎样才能摆脱那个或如何使用小方块来生成传递函数。 – extirpation

回答

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 = 3n = 3

0

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

  1. 通过使用带有方角的图像补丁来估计PSF(模糊内核)在其中。
  2. 使用估计内核做卷积到您的模糊图像

如果你想“猜测”的步骤1中的PSF,这很好,但它更好地计算。

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

在您使用功能deconvlucy按照以下语法使用非盲解(步骤2):

J = deconvlucy(I,PSF) 

这个反卷积过程增加了一些噪音,特别是如果你的PSF是不是100%准确,但你如果你允许更多的迭代(细节交易,NFL)可以使它更平滑。第一步,如果你不关心你有“锐利”方块的事实,那么你可以使用盲解卷积去卷积并得到PSF的一些估计值。 如果您想正确使用并使用锐利的补丁,那么您可以在任何涉及估计PSF的优化方案中将其用作数据项目标。