【问题标题】:removing black dots from image using OpenCV and Python使用 OpenCV 和 Python 从图像中去除黑点
【发布时间】:2018-04-29 16:08:44
【问题描述】:

我正在尝试比较两张图像,并且需要在与数字副本进行比较之前对其中一张是扫描副本进行预处理/清理。 Scanned copy / Digital copy

我在扫描的图像上运行此代码并得到一个包含许多黑点的输出。不知道如何清理这些,以便我可以与数字副本进行比较

img = cv2.multiply(img, 1.2)
kernel = np.ones((1, 1), np.uint8)
img = cv2.erode(img, kernel, iterations=1)
kernel1 = np.zeros( (9,9), np.float32)
kernel1[4,4] = 2.0
boxFilter = np.ones( (9,9), np.float32) / 81.0
kernel1 = kernel1 - boxFilter
img = cv2.filter2D(img, -1, kernel1)

下面是我得到的输出

【问题讨论】:

    标签: python opencv


    【解决方案1】:

    尝试在频域应用过滤器,FFT 后的图像会有规则的亮点,因为您的图像噪声。如果您将移除这些点并进行反 FFT 变换,您将从图像中移除点。请检查以下示例:example1example2example3

    【讨论】:

    • 谢谢。有没有办法自动检查和去除 FFT 图像中的亮点?
    • 任何局部最大值查找器。搜索局部最大值,找到后绘制黑色实心圆圈。搜索下一个局部最大值,依此类推。
    【解决方案2】:

    是的。 @Andrey 方法是解决问题的正确方法。 我已经尝试去除频域中的高频点,这是一个示例,说明如果正确完成会是什么样子

    灰度原始图像。

    在图像上运行 FFT 后

    去除所有高频噪音。当然,这是通过在噪声源周围画一个黑色圆圈手动完成的。你可以设计你的程序来检测局部亮点并干净地去除它们。

    这是对上述频率图像进行逆FFT后的最终结果。由于我去除噪音的粗略方式导致了一些退化,但它应该让您大致了解如何完成它。

    只有点周围的区域会受到此过程的影响,而所有其他图案都保持其原始形式。

    【讨论】:

      猜你喜欢
      • 2021-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-14
      • 1970-01-01
      • 1970-01-01
      • 2017-06-23
      相关资源
      最近更新 更多