2012-07-02 164 views
5

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

例如假定以下给出的图像被设置为I/P的函数: input image 1

Input image 2

正如可以看到两个图像中含有大量的不想要的噪声像素的,特别是第一一。

所以,如果任何人都可以提出一个可行的方法来实现它,它将不胜感激。

+0

文本也像噪音。请参阅第一张图像中的“从数据中学习”。 –

+0

是的,我知道。 “从数据中学习”实际上并不需要。它只是外部边框颜色。在后期阶段,可以获得纯色填充“从数据中学习”。所以暂时,这段特定的文字也可以被视为噪音。事实上,第一张照片或多或少都需要消除。在第二种情况下,横向“从数据中学习”很有用,并且符合我们的要求。 – Koustav

+0

侵蚀或扩张,开放,关闭?你有没有试过这些? –

回答

2

好吧,抱歉,这不是c和不使用opencv,但是我敢肯定,标签必须在opencv是可能的,只是我还没有使用它...所以这可能帮助...基本思路是:

  1. 查找,并标记所有独立的斑点图像中
  2. 删除会超出一定的约束(大小,形状)

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

总之,代码:

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) 

结果:

enter image description here enter image description here