导出图像卷积核的逆滤波器

Roy*_*oyi 4 signal-processing image-processing filter

有没有人知道如何计算二维滤波器的逆?

假设我有一个3x3过滤器:
0 1 0
1 1 1
0 1 0
我想发现它是反向的.使用DFT很容易.但是,我想说我想通过卷积来做到这一点.现在,这就是问题,Matlab象征性不是我的专长.假设存在3X3反向滤波器,则意味着两者的卷积将导致:
0 0 0
0 1 0
0 0 0
问题是为此创建正确的方程组并求解它.使用符号进行操作很容易思考,但我无法做到.

有任何想法吗?谢谢.

PS我不确定这个有反向滤波器,因为它的DTFT中有零.

此外,有人应该像MathOverflow一样在这个论坛中允许Latex.

Ste*_*joa 5

设h [n]为1D滤波器的有限脉冲响应.这意味着它的逆滤波器意味着什么?逆可能不是FIR.

证明:对于所有欧米茄,令H(ω)G(ω)= 1,其中H是h [n]的DTFT,G是g [n]的DTFT.如果h [n]是FIR,那么g [n]必须是IIR.

当然,有一些方法可以用FIR滤波器近似反向IIR滤波器.基本方法是自适应滤波,例如,最小均方(LMS)算法.或者只是截断IIR滤波器.不过,你仍然需要担心稳定性.

出于实际目的,您的具体问题可能没有理想的解决方案.特别是,例如,如果这是在图像处理中,并且您尝试使用FIR锐化滤波器反转FIR模糊滤波器.除非您的锐化滤镜确实非常大,否则最终图像看起来不会那么好.

编辑:令y [n] = b0 x [n-0] + b1 x [n-1] + ... + bN x [nN].让这个等式表征前向系统,其中y是输出,x是输入.根据定义,当输入是脉冲时,脉冲响应是输出:h [n] = b0 d [n-0] + b1 d [n-1] + ... + bN d [nN].该脉冲响应具有有限长度N + 1.

现在,考虑逆系统,其中x是输出,y是输入.然后通过递推方程d [n] = b0 h [n] + b1 h [n-1] + ... + bN h [nN]来描述脉冲响应.等价地,b0 h [n] = d [n] - b1 h [n-1] - ... - bN h [nN].

不失一般性,假设b0和bN都是非零的.对于任何m,如果h [m]非零,则h [m + N]也非零.由于该系统具有反馈,因此其脉冲响应无限长.QED.

因果关系并不重要.延迟的倒数是提前,反之亦然.延迟或提前都不会改变脉冲响应的有限性.向左或向右移动无限脉冲响应; 它仍然是无限的.

编辑2:为了澄清,这个证明与我原来的"证据"无关.一个是频域,另一个是时域.


Roy*_*oyi 1

推导给定 2D 卷积核的逆核

这基本上是问题的概括 -推导图像卷积核的逆滤波器

问题表述

给定一个卷积核 $ f \in \mathbb{R}^{m \times n} $ 找到其逆核 $ g \in \mathbb{R}^{p \times q} $ 使得 $ f \ast g = h = δ$。

方案一

人们可以构建卷积算子的矩阵形式。
矩阵形式可以复制多种图像过滤模式(独家):

  • 边界条件(应用于填充图像并在有效模式下应用卷积)。
    • 零填充 用零填充图像。

    • 使用圆形/周期性延续图像。匹配频域卷积。
    • 复制
      复制边缘值(最近邻)。
      通常在现实世界中创建最少的伪影。

    • 沿边缘对称镜像图像。
  • 卷积形状
    • Full 输出大小为完整范围 - $ \left( m + p - 1 \right) \times \left( n + q - 1 \right) $。
    • 相同的
      输出尺寸与输入尺寸(“图像”)相同。
    • 有效
      输出大小是图像和内核完全重叠的大小。

使用图像过滤时,输出大小与输入大小匹配,因此矩阵形式是方阵,并且定义了逆矩阵。
使用卷积矩阵,矩阵可能不是方阵(除非选择“相同”),因此应导出伪逆矩阵。

人们应该注意到,虽然输入矩阵应该是稀疏的,但逆矩阵却不是。
此外,虽然卷积矩阵将具有特殊形式(托普利茨忽略边界条件),但其逆矩阵却不会。
因此,该解决方案比下一个解决方案更准确,但它也使用更高的自由度(该解决方案不一定是托普利茨形式)。

方案二

在此解决方案中,使用以下成本函数的最小化导出逆函数:

$$ \arg \min_{g} \frac{1}{2} {\left| f \ast g - h \right|}_{2}^{2} $$

导数由下式给出:

$$ \frac{\partial \frac{1}{2} {\left| f \ast g - h \right|}_{2}^{2} }{\partial g} = f \star \left( f \ast g - h \right) $$

其中 $ \star $ 是相关运算。

实际上,目标函数中的卷积是在full模式中完成的(MATLAB 习惯用法)。
在实践中是这样做的:

hObjFun     = @(mG) 0.5 * sum((conv2(mF, mG, 'full') - mH) .^ 2, 'all');
mObjFunGrad = conv2(conv2(mF, mG, 'full') - mH, mF(end:-1:1, end:-1:1), 'valid');
Run Code Online (Sandbox Code Playgroud)

其中代码翻转mF为 Correaltion 并使用有效(以矩阵形式,它是伴随/转置 -> 输出更小)。

优化问题是严格凸的,可以使用梯度下降轻松解决:

for ii = 1:numIteraions
    mObjFunGrad = conv2(conv2(mF, mG, 'full') - mH, mF(end:-1:1, end:-1:1), 'valid');
    mG          = mG - (stepSize * mObjFunGrad);
end
Run Code Online (Sandbox Code Playgroud)

完整代码可在我的StackExchnage Code StackOverflow Q2080835 GitHub 存储库中找到(查看StackOverflow\Q2080835文件夹)。