最近研究基于形状上下文识别和线性代数,收获甚多。今晚终于能初步匹配两个字符串图片上面的轮廓像素点了,VC++6.0实现,相当激动,截图纪念下。
心得:
1 目标图像和待匹配图像,一个一个像素的匹配,双方都只取RGB(0,0,0)的点,也就是只匹配轮廓,能大大提高速度。原来对目标图像每个点都尝试匹配,果断慢到爆。现在看来,速度还是慢,果然光提取轮廓还不过,还要提取轮廓点。
2 选取建立矩阵时的半经很重要,不然会出现莫名奇妙的效果。目前源图和目标图的尺寸都是400*325,选取的建立矩阵的极坐标半径是300。这也就基本保证了在源或者目标图中,任意一个轮廓点上,以它为圆心,半径300的圆,能覆盖整个图片的大部分轮廓点。
3 对腾讯验证码,以及对自制的样本,均发现:先使用平均灰度法进行二值化,再使用canny边缘检测提取轮廓,效果相当棒。当然也有可能是自己实现的canny边缘检测比较水,还没有加入滤波功能。
4 考虑匹配验证码时候移动一个方框区域,让样本只匹配方框区域内的内容。因为一个字符不可能横跨整个验证码区域。
代码太垃圾了,搞健壮可靠的demo了再上传部分代码吧。
本文详细介绍了如何利用形状上下文识别和线性代数原理,提高字符串图片轮廓像素点匹配速度。通过提取轮廓、合理选择矩阵建立的极坐标半径、二值化和Canny边缘检测等技术,成功实现了目标图像与待匹配图像之间的高效匹配。此外,文章还探讨了匹配验证码时的策略,并指出代码尚需改进以增强健壮性和可靠性。
1473





