5

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

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

输入图像 2

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

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

4

1 回答 1

2

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

  1. 查找并标记图像中所有单独的 blob
  2. 删除所有超出特定约束(大小、形状)的 blob

在这里,我在pythonusing中实现了这一点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)

结果:

在此处输入图像描述 在此处输入图像描述

于 2012-07-02T19:42:19.713 回答