OpenCV中的噪音去除

4

我目前正在一个需要对文档图像进行噪声去除的项目中工作。但是我无法创建任何有用的代码来开始我的项目。谢谢。

根据我所学习的,(特别是盐/胡椒噪声)产生在故障扫描仪中的噪声可以通过k-Fill算法来去除,但我无法理解该理论。

我正在使用C++中的OpenCV和Codeblocks IDE。我是图像处理领域的新手。源代码或任何相关的链接都会受到赞赏。


3
中值滤波器简单易用,对椒盐噪声有良好的去除效果。 - Kos
1
但是在我使用中值滤波器之后,图像看起来非常模糊。我猜它不适用于具有小字体的文档图像。 - kcire arraveug
3个回答

3

如果您不了解k-fill,请先尝试使用更简单的方法。

这里是一篇关于替代降噪算法及其性能的文章。

我建议您尝试使用opening。OpenCV文档中有关于内置形态学操作的简短解释。您也可以使用示例代码进行实验。


谢谢提供的信息。我想我得学习一下OpenCV中的形态学函数,也许它们能对我有很大帮助。 - kcire arraveug
先生,我尝试了开运算和闭运算,但它只能去除椒盐噪声。当我尝试用包含边缘噪声的复印图像时,它失败了。您能否建议其他技术? - kcire arraveug
你可以尝试调整结构元素的大小和形状,以及使用形态学算子的迭代次数。你也可以尝试Kos建议的中值滤波器。 - rics

0

K-滤波器,很容易理解。 选取一个小区域(例如3x3像素或5x5像素)。 然后计算边缘上的“启用”(即黑色)像素数目。 如果总数大于n,则填充中心像素(在3x3网格上是单个像素),并在整个图像上重复此过程。如果边框总数小于n,则将其删除。


0

我不知道k-fill有多有效; 但是,

我来解释一下;这可能对其他人有用: 我将以Python为例,但CPlusPlus和Java应该类似(我不知道) 减少噪声的一种方法是中值滤波算法,它确实会降低图像质量。这种质量降低程度取决于ksize参数。您必须为此参数选择一个较小的数字(例如3);这使得质量不会太低。消除非常小的噪声。

import cv2
im = cv2.imread("noisy_flower.png")
im = cv2.medianBlur(im, ksize=5)
cv2.imwrite("clean_flower.png", im)

enter image description here

这种模式适用于图像。对于照片中的文本,您可以创建一个蒙版,并根据蒙版将文本复制回最终图像。这在很大程度上取决于您的情况。


Java版本:
Imgproc.medianBlur(src, dst, 5);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接