使用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去除噪声像素的主要内容,如果未能解决你的问题,请参考以下文章