【发布时间】:2011-12-22 08:01:53
【问题描述】:
我想自动将古代手写文字的图像按行(以及将来按单词)分割。
第一个明显的部分是预处理图像......
我只是使用简单的数字化(基于像素的亮度)。之后我将数据存储到二维数组中。
下一个明显的部分是分析二进制数组。
-
我的第一个算法非常简单 - 如果数组的一行中的黑色像素多于 Maximum 和 Minimum 值的均方根,那么此行是行的一部分。
在形成线条列表后,我将 height 低于平均水平的线条剪掉了。 最后它变成了某种线性回归,试图最小化空白行和文本行之间的差异。 (我假设这个事实)
我的第二次尝试 - 我尝试使用具有多个适应度函数的 GA。 染色体包含 3 个值 - xo、x1、x2。 xo [-1;0] x1 [0;0.5] x2 [0;0.5]
确定行到行身份的函数是 (xo + α1 x1 + α2 x2) > 0,其中 α1 是行中黑色像素的缩放总和,α2 是之间范围的中值行中的极端黑色像素。 (a1,a2 [0,1]) 我尝试的另一个函数是 (x1 α2) 和 (1/xo + [a1 x1] / [a2 x2] ) > 0 最后一个功能是最有效的。 适应度函数为 (1 / (HeigthRange + SpacesRange)
其中范围是最大值和最小值之间的差异。它代表了文本的同质性。该函数的全局最优——将图像划分为线条的最平滑方式。
我正在使用 C# 和我的自编码 GA(经典,具有 2 点交叉,格雷码染色体,最大种群为 40,突变率为 0.05)
现在我想不出如何以约 100% 的准确率将此图像划分为线条。
执行此操作的有效算法是什么?
更新 2: 将此文本的结果改进为 100%
我是怎么做到的:
- 修复了范围计数中的小错误
- 将适应度函数更改为 1/(distancesRange+1)*(heightsRange+1))
- 将分类函数最小化为 (1/xo + x2/range) > 0(行中的点现在不影响分类) (即优化输入数据并使适应度函数优化更加明确)
问题:
GA 出人意料地无法识别这条线。我查看了“find rages”功能的调试数据,发现“无法识别”的地方噪音太大。 功能代码如下:
public double[] Ranges()
{
var ranges = new double[_original.Height];
for (int y = 0; y < _original.Height; y++ )
{
ranges[y] = 0;
var dx = new List<int>();
int last = 0;
int x = 0;
while (last == 0 && x<_original.Width)
{
if (_bit[x, y])
last = x;
x++;
}
if (last == 0)
{
ranges[y] = 0;
continue;
}
for (x = last; x<_original.Width; x++)
{
if (!_bit[x, y]) continue;
if (last != x - 1)
{
dx.Add((x-last)+1);
}
last = x;
}
if (dx.Count > 2)
{
dx.Sort();
ranges[y] = dx[dx.Count / 2];
//ranges[y] = dx.Average();
}
else
ranges[y] = 0;
}
var maximum = ranges.Max();
for (int i = 0; i < ranges.Length; i++)
{
if (Math.Abs(ranges[i] - 0) < 0.9)
ranges[i] = maximum;
}
return ranges;
}
我在这段代码中使用了一些技巧。主要原因-我想最小化最近的黑色像素之间的范围,但是如果没有像素,则该值变为“0”,并且无法通过找到最佳值来解决此问题。第二个原因 - 此代码更改过于频繁。 我将尝试完全更改此代码,但我不知道该怎么做。
问:
- 是否有更高效的健身功能?
- 如何找到更通用的测定函数?
【问题讨论】:
-
我知道SIFT已经成功用于手写文本分割,但我没有动手经验。
-
我是算法新手,但我想我发现了一些讨论使用隐藏马尔可夫模型进行文本识别的网站。如果它可以识别文本,也许它也可以识别空格/新词......
-
我发现这个链接有一些代码..并没有完全按照您的要求做,但可能会给您一个想法,然后您可以根据需要对其进行修改。 codeproject.com/Articles/69647/Hidden-Markov-Models-in-C
-
请发一张明文的图片(没有你的加工标记),我们可以玩一下
-
@Ernado 文本识别的一个重要部分是文本分割。如果您点击“版本”,您会发现大约 25-30% 的出版物可以下载为 pdf 格式。
标签: c# algorithm image-processing ocr genetic-algorithm