Weiqi_generation
围棋棋谱识别
http://www.lg508.com/game/200019997.aspx 把一个静态的棋谱,通过图像识别重新转换为动态效果;
棋盘上的棋子定位
方法1:自动定位 color to hsv : 然后选择其中的H (Hue)分量 做二值化 (做中值滤波) 做图形学上的开闭运算 (先腐蚀后膨胀) 方法2:手动定位 因为棋盘的大小是固定的,所以棋盘上的361个位置的坐标也是固定的,那么只需要判断每个位置是有没有子,是黑子还是白子,这样的操作相对简单很多
定位区域中存在“黑子”,"白子"或者没有子
关于分类器,我先将黑白子 和 没有子 做区分:黑白子它的rgb分量接近,而对于没有子的情况,,大部分会出现黄色,黄色的r和g分量远大于b分量,因此可以通过rgb来区分是否有子
然后再区分黑子和白子,主要通过区域的rgb均值
提取有效数字
棋子中的数字彼此是分离的,因此问题的重点在于去噪。
噪声区域的特点是呈现实心的连通域,而数字部分的连通域都是中空的,因此可以利用这一特征进行区分
做联通域提取 bw2label regionprops 对于每个子连通域,做一次中值滤波,如果还剩下白色,那么说明它是非中空的,抛弃该区域,否则保留该区域引入聚合度的概念: 在包含全部目标图像的所在矩形中,如果是噪声,因为光照等原因的会聚问题,造成二值化后1区域是聚集在一起的,可以说是聚合度较高,而0-9则是聚合度较低的. 聚合度ratio = S二值化 / S最小包含矩形
另外由于数字不会靠边,因此对于与边界有连接的区域自动去除; 但是,对于8这样的数字 它的ratio也比较大,如果把ratio阈值设的较小则可能忽略它,但如果较大则可能引入其它噪声
空洞识别 因此需要识别图像中的空洞: 空洞特征:图像S中至少存在一点,它的上下左右方向都存在目标像素,而它本身不属于目标像素,如果存在说明有空洞,否则则是没有 对于有空洞的图像可以允许ratio更大一些
上图是随机选择一行提取数据的结果,可见其中除了8没有被提取,其它数字均被成功分割和提取
关于这一问题,对于4进行扩展:
填充,从任意一个点开始,填充0点,如果非闭合,那么一定可以填充所有非1的0点,否则会有部分0点无法填充,计算总共点个数,已知1点个数,判断二者差是否为所求即可
利用一个队列去维护,四邻域提取
棋子内数字识别
将0到9的数据单独拿出来,提取能够对它们进行分类的特征 选择上面提取结果中较为标准者作为标准结果,提取特征训练
然后将待选图像L切为小块,同时将目标图像S切为小块,计算L和S中白色点个数的协方差阵,协方差最小者为目标
现在主要的问题是
1. 6和9有些时候会识别反
2. 对于高光区域去噪比较困难