如何判断一张图片上的字符是否有粘连性

请各位lao帮忙看看,给出一张图片,判断该图片的字符是否有粘连性,有粘连性字符话就返回真。有相关方面的资料吗?我看网上都是对粘连字符的分割,对粘连字符判断很少,如图所示。

img

img

我觉得如果正向思考,那么必然是需要去设计这么一种算法的,但是目前我接触过的,好像还没有这类算法,如果题主去设计实现这样一个算法,我相信实现不是难题,但是我们知道一个算法的好坏,是需要“大量的样本数据“,进行不断的优化、实践才可以进化的,所以我建议题主反向思考一下吃需求的实现途径。
例如:反向思考一下,如果知道一个图片的正常结果,那么通过已有算法,去识别出图片中的字符,如果字符与知道的正常结果不一样,则认为粘连,例如:知道结果是TYPE,如果借助已有图片识别算法ocr,识别出为三个字符,或者其他,则认为粘连了

啥是粘连字符串😅😅😅

这个问题需求背景是什么,opencv重点是识别。粘不粘连可以自己算法处理。

粘连字符的分割有很多种方法:

第一种方法:利用阈值法提取联通区域,再利用形态学分离字符;

第二种方法:每个字符定义一个感兴趣区域;

第三种方法: 计算区域每列像素数目,由于不同字符之间连接部分非常狭窄,求取每列像素的全局最小值;

等等。其中第一种方法最为常见,也是本文介绍的方法。

粘连字符分割识别

本次采用halcon自带的分类器文件

一般用于识别数字和字符,以及少数特殊字符

字符库的使用望文生义即可

Document文档字符、DotPrint点阵字符、Industrial工业字符等

待识别原图

图中数字俩俩连在一起

根据直方图阈值法阈值分割结果

填充孔洞后

利用矩形元素在垂直方向开运算

此步骤为关键一步

此时已分离单个字符

利用halcon自带字符库

最终识别结果

核心程序

*(1)字符分割

*关闭更新

dev_update_window ('off')

*读取图像

read_image (Bottle, 'bottle2.png')

*获得图像大小

get_image_size (Bottle, Width, Height)

*关闭窗口

dev_close_window ()

*打开一个图像大小两倍的窗口

dev_open_window (0, 0, 2Width, 2Height, 'black', WindowHandle)

set_display_font (WindowHandle, 20, 'mono', 'true', 'false')

dev_display (Bottle)

disp_continue_message (WindowHandle, 'black', 'true')

*全局阈值处理,获得区域

threshold (Bottle, RawSegmentation, 0, 95)

*根据形状特征填充孔洞

fill_up_shape (RawSegmentation, RemovedNoise, 'area', 1, 5)

*利用圆形结构元素执行开运算

opening_circle (RemovedNoise, ThickStructures, 2.5)

dev_display (Bottle)

*填充孔洞

fill_up (ThickStructures, Solid)

*利用矩形结构元素执行开运算。矩形宽设为1,高为7,相当于低于7的连接被截断

opening_rectangle1 (Solid, Cut, 1, 7)

*计算连通区域

connection (Cut, ConnectedPatterns)

*计算区域交集

intersection (ConnectedPatterns, ThickStructures,NumberCandidates)

*根据区域面积进行选择

select_shape (NumberCandidates, Numbers, 'area', 'and', 300, 9999)

*区域排序

sort_region (Numbers, FinalNumbers, 'first_point', 'true', 'column')

*(2)读取数字

*读取OCR分类器(多层感知器)

read_ocr_class_mlp ('Industrial_0-9A-Z_NoRej.omc', OCRHandle)

*使用分类器进行字符分类

do_ocr_multi_class_mlp (FinalNumbers, Bottle, OCRHandle, RecNum, Confidence)

*求取字符区域中心坐标及面积

area_center (FinalNumbers, Area, Row, Column)

set_display_font (WindowHandle, 27, 'mono', 'true', 'false')

*循环显示读取得到的数字

for i := 0 to |RecNum| -1 by 1

*显示结果

disp_message (WindowHandle, RecNum[i], 'image', 80, Column[i]-3, 'green', 'false')

endfor

*清除分类器

clear_ocr_class_mlp (OCRHandle)

dev_update_window ('off')

参考一下

用谷歌的kaptcha框架,http://code.google.com/p/kaptcha/wiki/ConfigParameters%EF%BC%8C%E9%85%8D%E7%BD%AEkaptcha.obscurificator.impl%E5%8F%82%E6%95%B0%E5%B0%B1%E5%8F%AF%E4%BB%A5%E5%81%9A%E5%88%B0%EF%BC%8Chttp://www.111cn.net/jsp/Jsp-Servlet/43977.htm