使用opencv去除噪声像素

Posted

技术标签:

【中文标题】使用opencv去除噪声像素【英文标题】:Removal of noisy pixels using opencv 【发布时间】:2012-07-03 01:35:32 【问题描述】:

我正在尝试使用 openCV 从输入图像中检测文本。 为此,我需要从图像中去除噪声分量。使用的标准是,如果某个组件的像素数小于 15,则消除该特定组件。

例如,假设以下给定的图像作为 i/p 提供给函数:

可以看出,两张图片都包含大量不需要的噪声像素,尤其是第一个。

因此,如果有人能提出一种可行的方法来实现它,我们将不胜感激。

【问题讨论】:

文本也看起来像噪音。请参阅第一张图片中的“从数据中学习”。 是的,我知道。实际上也不需要“从数据中学习”。它只是外部边框颜色。在后期阶段,可以使用纯色填充的“从数据中学习”。所以暂时,那段特定的文本也可以被认为是噪音。事实上,在第一张照片中,或多或少的一切都需要被消除。在第二种情况下,横向的“从数据中学习”很有用,并且符合我们的要求。 侵蚀或膨胀,打开,关闭?你试过这些吗? 我已经尝试过腐蚀膨胀,但在这种情况下,我的文本也被篡改了。我也尝试了中值过滤器。但在这方面,实际文本也变得过于模糊。 只是一个幼稚的建议:字母对齐,文本行几乎以裸代码的形式出现。不是你的噪音)你可以使用这些功能吗? 【参考方案1】:

好的,抱歉,这不在c 中,并且它没有使用opencv,但是我确信在opencv 中必须可以标记,只是我还没有使用它......所以这个可能会有所帮助......基本上这个想法是:

    查找并标记图像中所有单独的 blob 删除所有超出特定限制(大小、形状)的 blob

在这里,我在python 中使用scipy 实现了这一点,但只是为了尺寸(不是形状,虽然这很容易并且可以摆脱下面第一张图片中的细长线)。为此,我们必须知道字母的可接受大小范围 - 但是您可以在标记后通过查看平均 blob 大小来确定这一点。您可能仍然会得到字母大小的误报 - 但这些可以通过观察它们来消除落在某个集中 blob 的区域之外(因为文本在空间上是规则的)......此外,最小句子长度可能是一个强大的约束。

总之,代码:

import scipy
from scipy import ndimage

im = scipy.misc.imread('learning2.png',flatten=1)
#threshold image, so its binary, then invert (`label` needs this):
im[im>100]=255
im[im<=100]=0
im = 255 - im
#label the image:
blobs, number_of_blobs = ndimage.label(im)
#remove all labelled blobs that are outside of our size constraints:
for i in xrange(number_of_blobs):
    if blobs[blobs==i].size < 40 or blobs[blobs==i].size>150:
        im[blobs==i] = 0
scipy.misc.imsave('out.png', im)

结果:

【讨论】:

以上是关于使用opencv去除噪声像素的主要内容,如果未能解决你的问题,请参考以下文章

如何去除opencv中的二值图像噪声?

OpenCV - 去除图像中的噪声

opencv图像处理基础之膨胀和腐蚀

去除图像中虚假的小噪声岛 - Python OpenCV

Opencv——图像添加椒盐噪声高斯滤波去除噪声原理及手写Python代码实现

opencv 2 -- 形态学处理