计算原始图像和模糊图像之间的点扩散函数

计算科学 图像处理 逆问题 计算机视觉
2021-12-11 04:38:29

拍摄一张带有一些字符的图像(下图,hjFu3)。让我们对其应用过滤器以获得第二个图像,其中文本不可见。fhg

有没有办法计算我们应用目的是应该应用此过滤器来解码使用相同过滤器模糊的新模糊图像。hh


我知道我应该使用反卷积算法。关键是我不知道 PSF 函数,所以盲算法可以解决。但是我使用matlab的典型盲反卷积算法没有任何成功。

我想知道我们是否可以计算 psf 函数,因为我们有原始图像和最终图像。


问题数据:

f=原始图像 f

PSF?

g=图像模糊 g

2个回答

我们基于系统是线性空间不变系统的假设构造算子。模糊图像表示为,输入表示为bx

由于卷积是可交换的,我们可以写成

b=hx=xh

所以我们可以使用矩阵有两个相等的表示,对应于涉及的积分运算,即HXxh

b=Hx=Xh

因为我们确切地知道,所以我们想知道因此,我们的任务是根据我们对的知识和成像系统的属性来构建算子bxhXx

在这里,我使用旧代码来构建矩阵。如果我忘记了一些细节,请原谅我,但是书中很好地解释了处理具有某些结构的卷积矩阵的细节:

去模糊图像:矩阵、光谱和过滤

作者:Per Christian Hansen、James G. Nagy 和 Dianne P. O'Leary

无论哪种方式,我们构造矩阵X基于以下代码。我认为这对应于周期性边界条件,但要持保留态度。

X = toeplitz(x,circshift(flipud(x),1));

然后我们求解最优h通过例如目标函数的梯度下降:

||Xhb||22

因此,我们知道这种情况下的滤波器系数。相反,基于计算的系数h我们可以构造矩阵H通过与上述代码相同的公式。然后,给定b和运营商H,我们想计算最优的xest通过求解目标函数:

||Hxestb||22

由于原来x有锋利的边缘,使用正常的梯度下降来求解最优xest会比较顺利。由于我们知道图像的大部分是零,我们为每次迭代选择一个额外的投影步骤到缩放的标准单纯形上(即非负迭代软阈值)。结果如下所示。

在此处输入图像描述

注意:绘制滤波器系数h作为一个 PSF,我们需要通过(s 是图像的大小)稍微改变它们:

hs = reshape(circshift(h(:),(numel(h)+s(1))/2),s)

此外,我只取了您的图像的某种颜色类型并减去背景,使背景设置为零。

假设滤波器是线性 FIR 滤波器并且您知道(或选择)滤波器的大小,这可以通过以下方式解决。

我们有一个已知图像 f 和一个输出图像 g,我们想确定什么滤波器 h 采用 f->g。

具体而言,我们假设过滤器是 5x5 过滤器,尽管该方法适用于任何其他尺寸。然后问题是确定 25 个滤波器系数。因此,输出图像中的每个点都是 25 个输入点(已知)的线性组合。因此,我们有 25 个未知数和许多方程,这些方程等于 g 中的像素数(应该与 f 相同)。边缘附近的像素将存在不确定性,您必须决定使用哪种算法(假设边缘之外的零,复制像素等)。

如果图像足够大,这通常是可以解决的(在没有足够独立数据的情况下显然存在退化的情况,例如具有恒定值的图像)。

更具体地说,您可以建立一个线性方程来求解

Ax=b

其中未知数是滤波器 h 中的 25 个值,是输出图像中排列在一维向量中的像素值,并且具有按行排列的输入输入图像的值。每行有 25 个像素,对应于用于输出该行的过滤器的输入。也就是说,第 i有 25 个像素,用于计算第 i输出像素(在向量 b 中)。xR25bRnARn×25

然后你用MATLAB 或 octave 中x=Ab

您可以通过将进行比较并可能以图像格式显示来了解您的过滤器的工作准确度。Axb