一种基于机器视觉的绘图方法及系统与流程

文档序号:15272975发布日期:2018-08-28 22:39阅读:424来源:国知局
本发明涉及机器人领域,尤指一种基于机器视觉的绘图方法及系统。
背景技术
:随着机器人技术飞速发展,特别是机器视觉、精密控制等技术的发展,使机器人更加智能,也能适应更多的工作,因此目前机器人不仅在工业上广泛应用,在消费领域也越来越普及,例如在家庭陪护、实践教学、科技展览等领域都有涉及。在消费级机器人领域,机器人的应用也越来越丰富,甚至可以做到“琴棋书画”样样精通。对于含有操作臂的机器人,控制其“写字”和“绘画”是常见的应用场景。现有技术是基于预处理技术实现书写或绘制预设的内容。首先利用ttf字库,提取要书写的汉字的轮廓点,并把轮廓转换成样条曲线,然后后台处理这些曲线并转换成机械臂的末端轨迹,最后控制机械臂按照预设好的轨迹运行从而实现机械臂的写字功能。该方法的缺点是:1、只能书写汉字,不能画简图;2、需要提前预置标准字库,只能处理标准字体,无法实现非标准、个性化的字体。技术实现要素:本发明的目的是提供一种基于机器视觉的绘图方法及系统,通过采集用户所绘画的内容、提取笔画数据后绘制,让机器人实时分析和模仿,从而实现个性化的笔迹模仿,具有更强的交互性。本发明提供的技术方案如下:一种基于机器视觉的绘图方法,包括:步骤s100采集待绘制内容的原始静态图像;步骤s200对所述原始静态图像进行处理,提取所述原始静态图像的笔画数据;步骤s300根据所述原始静态图像的笔画数据,得到对应的机器人状态变量列表;步骤s400根据所述机器人状态变量列表,进行运动路径规划,生成运动消息序列;步骤s500根据所述运动消息序列,执行绘图动作。在上述技术方案中,在采集待绘制内容的原始静态图像后,利用图像处理技术提取笔画数据、从而得到状态变量列表,再进行运动规划生成运动消息序列,并执行该消息序列来完成绘图动作;由于是从被绘制内容中提取其笔画来实现绘制,因此既不需要预置标准字库、又可以实现对具有笔画的简笔图进行绘制,从而实现了个性化的笔迹模仿,具有更强的交互性。进一步,所述步骤s200具体包括:步骤s210对所述原始静态图像进行处理,得到对应的灰度图;步骤s220对所述灰度图进行阈值处理,得到二值化的图像;步骤s230提取所述二值化的图像的骨架图像;步骤s240根据所述骨架图像,得到对应的轮廓信息;步骤s250根据所述轮廓信息,提取所述原始静态图像的笔画数据。在上述技术方案中,通过剔除冗余的像素点,提取原始静态图像的轮廓信息,得到笔画数据,既可以避免图像模糊,又可以减少笔画数量,提高绘制速度。进一步,所述步骤s210包括:步骤s211根据预设的定位块对所述原始静态图像进行校准,得到校准后的静态图像;步骤s212对所述校准后的静态图像进行灰度处理,得到对应的灰度图。在上述技术方案中,通过对原始静态图像进行校准,可以降低对拍摄的要求,绘图板平面无需完全垂直于摄像头,同时避免因原始静态图像的变形影响机器人所模仿的绘画质量。进一步,所述步骤s230包括:步骤s231遍历所述二值化的图像中的每个像素点,获取单像素点或一系列单像素连接而成的线段、曲线段或封闭图形的轮廓线作为骨架图像,所述单像素点是非单像素连接图像的中间像素点。在上述技术方案中,通过剔除冗余的像素点,获取骨架图像,既可以避免图像模糊,又可以减少笔画数量,提高绘画速度。进一步,所述步骤s250包括:步骤s251遍历所述轮廓信息,剔除所述轮廓信息中各轮廓之间重复的轮廓线;步骤s252将剩下的各轮廓分别按照笔画的形式保存,得到所述原始静态图像的笔画数据。在上述技术方案中,剔除重复的轮廓线,避免因重复轮廓,导致图像模糊。进一步,所述步骤s252进一步包括:步骤s2521将剩下的各轮廓分别按照笔画的形式保存,并对每个笔画按照预设的精度进行裁剪,得到所述原始静态图像的笔画数据。在上述技术方案中,通过对笔画进行适当的裁剪,减少绘画的数据量,提高绘画速度。进一步,所述步骤s300包括:步骤s310根据所述原始静态图像的笔画数据,生成对应的机器人的运动轨迹数据;步骤s320分别对所述机器人的运动轨迹数据中所有轨迹号各自对应的每个轨迹点进行运动学解算,得到每个轨迹点对应的机器人状态变量;步骤s330根据所有轨迹点对应的所述机器人状态变量,得到所述笔画数据对应的所述机器人状态变量列表。在上述技术方案中,根据图像的笔画数据得到机器人状态变量列表,便于机器人执行绘画动作。进一步,所述步骤s400包括:步骤s410调用预先配置好的机器人运动规划库,对所述机器人状态变量列表中每个机器人状态变量进行运动路径规划,得到每个机器人状态变量对应的运动消息;步骤s420根据每个机器人状态变量对应的运动消息,生成机器人运动消息序列。在上述技术方案中,根据机器人状态变量列表和运动规划库,得到机器人运动消息序列,以便机器人根据运动消息序列执行绘画,完成对用户绘画的模仿。本发明还提供一种基于机器视觉的绘图系统,包括:图像采集模块,用于采集待绘制内容的原始静态图像;笔画提取模块,与所述图像采集模块电连接,用于对所述原始静态图像进行处理,提取所述原始静态图像的笔画数据;状态变量生成模块,与所述笔画提取模块电连接,用于根据所述原始静态图像的笔画数据,得到对应的机器人状态变量列表;路径规划模块,与所述状态变量生成模块电连接,用于根据所述机器人状态变量列表,进行运动路径规划,生成运动消息序列;绘图模块,与所述路径规划模块电连接,用于根据所述运动消息序列,执行绘图动作。在上述技术方案中,在采集待绘制内容的原始静态图像后,利用图像处理技术提取笔画数据、从而得到状态变量列表,再进行运动规划生成运动消息序列,并执行该消息序列来完成绘图动作;由于是从被绘制内容中提取其笔画来实现绘制,因此既不需要预置标准字库、又可以实现对具有笔画的简笔图进行绘制,从而实现了个性化的笔迹模仿,具有更强的交互性。进一步,所述笔画提取模块包括:灰度化单元,用于对所述原始静态图像进行处理,得到对应的灰度图;二值化单元,用于对所述灰度图进行阈值处理,得到二值化的图像;骨架提取单元,用于提取所述二值化的图像的骨架图像;边缘检测单元,用于根据所述骨架图像,得到对应的轮廓信息;笔画提取单元,用于根据所述轮廓信息,提取所述原始静态图像的笔画数据。在上述技术方案中,通过剔除冗余的像素点,提取原始静态图像的轮廓信息,得到笔画数据,既可以避免图像模糊,又可以减少笔画数量,提高绘制速度。进一步,所述笔画提取模块还包括:校准单元,用于根据预设的定位块对所述原始静态图像进行校准,得到校准后的静态图像;所述灰度化单元,进一步用于对所述校准后的静态图像进行灰度处理,得到对应的灰度图。在上述技术方案中,通过对原始静态图像进行校准,可以降低对拍摄的要求,绘图板平面无需完全垂直于摄像头,同时避免因原始静态图像的变形影响机器人所模仿的绘画质量。进一步,所述骨架提取单元,用于提取所述二值化的图像的骨架图像具体为:所述骨架提取单元,遍历所述二值化的图像中的每个像素点,获取单像素点或一系列单像素连接而成的线段、曲线段或封闭图形的轮廓线作为骨架图像,所述单像素点是非单像素连接图像的中间像素点。在上述技术方案中,剔除冗余的像素点,既可以避免图像模糊,又可以减少笔画数量,提高绘画速度。进一步,笔画提取单元,用于根据所述轮廓信息,提取所述原始静态图像的笔画数据具体为:用于遍历所述轮廓信息,剔除所述轮廓信息中各轮廓之间重复的轮廓线;以及,将剩下的各轮廓分别按照笔画的形式保存,得到所述原始静态图像的笔画数据。在上述技术方案中,剔除重复的轮廓线,避免因重复轮廓,导致图像模糊。进一步,所述笔画提取单元,进一步用于将剩下的各轮廓分别按照笔画的形式保存,并对每个笔画按照预设的精度进行裁剪,得到所述原始静态图像的笔画数据。在上述技术方案中,通过对笔画进行适当的裁剪,减少绘画的数据量,提高绘画速度。进一步,所述状态变量生成模块包括:运动轨迹数据生成单元,用于根据所述原始静态图像的笔画数据,生成对应的机器人的运动轨迹数据;运动学解算单元,用于分别对所述机器人的运动轨迹数据中所有轨迹号各自对应的每个轨迹点进行运动学解算,得到每个轨迹点对应的机器人状态变量;状态变量列表生成单元,用于根据所有轨迹点对应的所述机器人状态变量,得到所述笔画数据对应的所述机器人状态变量列表。在上述技术方案中,根据图像的笔画数据得到机器人状态变量列表,便于机器人执行绘画动作。进一步,所述路径规划模块包括:路径规划单元,用于调用预先配置好的机器人运动规划库,对所述机器人状态变量列表中每个机器人状态变量进行运动路径规划,得到每个机器人状态变量对应的运动消息;消息序列生成单元,用于根据每个机器人状态变量对应的运动消息,生成机器人运动消息序列。在上述技术方案中,根据机器人状态变量列表和运动规划库,得到机器人运动消息序列,以便机器人根据运动消息序列执行绘画,完成对用户绘画的模仿。通过本发明提供的一种基于机器视觉的绘图方法及系统,能够带来以下有益效果:通过采集用户所绘画的内容、提取笔画数据后绘制,让机器人实时分析和模仿,从而实现个性化的笔迹模仿,具有更强的交互性。附图说明下面将以明确易懂的方式,结合附图说明优选实施方式,对一种基于机器视觉的绘图方法及系统的上述特性、技术特征、优点及其实现方式予以进一步说明。图1是本发明的一种基于机器视觉的绘图方法的一个实施例的流程图;图2是本发明的一种基于机器视觉的绘图方法的另一个实施例的流程图;图3是本发明的一种基于机器视觉的绘图方法的另一个实施例的流程图;图4是本发明的一种基于机器视觉的绘图方法的另一个实施例的流程图;图5是本发明的一种基于机器视觉的绘图系统的一个实施例的结构示意图;图6是本发明的一种基于机器视觉的绘图系统的另一个实施例的结构示意图;图7是本发明的一种基于机器视觉的绘图系统的另一个实施例的结构示意图;图8是本发明的一种基于机器视觉的绘图系统的另一个实施例的结构示意图;图9是图3、图7对应实施例中绘图板上的待绘制内容的结构示意图;图10是图3、图7对应实施例中一个像素点与其八个参考像素点的结构示意图;图11是图3、图7对应实施例中一个像素点与其参考像素组的结构示意图。附图标号说明:100.图像采集模块,200.笔画提取模块,300.状态变量生成模块,400.路径规划模块,500.绘图模块,600.图像校准模块,210.灰度化单元,220.二值化单元,230.骨架提取单元,240.边缘检测单元,250.笔画提取单元,260.校准单元,310.运动轨迹数据生成单元,320.运动学解算单元,330.状态变量列表生成单元,410.路径规划单元,420.消息序列生成单元,1.定位角,2.简笔画,3.汉字,4.绘图板。具体实施方式为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对照附图说明本发明的具体实施方式。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图,并获得其他的实施方式。为使图面简洁,各图中只示意性地表示出了与本发明相关的部分,它们并不代表其作为产品的实际结构。另外,以使图面简洁便于理解,在有些图中具有相同结构或功能的部件,仅示意性地绘示了其中的一个,或仅标出了其中的一个。在本文中,“一个”不仅表示“仅此一个”,也可以表示“多于一个”的情形。在本发明的一个实施例中,如图1所示,一种基于机器视觉的绘图方法,包括:步骤s100采集待绘制内容的原始静态图像。具体的,待绘制内容是指用户在绘图板上所绘制的内容,包括汉字和/或简笔画。通过安装在机器人上的摄像头采集待绘制内容,得到待绘制内容的原始静态图像。步骤s200对所述原始静态图像进行处理,提取所述原始静态图像的笔画数据。具体的,对原始静态图像进行处理,比如,先对图像灰度化、二值化,再对二值化的图像提取骨架,从骨架中检测出所有的轮廓,并按笔画形式保存,从而得到原始静态图像的笔画数据。所述笔画数据可能仅有一个笔画,比如用户画个圆,一个圆只有一笔;也可能有多个笔画,比如写个汉字“言”,有5个笔画。步骤s300根据所述原始静态图像的笔画数据,得到对应的机器人状态变量列表。具体的,根据笔画数据,生成机器人的运动轨迹数据,然后进行运动学解算并最终生成机器人状态变量列表。步骤s400根据所述机器人状态变量列表,进行运动路径规划,生成运动消息序列。具体的,根据生成的机器人状态变量列表,进行运动路径规划,生成可以供机器人执行的运动消息序列。步骤s500根据所述运动消息序列,执行绘图动作。具体的,根据运动消息序列执行画图动作,从而完全模仿用户的笔迹和风格完成所绘制的内容。区别于现有技术,本发明的基于机器视觉的绘图方法,在采集待绘制内容的原始静态图像后,利用图像处理技术提取笔画数据、从而得到状态变量列表,再进行运动规划生成运动消息序列,并执行该消息序列来完成绘图动作;由于是从被绘制内容中提取其笔画来实现绘制,因此既不需要预置标准字库、又可以实现对具有笔画的简笔图进行绘制,从而实现了个性化的笔迹模仿,提高了绘制速度,具有更强的交互性和实时性。在本发明的另一个实施例中,如图2所示,在前一个实施例基础上,所述步骤s200用以下步骤替代:步骤s210对所述原始静态图像进行处理,得到对应的灰度图。具体的,对原始静态图像进行处理,将原始静态图像由彩图转换成灰度图。比如,利用图像处理库opencv的函数实现灰度图的转换。步骤s220对所述灰度图进行阈值处理,得到二值化的图像。具体的,将灰度图二值化。比如将阈值设为100,遍历所述灰度图中的每个像素,当像素值低于阈值时,设为背景值,比如0;当像素值高于阈值时,设为前景值,比如255。通过图像的二值化可以去除图像中的噪点,并将用户所绘制的内容的像素值统一,便于提高骨架提取、边缘检测的准确度。步骤s230提取所述二值化的图像的骨架图像。具体的,图像的骨架提取是利用一定的算法将图像中用户绘制的内容的边缘无用像素点删除,只保留所绘制内容的骨架部分。所述骨架图像是单像素连通图像的集合。步骤s240根据所述骨架图像,得到对应的轮廓信息。具体的,利用图像处理库opencv实现边缘检测,从提取出的骨架图像中检测出所有的轮廓。步骤s250根据所述轮廓信息,提取所述原始静态图像的笔画数据。具体的,对所有的轮廓及每条轮廓对应的轮廓点,按照笔画的形式(包括笔画号和对应的笔画点)进行保存,笔画号对应于轮廓,笔画点对应于轮廓点,从而得到所述二值化的图像的笔画数据。这里的一条笔画是指单像素且连续的线段,它可以是直线段、曲线段、某闭合区域的边界线或独立的点等,将所有笔画按照位置组合起来则构成了用户所绘内容的整体轮廓。在本实施例中,通过剔除冗余的像素点,提取原始静态图像的轮廓信息,得到笔画数据,既可以避免图像模糊,又可以减少笔画数量,提高绘制速度。在本发明的另一个实施例中,如图3所示,在前一个实施例基础上,所述步骤s210用步骤s211-步骤s212替代,所述步骤s230用步骤s231替代,所述步骤s250用步骤s251-步骤s252替代。所述步骤s210包括:步骤s211根据预设的定位块对所述原始静态图像进行校准,得到校准后的静态图像。具体的,本实施例允许摄像头对绘图板有一定角度的倾斜,无需完全垂直于绘图板平面。通过对所拍摄的原始静态图像进行校准,从而不影响后续提取内容的精度。在绘图板上预设定位块,比如用两个长方形块构成一个定位角,如图9所示,在绘图板4上设置四个定位角1,所述四个定位角1的详细尺寸和间距预先已知。根据所拍摄图片中的四个定位角1的尺寸、间距,和拍摄前四个定位角1的尺寸、间距,可以得出四个定位角1的形变,根据该形变对所拍摄图像进行校准,从而得到更准确的图像。如果摄像头正对绘图板,与绘图板成90度拍摄,得到的原始静态图像没有因拍摄引入图像变形,则不需要对原始静态图像进行校准。步骤s212对所述校准后的静态图像进行灰度处理,得到对应的灰度图。具体的,将校准后的静态图像由彩图转换成灰度图。所述步骤s230包括:步骤s231遍历所述二值化的图像中的每个像素点,获取单像素点或一系列单像素连接而成的线段、曲线段或封闭图形的轮廓线作为骨架图像,所述单像素点是非单像素连接图像的中间像素点。具体的,对二值化的图像进行图像的骨架提取,骨架提取是利用一定的算法将图像中用户绘制的内容的边缘无用像素点删除,只保留所绘制内容的骨架部分。一种实现方法为,初始化迭代次数,将二值化的图像作为待处理图像;遍历待处理图像中所有的前景点,对符合预设的第一剔除条件的前景点进行标记,当遍历完毕后,将标记的前景点剔除,得到第一次处理后的图像;遍历第一次处理后的图像中所有的前景点,对符合预设的第二剔除条件的前景点进行标记,当遍历完毕后,将标记的前景点剔除,得到第二次处理后的图像,这算完成一次迭代;更新迭代次数;当迭代次数小于预设最大迭代次数时,将第二次处理后的图像作为待处理图像,继续前述的剔除的动作,开始一次新的迭代;通过多轮迭代,由外及内,逐步删除边缘无用像素点;当迭代次数等于预设最大迭代次数时,将处理后图像中剩下的前景点,即构成该二值化的图像的骨架图像。这些剩下的前景点,可能是孤立的单像素点,或由一系列单像素连接而成的线段、曲线段或封闭图形等的轮廓线,这些单像素点是原来非单像素连接图像的中间像素点。示例:首先将原始静态图像转换成灰度图,再将灰度图二值化。比如将阈值设为100,遍历所述灰度图中的每个像素,当像素值低于阈值时,设为背景值,比如0;当像素值高于阈值时,设为前景值,比如1;如此,得到二值化的图像。在二值化的图像中,如果像素点的值为0,表示是背景点;如果为1,表示是前景点。每个像素点周围有八个参考像素点,如图10所示,分别位于所述像素点的上位(p2)、下位(p6)、左位(p8)、右位(p4)、左上位(p9)、左下位(p7)、右上位(p3)、右下位(p5);如果所述像素点处于边界,其周围的八个参考像素点在图中不会都呈现,未呈现的参考像素点的值按0处理。在前景点中,如果其周围的八个参考像素点都是背景点,则本像素点为孤立点;如果其周围的八个参考像素点中只有1个是前景点,则本像素点为端点;如果其周围的八个参考像素点中只有1个或2个是背景点,则本像素点为内点。第一条件:所述像素点为非孤立点且非端点且非内点;第二条件:所述像素点的八个参考像素点中,只存在一组参考像素组;所述参考像素组为相邻两个参考像素点,且按顺时针方向数,所述相邻两个参考像素点的值分别为背景值和前景值。如图11所示,以中心像素点为核心,其周围的八个参考像素点中,按顺时针方向数,存在两组参考像素组,其结果是0、1,所以该中心像素点不满足第二条件。第三条件,如图10所示,如果p2、p4、p6像素点中至少有一个是背景点,且p4、p6、p2像素点中至少有一个是背景点,则p1像素点满足第三条件;第四条件,如图10所示,如果p2、p4、p8像素点中至少有一个是背景点,且p2、p6、p8像素点中至少有一个是背景点,则p1像素点满足第四条件;同时满足第一条件、第二条件和第三条件的前景点,即为符合预设的第一剔除条件的像素点;同时满足第一条件、第二条件和第四条件的前景点,即为符合预设的第二剔除条件的像素点。将二值化的图像作为待处理图像,遍历待处理图像中的所有前景点,对符合预设的第一剔除条件的像素点进行标记,当遍历完毕后,将标记的像素点剔除,得到第一次处理后的图像;遍历第一次处理后的图像中所有的前景点,对符合预设的第二剔除条件的像素点进行标记,当遍历完毕后,将标记的像素点剔除,得到第二次处理后的图像。剔除的含义是,将该像素点的值由1变成0,即由前景点变成背景点。这算进行了一次迭代。迭代次数加1,得到更新后的迭代次数。当更新后的迭代次数小于预设最大迭代次数时,将第二次处理后的图像作为待处理图像,再次遍历待处理图像中的所有前景点,剔除所有符合预设的第一剔除条件的像素点,以及剔除所有符合预设的第二剔除条件的像素点。如此循环,直至更新后的迭代次数等于预设最大迭代次数。此时,处理后图像中剩下的前景点即构成二值化的图像的骨架图像。预设最大迭代次数,依据经验设置,比如n=10。通过多轮迭代删除无用的像素,保留骨架像素点,实现图像的骨架提取。所述步骤s250包括:步骤s251遍历所述轮廓信息,剔除所述轮廓信息中各轮廓之间重复的轮廓线。步骤s252将剩下的各轮廓分别按照笔画的形式保存,得到所述原始静态图像的笔画数据。具体的,从提取的骨架图像中检测出所有的轮廓。遍历所有的轮廓,根据轮廓点位置重合度剔除重复轮廓线,如图9所示的简笔画2,小鸭子为例,小鸭子的脚部存在2条轮廓,这2条轮廓存在交叠,所以存在2条重复的轮廓线,删除1条即可。将剩余的轮廓按照笔画的形式(包括笔画号和对应的笔画点)进行保存,笔画号对应于轮廓,笔画点对应于轮廓点,从而完成笔画数据的提取。示例,如图9所示,绘图板4上的待绘制的汉字3,“言”为例,经过笔画数据提取后可以得到的笔画数量是5个,则笔画号为1~5,每个笔画又包含若干个笔画点,每个笔画点都对应一个平面坐标值,具体数据如下表1所示:表1笔画号对应“言”字部分笔画点数量笔画点坐标(x,y)1点“丶”173个(264,122)(265,122)…(319,150)2横“一”754个(420,209)(419,210)…(119,232)3横“一”308个(372,272)(371,273)…(226,282)4横“一”324个(376,334)(375,335)…(220,345)5口“口”575个(348,397)(347,398)…(210,401)以笔画1为例,它代表的是“言”字最上面的点“丶”,这个点共有173个笔画点,每个笔画点都对应一组平面坐标的值(即此笔画包含173个坐标值),每个笔画点实际上都是一个像素点,因此每个笔画提取到的笔画点的数目是由图片的像素决定的,即同样一个笔画,在像素越多的图片中提取到的笔画点也越多。如图9所示,绘图板4上的待绘制的简笔画2,小鸭子为例,经过笔画数据提取后可以得到的笔画数量是9个,则笔画号为1~9,每个笔画又包含若干个笔画点,每个笔画点都对应一个平面坐标值,具体数据如下表2所示:表2笔画号对应“小鸭子”部位笔画点数量笔画点坐标(x,y)1脚部(前)393(312,534)(313,533)…(195,554)2脚部(后)455(422,520)(423、519)…(297,599)3躯干部1157(345,250)(346,249)…(641,343)4翅膀部614(349,276)(348,277)…(506,353)5颈部298(212,251)(213,250)…(131,319)6头部625(182,30)(183,29)…(285,75)7嘴部362(358,70)(359,69)…(267,166)8眼部38(248,86)(249,86)…(251,101)9鼻孔(嘴上的点)12(305,91)(305,92)…(304,96)以笔画1为例,它代表简笔画“小鸭子”的前面的脚部的部分,共包含393个笔画点,同样对应有393组平面坐标点,这些坐标点共同组成了“小鸭子”的前脚部。在本发明的另一个实施例中,如图4所示,一种基于机器视觉的绘图方法,包括:步骤s100采集待绘制内容的原始静态图像。步骤s211根据预设的定位块对所述原始静态图像进行校准,得到校准后的静态图像。步骤s212对所述校准后的静态图像进行灰度处理,得到对应的灰度图。步骤s220对所述灰度图进行阈值处理,得到二值化的图像。步骤s231遍历所述二值化的图像中的每个像素点,获取单像素点或一系列单像素连接而成的线段、曲线段或封闭图形的轮廓线作为骨架图像,所述单像素点是非单像素连接图像的中间像素点。步骤s240根据所述骨架图像,得到对应的轮廓信息。步骤s251遍历所述轮廓信息,剔除所述轮廓信息中各轮廓之间重复的轮廓线。步骤s2521将剩下的各轮廓分别按照笔画的形式保存,并对每个笔画按照预设的精度进行裁剪,得到所述原始静态图像的笔画数据。具体的,由于目前的摄像头的分辨率一般较高,因此各个笔画中的笔画点数量较多,而无需如此多的笔画点即可完成机器人绘图,因此可以对笔画进行裁剪处理。实现方法为:遍历上一步骤保存的笔画,每个笔画按照预设的精度对数据进行裁剪,例如精度设置为0.5mm,在0.5mm内只保留两个端点的数据,对各个笔画内的笔画点按如此精度进行裁剪,将修剪完成的数据作为最后的笔画数据。精度设置越高,对应的精度值越小,则每个笔画保留的笔画点越多,对用户所绘制的内容的还原度越高。通过设置合理的精度进行笔画裁剪处理,在保证模仿精度的同时剔除一些冗余数据,可以减小数据量,减小本方案的运算量提高绘图速度。步骤s310根据所述原始静态图像的笔画数据,生成对应的机器人的运动轨迹数据。具体的,对原始静态图像的笔画数据进行数据整理,得到运动轨迹数据。每个笔画按照新的数据结构体进行保存,将这些数据保存成为链表,即得到运动轨迹数据。新的数据结构体为:其中,motion_number对应于轨迹号(源自笔画号),point_number对应于该轨迹号内包含的轨迹点(源自笔画点),point是一个二维数组,保存的是每个轨迹点的坐标值,n的值代表轨迹点的数量。步骤s320分别对所述机器人的运动轨迹数据中所有轨迹号各自对应的每个轨迹点进行运动学解算,得到每个轨迹点对应的机器人状态变量。具体的,遍历每个轨迹号的每个轨迹点,对每个轨迹点进行运动学解算,得到该轨迹点对应的机器人状态变量。运动学解算可以采用且不限于几何法、代数法、解析法、智能复合算法等,不同的机器人可以采用相应合适的算法进行运动学解算。保存每个轨迹点对应的机器人状态变量。以一个五自由度(有五个关节,即五个转轴)的机器人为例,每一个轨迹点经过运动学解算即可得到一组机器人状态变量,此机器人状态变量就是一组包含五个角度值的数据,每个角度值对应机器人的一个关节,机器人五个关节按照所述五个角度值运动后就可以到达一个对应的轨迹点。步骤s330根据所有轨迹点对应的所述机器人状态变量,得到所述笔画数据对应的所述机器人状态变量列表。具体的,将每个轨迹点对应的机器人状态变量进行保存,最后整理成机器人状态变量列表。其中机器人状态列表中的每一个数据都是一个数据结构体,如下所示:其中,state_number代表机器人的状态变量号,对应于motion_number,一般有多少个笔画就对应有多少个状态变量号;point_number代表该状态变量号下面包含的状态点数量,一般与运动轨迹列表的point_number相等;state代表机器人的状态变量值,为j行k列的数组,k列代机器人表有k个关节,j代表机器人状态变量的数量,对应于运动轨迹列表的轨迹点数量n,即二者值相等。步骤s410调用预先配置好的机器人运动规划库,对所述机器人状态变量列表中每个机器人状态变量进行运动路径规划,得到每个机器人状态变量对应的运动消息。步骤s420根据每个机器人状态变量对应的运动消息,生成机器人运动消息序列。步骤s500根据所述运动消息序列,执行绘图动作。具体的,机器人运动规划是指根据机器人不同的状态变量,生成由一个状态变量到另一个状态状态变量的运动路径。这一运动路径需要满足一定的外部约束,比如避障、路径最近、耗能最小等。本实施例提出的机器人运动规划方法是基于ros(机器人操作系统)完成的,具体步骤如下:步骤1:机器人ros系统建模。ros系统建模既可以采用纯编程的方式进行也可以导入机器人原有三维模型并在其基础上进行编程,ros建模采用的编程语言为脚本类语言,目前支持urdf(unifiedrobotdescriptionformat,统一机器人描述格式)和xacro(xmlmacros,一种xml宏语言)两种。进一步,ros系统建模的过程就是明确机器人的几何尺寸、关节类型、运动范围、避障条件等特征的过程,最终生成机器人的模型描述文件。步骤2:ros系统moveit模块配置。moveit是ros系统的一个模块,它集成了多个开源的运动规划库,利用这个模块的框架可以实现机器人的运动规划和仿真等。进一步,配置的过程为利用setupassistanttool工具,加载上一步骤中生成的机器人的模型描述文件,然后配置运动规划群、碰撞检测、初始状态、运动规划库等信息,最后生成ros配置文件包。步骤3:读取状态变量列表。调用ros系统库编写moveit接口程序,逐一读取机器人状态变量列表中的每个状态变量值。步骤4:运动规划库调用。针对每一个状态变量值调用预先配置好的机器人运动规划库,进行状态变量的运动规划。机器人的各个状态变量号下面对应的状态变量值每读取一个,都会调用一次运动规划库,生成一组运动消息。步骤5:机器人运动消息序列生成。将上一步骤中生成的运动消息进行逐一保存,生成机器人运动消息序列。机器人的运动消息序列就是机器人各个关节的运动量,可以直接发送给机器人驱动模块执行。步骤6:运动消息序列发送。将上一步骤中生成的机器人运动消息序列进行打包并发送给机器人驱动模块,机器人驱动模块接收到运动消息后执行即可。二者通信方式既可以采用有线的方式也可以采用无线的方式进行。在本发明的另一个实施例中,如图5所示,一种基于机器视觉的绘图系统,包括:图像采集模块100,用于采集待绘制内容的原始静态图像。具体的,待绘制内容是指用户在绘图板上所绘制的内容,包括汉字和/或简笔画。图像采集模块通过安装在机器人上的摄像头采集待绘制内容,得到待绘制内容的原始静态图像。笔画提取模块200,与所述图像采集模块100电连接,用于对所述原始静态图像进行处理,提取所述原始静态图像的笔画数据。具体的,对原始静态图像进行处理,比如,先对图像灰度化、二值化,再对二值化的图像提取骨架,从骨架中检测出所有的轮廓,并按笔画形式保存,从而得到原始静态图像的笔画数据。所述笔画数据可能仅有一个笔画,比如用户画个圆,一个圆只有一笔;也可能有多个笔画,比如写个汉字“言”,有5个笔画。状态变量生成模块300,与所述笔画提取模块200电连接,用于根据所述原始静态图像的笔画数据,得到对应的机器人状态变量列表。具体的,根据笔画数据,生成机器人的运动轨迹数据,然后进行运动学解算并最终生成机器人状态变量列表。路径规划模块400,与所述状态变量生成模块300电连接,用于根据所述机器人状态变量列表,进行运动路径规划,生成运动消息序列。具体的,根据生成的机器人状态变量列表,进行运动路径规划,生成可以供机器人执行的运动消息序列。绘图模块500,与所述路径规划模块400电连接,用于根据所述运动消息序列,执行绘图动作。具体的,根据运动消息序列执行画图动作,从而完全模仿用户的笔迹和风格完成所绘制的内容。区别于现有技术,本发明的基于机器视觉的绘图方法,在采集待绘制内容的原始静态图像后,利用图像处理技术提取笔画数据、从而得到状态变量列表,再进行运动规划生成运动消息序列,并执行该消息序列来完成绘图动作;由于是从被绘制内容中提取其笔画来实现绘制,因此既不需要预置标准字库、又可以实现对具有笔画的简笔图进行绘制,从而实现了个性化的笔迹模仿,提高了绘制速度,具有更强的交互性和实时性。在本发明的另一个实施例中,如图6所示,在前一个实施例基础上,对图5对应实施例的笔画提取模块200做了细化:所述笔画提取模块200包括:灰度化单元210,用于对所述原始静态图像进行处理,得到对应的灰度图;具体的,对原始静态图像进行处理,将原始静态图像由彩图转换成灰度图。比如,利用图像处理库opencv的函数实现灰度图的转换。二值化单元220,用于对所述灰度图进行阈值处理,得到二值化的图像;具体的,将灰度图二值化。比如将阈值设为100,遍历所述灰度图中的每个像素,当像素值低于阈值时,设为背景值,比如0;当像素值高于阈值时,设为前景值,比如255。通过图像的二值化可以去除图像中的噪点,并将用户所绘制的内容的像素值统一,便于提高骨架提取、边缘检测的准确度。骨架提取单元230,用于提取所述二值化的图像的骨架图像。具体的,图像的骨架提取是利用一定的算法将图像中用户绘制的内容的边缘无用像素点删除,只保留所绘制内容的骨架部分。所述骨架图像是单像素连通图像的集合。边缘检测单元240,用于根据所述骨架图像,得到对应的轮廓信息。具体的,利用图像处理库opencv实现边缘检测,从提取出的骨架图像中检测出所有的轮廓。笔画提取单元250,用于根据所述轮廓信息,提取所述原始静态图像的笔画数据。具体的,对所有的轮廓及每条轮廓对应的轮廓点,按照笔画的形式(包括笔画号和对应的笔画点)进行保存,笔画号对应于轮廓,笔画点对应于轮廓点,从而得到所述二值化的图像的笔画数据。这里的一条笔画是指单像素且连续的线段,它可以是直线段、曲线段、某闭合区域的边界线或独立的点等,将所有笔画按照位置组合起来则构成了用户所绘内容的整体轮廓。在本实施例中,通过剔除冗余的像素点,提取原始静态图像的轮廓信息,得到笔画数据,既可以避免图像模糊,又可以减少笔画数量,提高绘制速度。在本发明的另一个实施例中,如图7所示,在前一个实施例基础上,对图6对应实施例的笔画提取模块200做了进一步的细化:所述笔画提取模块200还包括:校准单元260,用于根据预设的定位块对所述原始静态图像进行校准,得到校准后的静态图像。具体的,本实施例允许摄像头对绘图板有一定角度的倾斜,无需完全垂直于绘图板平面。通过对所拍摄的原始静态图像进行校准,从而不影响后续提取内容的精度。在绘图板上预设定位块,比如用两个长方形块构成一个定位角,如图9所示,在绘图板4上设置四个定位角1,所述四个定位角1的详细尺寸和间距预先已知。根据所拍摄图片中的四个定位角1的尺寸、间距,和拍摄前四个定位角1的尺寸、间距,可以得出四个定位角1的形变,根据该形变对所拍摄图像进行校准,从而得到更准确的图像。如果摄像头正对绘图板,与绘图板成90度拍摄,得到的原始静态图像没有因拍摄引入图像变形,则不需要对原始静态图像进行校准。灰度化单元210,用于对所述校准后的静态图像进行灰度处理,得到对应的灰度图。具体的,将校准后的静态图像由彩图转换成灰度图。骨架提取单元230,用于提取所述二值化的图像的骨架图像,具体为:所述骨架提取单元,遍历所述二值化的图像中的每个像素点,获取单像素点或一系列单像素连接而成的线段、曲线段或封闭图形的轮廓线作为骨架图像,所述单像素点是非单像素连接图像的中间像素点。具体的,对二值化的图像进行图像的骨架提取,骨架提取是利用一定的算法将图像中用户绘制的内容的边缘无用像素点删除,只保留所绘制内容的骨架部分。一种实现方法为,初始化迭代次数,将二值化的图像作为待处理图像;遍历待处理图像中所有的前景点,对符合预设的第一剔除条件的前景点进行标记,当遍历完毕后,将标记的前景点剔除,得到第一次处理后的图像;遍历第一次处理后的图像中所有的前景点,对符合预设的第二剔除条件的前景点进行标记,当遍历完毕后,将标记的前景点剔除,得到第二次处理后的图像,这算完成一次迭代;更新迭代次数;当迭代次数小于预设最大迭代次数时,将第二次处理后的图像作为待处理图像,继续前述的剔除的动作,开始一次新的迭代;通过多轮迭代,由外及内,逐步删除边缘无用像素点;当迭代次数等于预设最大迭代次数时,将处理后图像中剩下的前景点,即构成该二值化的图像的骨架图像。这些剩下的前景点,可能是孤立的单像素点,或由一系列单像素连接而成的线段、曲线段或封闭图形等的轮廓线,这些单像素点是原来非单像素连接图像的中间像素点。示例:首先将原始静态图像转换成灰度图,再将灰度图二值化。比如将阈值设为100,遍历所述灰度图中的每个像素,当像素值低于阈值时,设为背景值,比如0;当像素值高于阈值时,设为前景值,比如1;如此,得到二值化的图像。在二值化的图像中,如果像素点的值为0,表示是背景点;如果为1,表示是前景点。每个像素点周围有八个参考像素点,如图10所示,分别位于所述像素点的上位(p2)、下位(p6)、左位(p8)、右位(p4)、左上位(p9)、左下位(p7)、右上位(p3)、右下位(p5);如果所述像素点处于边界,其周围的八个参考像素点在图中不会都呈现,未呈现的参考像素点的值按0处理。在前景点中,如果其周围的八个参考像素点都是背景点,则本像素点为孤立点;如果其周围的八个参考像素点中只有1个是前景点,则本像素点为端点;如果其周围的八个参考像素点中只有1个或2个是背景点,则本像素点为内点。第一条件:所述像素点为非孤立点且非端点且非内点;第二条件:所述像素点的八个参考像素点中,只存在一组参考像素组;所述参考像素组为相邻两个参考像素点,且按顺时针方向数,所述相邻两个参考像素点的值分别为背景值和前景值。如图11所示,以中心像素点为核心,其周围的八个参考像素点中,按顺时针方向数,存在两组参考像素组,其结果是0、1,所以该中心像素点不满足第二条件。第三条件,如图10所示,如果p2、p4、p6像素点中至少有一个是背景点,且p4、p6、p8像素点中至少有一个是背景点,则p1像素点满足第三条件;第四条件,如图10所示,如果p2、p4、p8像素点中至少有一个是背景点,且p2、p6、p8像素点中至少有一个是背景点,则p1像素点满足第四条件;同时满足第一条件、第二条件和第三条件的前景点,即为符合预设的第一剔除条件的像素点;同时满足第一条件、第二条件和第四条件的前景点,即为符合预设的第二剔除条件的像素点。将二值化的图像作为待处理图像,遍历待处理图像中的所有前景点,对符合预设的第一剔除条件的像素点进行标记,当遍历完毕后,将标记的像素点剔除,得到第一次处理后的图像;遍历第一次处理后的图像中所有的前景点,对符合预设的第二剔除条件的像素点进行标记,当遍历完毕后,将标记的像素点剔除,得到第二次处理后的图像。剔除的含义是,将该像素点的值由1变成0,即由前景点变成背景点。这算进行了一次迭代。迭代次数加1,得到更新后的迭代次数。当更新后的迭代次数小于预设最大迭代次数时,将第二次处理后的图像作为待处理图像,再次遍历待处理图像中的所有前景点,剔除所有符合预设的第一剔除条件的像素点,以及剔除所有符合预设的第二剔除条件的像素点。如此循环,直至更新后的迭代次数等于预设最大迭代次数。此时,处理后图像中剩下的前景点即构成二值化的图像的骨架图像。预设最大迭代次数,依据经验设置,比如n=10。通过多轮迭代删除无用的像素,保留骨架像素点,实现图像的骨架提取。笔画提取单元250,用于根据所述轮廓信息,提取所述原始静态图像的笔画数据,具体为:用于遍历所述轮廓信息,剔除所述轮廓信息中各轮廓之间重复的轮廓线;以及,将剩下的各轮廓分别按照笔画的形式保存,得到所述原始静态图像的笔画数据。具体的,从提取的骨架图像中检测出所有的轮廓。遍历所有的轮廓,根据轮廓点位置重合度剔除重复轮廓线,如图9所示的简笔画2,小鸭子为例,小鸭子的脚部存在2条轮廓,这2条轮廓存在交叠,所以存在2条重复的轮廓线,删除1条即可。将剩余的轮廓按照笔画的形式(包括笔画号和对应的笔画点)进行保存,笔画号对应于轮廓,笔画点对应于轮廓点,从而完成笔画数据的提取。示例,如图9所示,绘图板4上的待绘制的汉字3,“言”为例,经过笔画数据提取后可以得到的笔画数量是5个,则笔画号为1~5,每个笔画又包含若干个笔画点,每个笔画点都对应一个平面坐标值,具体数据如下表1所示:表1笔画号对应“言”字部分笔画点数量笔画点坐标(x,y)1点“丶”173个(264,122)(265,122)…(319,150)2横“一”754个(420,209)(419,210)…(119,232)3横“一”308个(372,272)(371,273)…(226,282)4横“一”324个(376,334)(375,335)…(220,345)5口“口”575个(348,397)(347,398)…(210,401)以笔画1为例,它代表的是“言”字最上面的点“丶”,这个点共有173个笔画点,每个笔画点都对应一组平面坐标的值(即此笔画包含173个坐标值),每个笔画点实际上都是一个像素点,因此每个笔画提取到的笔画点的数目是由图片的像素决定的,即同样一个笔画,在像素越多的图片中提取到的笔画点也越多。如图9所示,绘图板4上的待绘制的简笔画2,小鸭子为例,经过笔画数据提取后可以得到的笔画数量是9个,则笔画号为1~9,每个笔画又包含若干个笔画点,每个笔画点都对应一个平面坐标值,具体数据如下表2所示:表2以笔画1为例,它代表简笔画“小鸭子”的前面的脚部的部分,共包含393个笔画点,同样对应有393组平面坐标点,这些坐标点共同组成了“小鸭子”的前脚部。在本发明的另一个实施例中,如图8所示,一种基于机器视觉的绘图系统,包括:图像采集模块100,用于采集待绘制内容的原始静态图像。笔画提取模块200,用于对所述原始静态图像进行处理,提取所述原始静态图像的笔画数据,包括:校准单元260,用于根据预设的定位块对所述原始静态图像进行校准,得到校准后的静态图像;灰度化单元210,用于对所述校准后的静态图像进行灰度处理,得到对应的灰度图;二值化单元220,用于对所述灰度图进行阈值处理,得到二值化的图像;骨架提取单元230,用于提取所述二值化的图像的骨架图像,具体为:所述骨架提取单元,遍历所述二值化的图像中的每个像素点,获取单像素点或一系列单像素连接而成的线段、曲线段或封闭图形的轮廓线作为骨架图像,所述单像素点是非单像素连接图像的中间像素点;边缘检测单元240,用于根据所述骨架图像,得到对应的轮廓信息;笔画提取单元250,用于根据所述轮廓信息,提取所述原始静态图像的笔画数据,具体为:用于遍历所述轮廓信息,剔除所述轮廓信息中各轮廓之间重复的轮廓线;以及,将剩下的各轮廓分别按照笔画的形式保存,并对每个笔画按照预设的精度进行裁剪,得到所述原始静态图像的笔画数据。具体的,由于目前的摄像头的分辨率一般较高,因此各个笔画中的笔画点数量较多,而无需如此多的笔画点即可完成机器人绘图,因此可以对笔画进行裁剪处理。实现方法为:遍历上一步骤保存的笔画,每个笔画按照预设的精度对数据进行裁剪,例如精度设置为0.5mm,在0.5mm内只保留两个端点的数据,对各个笔画内的笔画点按如此精度进行裁剪,将修剪完成的数据作为最后的笔画数据。精度设置越高,对应的精度值越小,则每个笔画保留的笔画点越多,对用户所绘制的内容的还原度越高。通过设置合理的精度进行笔画裁剪处理,在保证模仿精度的同时剔除一些冗余数据,可以减小数据量,减小本方案的运算量提高绘图速度。状态变量生成模块300,用于根据所述原始静态图像的笔画数据,得到对应的机器人状态变量列表,包括:运动轨迹数据生成单元310,用于根据所述原始静态图像的笔画数据,生成对应的机器人的运动轨迹数据。具体的,对原始静态图像的笔画数据进行数据整理,得到运动轨迹数据。每个笔画按照新的数据结构体进行保存,将这些数据保存成为链表,即得到运动轨迹数据。新的数据结构体为:其中,motion_number对应于轨迹号(源自笔画号),point_number对应于该轨迹号内包含的轨迹点(源自笔画点),point是一个二维数组,保存的是每个轨迹点的坐标值,n的值代表轨迹点的数量。运动学解算单元320,用于分别对所述机器人的运动轨迹数据中所有轨迹号各自对应的每个轨迹点进行运动学解算,得到每个轨迹点对应的机器人状态变量。具体的,遍历每个轨迹号的每个轨迹点,对每个轨迹点进行运动学解算,得到该轨迹点对应的机器人状态变量。运动学解算可以采用且不限于几何法、代数法、解析法、智能复合算法等,不同的机器人可以采用相应合适的算法进行运动学解算。保存每个轨迹点对应的机器人状态变量。以一个五自由度(有五个关节,即五个转轴)的机器人为例,每一个轨迹点经过运动学解算即可得到一组机器人状态变量,此机器人状态变量就是一组包含五个角度值的数据,每个角度值对应机器人的一个关节,机器人五个关节按照所述五个角度值运动后就可以到达一个对应的轨迹点。状态变量列表生成单元330,用于根据所有轨迹点对应的所述机器人状态变量,得到所述笔画数据对应的所述机器人状态变量列表;路径规划模块400,用于根据所述机器人状态变量列表,进行运动路径规划,生成运动消息序列,包括:路径规划单元410,用于调用预先配置好的机器人运动规划库,对所述机器人状态变量列表中每个机器人状态变量进行运动路径规划,得到每个机器人状态变量对应的运动消息;消息序列生成单元420,用于根据每个机器人状态变量对应的运动消息,生成机器人运动消息序列;绘图模块500,用于根据所述运动消息序列,执行绘图动作。具体的,机器人运动规划是指根据机器人不同的状态变量,生成由一个状态变量到另一个状态状态变量的运动路径。这一运动路径需要满足一定的外部约束,比如避障、路径最近、耗能最小等。本实施例提出的机器人运动规划方法是基于ros(机器人操作系统)完成的,具体步骤如下:步骤1:机器人ros系统建模。ros系统建模既可以采用纯编程的方式进行也可以导入机器人原有三维模型并在其基础上进行编程,ros建模采用的编程语言为脚本类语言,目前支持urdf(unifiedrobotdescriptionformat,统一机器人描述格式)和xacro(xmlmacros,一种xml宏语言)两种。进一步,ros系统建模的过程就是明确机器人的几何尺寸、关节类型、运动范围、避障条件等特征的过程,最终生成机器人的模型描述文件。步骤2:ros系统moveit模块配置。moveit是ros系统的一个模块,它集成了多个开源的运动规划库,利用这个模块的框架可以实现机器人的运动规划和仿真等。进一步,配置的过程为利用setupassistanttool工具,加载上一步骤中生成的机器人的模型描述文件,然后配置运动规划群、碰撞检测、初始状态、运动规划库等信息,最后生成ros配置文件包。步骤3:读取状态变量列表。调用ros系统库编写moveit接口程序,逐一读取机器人状态变量列表中的每个状态变量值。步骤4:运动规划库调用。针对每一个状态变量值调用预先配置好的机器人运动规划库,进行状态变量的运动规划。机器人的各个状态变量号下面对应的状态变量值每读取一个,都会调用一次运动规划库,生成一组运动消息。步骤5:机器人运动消息序列生成。将上一步骤中生成的运动消息进行逐一保存,生成机器人运动消息序列。机器人的运动消息序列就是机器人各个关节的运动量,可以直接发送给机器人驱动模块执行。步骤6:运动消息序列发送。将上一步骤中生成的机器人运动消息序列进行打包并发送给机器人驱动模块,机器人驱动模块接收到运动消息后执行即可。二者通信方式既可以采用有线的方式也可以采用无线的方式进行。应当说明的是,上述实施例均可根据需要自由组合。以上所述仅是本发明的优选实施方式,应当指出,对于本
技术领域
的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1