我尝试使用光学字符识别(OCR)来读取打印在数字视频(DV)磁带上的文本。我使用视频中的裁剪静止帧进行OCR处理。文本是白色的,但是有颜色瑕疵(可能是复合颜色瑕疵),因此白色文本上有颜色渗透(参见下面的示例)。颜色看起来是洋红色 - 青色 - 黄色的颜色空间,也许?
如果我可以删除/过滤这些颜色以在文本上只留下白色,那么OCR结果可能会得到改善。然后我可以创建一个二进制黑/白图像。我现在可以这样做,但我怀疑如果我可以在OCR之前从白色文本中删除颜色,结果会有所改善,这有助于将白色文本与背景图像分开。
是否有任何方法,最好使用Imagemagick从白色文本中过滤掉这些颜色?我不确定接近这个的最佳方法,因为有多种颜色出血,并且每帧中的背景都会发生变化。目前在Windows 7上使用Imagemagick版本6.9.2-3 Q16 x64。
答案 0 :(得分:2)
我建议利用ImageMagick的FX& Morphology Dilate预处理图像。但说实话,它需要一些试验和找到适合您的解决方案时出错。我还建议您开发的任何解决方案都允许优雅的错误处理(即如果尝试OCR过程失败,则发出警告,并将视频推进到下一个I帧和重复。)
-fx
运算符将允许您创建用户定义的数学表达式。关于chrome-keys和其他容忍方法的一些快速谷歌搜索可能会有所帮助。但是对于许多OCR技术,通常将颜色减少到“均匀”的灰度级。
convert aaA7b.png -fx 'intensity' intensity.png
形态学允许普通&自定义内核可以改变周围的像素。由于视频扫描线+其他工件正在扭曲文本,我建议探索Dilate,但Usage documents中列出了许多其他技术。
convert aaA7b.png -fx 'intensity' \
-morphology Dilate Diamond:1 diamond.png
convert aaA7b.png -fx 'intensity' \
-morphology Dilate Square:1 square.png
convert aaA7b.png -fx 'intensity' \
-morphology Dilate Plus:1 plus.png
如果您需要更精确的内容,请通过提供以下格式size: row1 row2 ... rowN
来创建自己的内核。在这个例子中,我正在创建一个3x3内核,其中只有一条垂直线来偏移视频扫描线。
convert aaA7b.png -fx 'intensity' \
-morphology Dilate \
'3x3: nan,1,nan nan,1,nan nan,1,nan' user_defined.png
但是YMMV。另请查看Fred's TextCleaner脚本。 -deskew
& -sharpen
运营商将帮助减少噪音。
带文字的裁剪区域样本(注意颜色流失和白色文字混合到背景中):
我认为有一句话“你不能用汉堡包做牛排。”或类似的东西。在某些时候,背景会清除前景中的文本,现在花费更多时间来创建一个能够承认这一点的解决方案。