java – 检测图像中的对象(单词)
我想在车牌(城市名称)中实现物体检测.我有一个形象:
我想检测图像是否包含单词“????”: 我已经尝试使用模板匹配方法使用OpenCV和也使用MATLAB,但是当与其他图像进行测试时,结果很差. 我也读了this page,但是我不能很好地了解该怎么做. 任何人都可以帮我或者一步一步地解决这个问题吗? 解决方法
您的问题非常广泛,但我将尽力在程序语境中解释光学字符识别(OCR),并为您提供一般的项目工作流程,然后是成功的OCR算法.
你面对的问题比大多数人更容易,因为不必识别/区分不同的角色,只需要识别一个图像(假设这是唯一想要识别的城市).然而,您受到任何图像识别算法(质量,照明,图像变化)的许多限制. 你需要做的事情 1)图像隔离 你必须隔离你的形象与嘈杂的背景: 我认为最好的隔离技术是首先隔离车牌,然后隔离您要查找的特定字符.在此步骤中要牢记的重要事项: 车牌总是出现在汽车的同一个地方吗? 这个任务的困难/执行在很大程度上取决于这三个问题的答案. 2)图像捕获/预处理 这是您特定实现的一个非常重要的步骤.尽管可能,您的图像极不可能如下所示: 因为您的相机必须直接在车牌前.更可能的是,您的图像可能如下所示: 取决于拍摄图像的透视图.理想情况下,您的所有图像都将从同一个有利位置获取,您只需应用一个变换,使它们看起来相似(或根本不应用).如果您从不同的有利位置拍摄照片,则需要操作它们,否则您将比较两个不同的图像.另外,特别是如果您只从一个有利位置拍摄图像,并决定不进行转换,请确保您的算法正在寻找的文本被转换为来自相同的视点.如果你不这样做,你将会有一个不太好的成功率,很难调试/弄清楚. 3)图像优化 您可能想(a)将您的图像转换为黑白和(b)减少图像的噪点.这两个过程分别称为二值化和去散布.这些算法有许多实现可用于许多不同的语言,大多数可通过Google搜索访问.您可以使用任何语言/免费工具批量处理您的图像,如果你想要的,或者找到一个适用于您决定工作的任何语言的实现. 4)模式识别 如果你只想搜索这个城市的名字(只有一个字),你很有可能要实现矩阵匹配策略.许多人也将矩阵匹配称为模式识别,因此您可能已经在此背景下听到过.这是一个excellent paper详细的算法实现,应该帮助你非常应该选择使用矩阵匹配.可用的其他算法是特征提取,其尝试基于字母(即循环,曲线,线)内的图案来识别单词.如果许可证上的字词的字体风格发生变化,您可能会使用这种方式,但如果始终使用相同的字体,我认为矩阵匹配将获得最佳效果. 5)算法训练 取决于您采取的方法(如果您使用学习算法),则可能需要使用标记的数据对算法进行训练.这意味着你有一系列的图像被识别为True(包含城市名称)或False(不).这是一个如此有效的伪代码示例: train = [(img1,True),(img2,(img3,False),(img4,False)] img_recognizer = algorithm(train) 然后,您应用训练有素的算法来识别未标记的图像. test_untagged = [img5,img6,img7] for image in test_untagged: img_recognizer(image) 您的训练集应大于四个数据点;一般来说,越大越好.就像前面所说的那样,确保所有的图像都是一样的转换. 这是一个非常非常高级别的代码流,可能有助于实现您的算法: img_in = capture_image() cropped_img = isolate(img_in) scaled_img = normalize_scale(cropped_img) img_desp = despeckle(scaled_img) img_final = binarize(img_desp) #train match() = train_match(training_set) boolCity = match(img_final) 上述过程已经执行了很多次,并且已经在许多语言中进行了详细的记录.以下是您问题中标记的语言的一些实现. >纯Java 祝你好运! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |