使用 OpenCV 去除图像中的椒盐噪声

问题描述 投票:0回答:1

盐和胡椒噪声图像

我一直在尝试使用线性滤波器去除包含 QR 码的图像中的噪声,但生成的图像严重模糊,导致很难准确扫描 QR 码。我应该使用哪种算法或技术来有效去除图像中的噪声,同时保留 QR 码的细节?

我尝试使用线性滤波技术(例如高斯模糊和中值滤波)去除图像中的噪声。然而,这些方法在成功降低噪声的同时,也显着模糊了二维码,导致难以准确扫描。我希望在保持二维码清晰度的同时减少噪音。”

opencv image-processing computer-vision qr-code noise-reduction
1个回答
0
投票

嗯,这就是线性滤波器的作用。

但是既然你知道这是一个二维码,为什么要使用灰度图像而不是二进制图像呢?

如果对图像进行模糊处理,则会将一堆像素转换为连续的灰色信息,从 0 到 1,具体取决于周围有多少黑色或白色像素。好的。对于简单算法来说,这是很好的第一步。

但是,目标是将该级别视为像素为黑色的一种概率级别。您知道您的图像中没有任何东西是灰色的。它要么是白色的,要么是黑色的。因此,使用阈值。无论现在模糊的图像中黑白之间的过渡如何连续,它都必须有一个边缘,在该边缘处像素从“黑多于白”变为“白多于黑”。

然后,从现在的二值图像中,您可以使用一些形态学运算符来过滤一些剩余的噪声

我得到了一些可以接受的结果(我的手机立即看到“mal7 w felfel”),带有严重的高斯模糊,然后是阈值,然后关闭和打开。

cv2.morphologyEx(cv2.morphologyEx(((cv2.blur(img, (19,19))[...,0]>126)*255).astype(np.uint8), cv2.MORPH_CLOSE, kernel), cv2.MORPH_OPEN, kernel)

kernel=np.ones((17,17), dtype=np.uint8)

我确信这些参数可以稍微调整一下。我没有。重点是,您知道最终结果是二值图像,因此模糊仅作为尝试猜测哪里是黑色、哪里是白色的初步步骤。

当然,存在一些更复杂的算法来锐化边缘。

更重要的是,如果您知道您正在查看的是二维码(或者只是某种网格),那么您可以尝试一些临时算法,推断网格线在哪里,网格中每个单元格的颜色是什么。但这超出了论坛答案的范围。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.