计算2个图像之间的模糊内核

时间:2013-12-10 10:57:05

标签: matlab image-processing signal-processing convolution cross-correlation

与标准(且更具挑战性)去模糊和超分辨率场景不同,我可以访问原始(清晰)图像G和模糊版本B。我只是在寻找模糊内核h。因为B是使用真实相机拍摄的,因此关系是:

B=G*h+N(其中*表示卷积,N是一些加性噪音)

当然,这是一个过度约束的问题,因为hGB相比尺寸较小,因此图像对中的每几个像素都会生成一个等式h的条目。

但实际实现这个的最简单方法是什么?到目前为止我的想法:

  • 移至频域并进行划分(如this answer所示)。但由于噪音正确,这在数值上会不可避免地不稳定吗?
  • 互相关 - 我只找到了1-D信号的例子,无法弄清楚如何在2D情况下使用图像。
  • 使用一些优化过程,仔细构建一个过度约束的线性系统G'h'=B',寻找h',它是内核h条目的矢量版本。但这非常繁琐,矩阵G'和向量B'的大小必然很大。

从C ++到MATLAB的任何编程语言的具体例子都非常有用。

1 个答案:

答案 0 :(得分:2)

使用@ Shai的相关建议,我现在可以给出详细的答案。

我建议的选项2和3实际上是相同的,显然是正确的方法。这也是由@Shai链接的建议论文的E步骤所做的。提出过度约束的问题实际上非常简单。

为了正确地构建这些方程式,我们使用以下事实:内核大小的每个块的点积以G中的某个像素为中心,并且h的180度旋转版本应该等于相应的B中的像素。这直接源于BG通过卷积相关的事实,因此G中的块与B中的像素通过互相关(因此180) -degree rotation)。

MATLAB代码现在变为:

%inputs: B,G - gray level blurred and sharp images respectively (double)
%        szKer - 2 element vector specifying the size of the required kernel
%outputs: mKer - the recovered kernel, 
%         imBsynth - the sharp image convolved with the recovered kernel
%
%example usage:  mKer = calcKer(B, G, [11 11]);

function [mKer, imBsynth] = calcKer(B, G, szKer)

  %get the "valid" pixels from B (i.e. those that do not depend 
  %on zero-padding or a circular assumption
  imBvalid = B(ceil(szKer(1)/2):end-floor(szKer(1)/2), ...
      ceil(szKer(2)/2):end-floor(szKer(2)/2));

  %get a matrix where each row corresponds to a block from G 
  %the size of the kernel
  mGconv = im2col(G, szKer, 'sliding')';

  %solve the over-constrained system using MATLAB's backslash
  %to get a vector version of the cross-correlation kernel
  vXcorrKer = mGconv \ imBvalid(:);

  %reshape and rotate 180 degrees to get the convolution kernel
  mKer = rot90(reshape(vXcorrKer, szKer), 2);

  if (nargout > 1)
      %if there is indeed a convolution relationship between B and G
      %the following will result in an image similar to B
      imBsynth = conv2(G, mKer, 'valid');
  end

end

我还发现,对于实际场景,可能需要对解决方案进行一些限制。示例是强制内核为正,平滑或对称。合并这些的确切方法超出了本问题的范围,但在求解vXcorrKer时通常会以线性约束或正则化元素的形式出现。