基于SVD与角点检测的杂文字符号的聚类
程序员文章站
2024-02-11 13:40:28
...
有以下这张文字与符号混合的图片,智能化目标是:找出类似的符号或文字,以便机器人去拾取:
本人测试了二种方案,现分享给大家:
方案一,划纵横格,从每一格子中读取RGB,存入矩阵中,再以SVD(矩阵奇异值分解)提取主对角线的前5个数据,再以欧氏距离找出五维向量的匹配者,也就是分类,截取部分数据如下表格:
690.3 430.9 354.9 282.4 228.3 <<<==[ 0,1 ]===
624 377.9 267.3 258.5 195.3 <<<==[ 0,2 ]===
626.7 368.2 277.8 246.6 193.5 <<--( 0,6 )--
617.9 381.9 275.5 254.7 208.9 <<--( 2,5 )--
634.1 371.7 269.7 246.6 188.1 <<--( 3,5 )--
625.6 383.1 262 256.7 205.4 <<--( 17,10 )--
902.7 405.9 372.6 300.4 236 <<<==[ 0,3 ]===
661.5 364.8 340.9 260.4 219.4 <<<==[ 0,4 ]===
649.5 363.3 329.5 268.3 213.1 <<--( 10,13 )--
651.7 387.5 330.6 293.5 256 <<<==[ 0,5 ]===
661.9 393.8 327.7 287.1 243.8 <<--( 7,4 )--
745.4 384.6 317 257.7 213.4 <<<==[ 0,7 ]===
747.6 412.5 351.1 306.7 291.2 <<<==[ 0,8 ]===
616.6 390.5 231.9 201.3 140.2 <<<==[ 0,9 ]===
717.1 372.1 307.2 260.8 200.8 <<<==[ 0,10 ]===
711.9 373.8 295.6 254.6 208.4 <<--( 7,0 )--
637.1 376.8 285.9 219.8 180.7 <<<==[ 0,11 ]===
645.5 375.4 282.9 233 186.2 <<--( 10,3 )--
638.5 382.9 276.9 219.9 190 <<--( 11,13 )--
634.2 378.3 295.7 221.7 184.1 <<--( 15,2 )--
626.7 379.3 290.4 221 196.3 <<--( 18,1 )--
631.4 376 272.8 218.6 185.7 <<--( 20,12 )--
668.2 371.1 289.4 247.3 223.2 <<<==[ 0,12 ]===
667.3 377.9 272.3 253.4 225.6 <<--( 3,10 )--
为方便观察,现以SVD的前三值生成的RGB框绘之:
在图片中不难发现,匹配错误的还真不少,当然其原因是SVD有主元素已经被自动排序了!
方案二:腐蚀-->取连通域-->角点检测-->角点簇分类
首先上一张经过腐蚀后的图片:
在此基础上取Blobs,就不会将一些字的偏旁也拆开了,每一字基本是一个连通的域:
于是现在可对各Blobs[i]进行角点检测:
最后,我将SVD匹配的优质结果与角点匹配的优质结果整合起来,框色取是SVD的:
这样就实现了机器人智能拾取,准确性大有提高.此类方案可应用于对小零件小产品的拾取与分类.
使用平台:Win7+C#2012, 引用库有:Accord,AForge,EmguCV.
-------------------- 原创: 微信[13058943056],于2020-03-08
推荐阅读