使用matlab对图像进行锐化有多种方法 例如 IM = imsharpen(old_image,'半径',2,'量',1); IM = imfilter(old_image,fspecial('反锐化')); imshow(IM) 如何撤消此操作(锐化)并返回原始图像??
答案 0 :(得分:2)
通常,您无法撤消过滤器的效果。过滤,甚至锐化过滤器,组合邻域中的值,减少信息。
对于一小类线性滤波器,那些不会将任何频率置零的滤波器,可以在一定程度上反转操作。这要求不发生削波。也就是说,过滤器的结果保存为浮点值而不是uint8或类似值。然后,反转操作涉及在频域中乘以滤波器的逐点逆。线性滤波器内核 h 会对图像 f 进行卷积,这意味着它们在频域中相乘,大致为:g = ifftn(fftn(f).*fftn(h))
。然后是f = ifftn(fftn(g)./fftn(h))
。
我粗略地说,因为上面要求填充h
大小为f
。
注意,fftn(h)
为0时,除法产生NaN(因为你做0/0),而不是 f 的原始值。这为您可以“撤消”的过滤器类别设置了一个强大的限制。此外,如果滤波的图像添加了噪声(这可能除了纯粹的理论情况之外),那么噪声将在滤波器具有小值的频率处被放大。基本上,即使是少量的噪音也会使这一过程失败。
Wiener filter使用regularización执行上述操作,因此噪音和接近零滤波器值不会导致您的答案无效。对于不适定的逆变换,存在更复杂的迭代求解器,但这是一个很大的主题。与Wiener一起开始搜索,你最终也会发现它们。
另一方面,如果您正在寻找相反的过滤器 - 平滑 - 请查看imgaussfilt
的示例。