服装纸样的自动数字化

申请号 CN02820554.5 申请日 2002-09-30 公开(公告)号 CN1575477A 公开(公告)日 2005-02-02
申请人 恩尼格公司; 发明人 石川博;
摘要 本 发明 公开了一种数字化服装纸样(114)的方法。首先,将实物纸样扫描成 光栅图像 。识别光栅图像(102)的特征,例如 亮度 边缘,并且产生数字纸样(106)或一组实物纸样的相关信息,包括实物纸样的形状和尺寸、轮廓线的拐 角 以及在实物纸样上画出的直线和曲线。数字纸样包括轮廓线的明确表示,例如一系列点的坐标,或者某些曲线的描述,例如曲线参数。
权利要求

1、一种数字化形状的方法,所述方法包括以下步骤:
接收代表至少一个形状的至少一个数据,
识别在至少一个数据中的至少一个形状的至少一个轮廓,和
识别在至少一个轮廓上的至少一个拐
2、一种用于数字化形状的系统,所述系统包括:
其中包括有计算机程序的存储装置;以及
处理装置,当执行计算机程序时,构成:
接收代表至少一个形状的至少一个数据,
识别在至少一个数据中的至少一个形状的至少一个轮廓,和
识别在至少一个轮廓上的至少一个拐角。
3、一种软件存储介质,当由处理装置执行时,构成数字化形状,所述 软件存储介质包括:
软件程序,包括:
第一模,当执行时,接收代表至少一个形状的至少一个数据,
第二模块,当执行时,识别在至少一个数据中至少一个形状的至少一个 轮廓,和第三模块,当执行时,识别在至少一个轮廓上的至少一个拐角。

说明书全文

技术领域

发明涉及服装式样的数字化,更具体地讲,涉及通过图像扫描技术实 现服装式样的自动数字化或半自动数字化。

背景技术

通常服装是通过将多片布料缝合在一起制成的。那么,服装的设计主要 由这些布片的形状决定。传统上,用形状和尺寸与布片完全相同的厚纸片记 录确定服装设计的形状。这些形状各异的厚纸片在工业中被称作“纸样”。 构成整个服装的纸样的集合称作式样。给定一种式样,就可以通过简单拷贝 纸样的形状制成布料片,然后,通过将布料缝合在一起制成理想设计的服装。
在产生许多不同服装设计和尺寸的工业环境中,主要的任务是对几百种 甚至更多种式样进行正确地编制和管理。因此,在工业中引入记录和管理服 装设计过程的计算机化。在计算机化的设计管理系统中,每个布片的形状是 以一组曲线和直线存储的,形成数字纸样。通过这种数字纸样,很容易使用 绘图仪在纸片上画出与原物一样大小的形状,甚至可以用具有刀具而不是笔 的专用绘图仪自动裁剪出纸样或布片的形状。
设计的计算机化具有许多优点。当每一片布料的形状和尺寸以数字的形 式记录时,更容易记录和管理大量设计。而且,数字化的设计可以传送到远 距离外的服装制造场所。但是,设计的计算机化的最大优点是容易分级。通 常,在工业环境中,需要生产同一基本设计的几种不同尺寸的服装。用于制 成不同尺寸服装的式样修改被称作分级。在计算机上实现时,分级的过程更 为简便和迅速。
系统的输入和输出是实物形态。当然,输出是制造出来的实际服装。理 论上,除了制造以外,整个过程都可以放在计算机中进行;时装设计人员或 设计师可以在计算机屏幕上设计服装和套装,并将结果发送到工厂,在那里 设计第一次转化为实物形态。但是,至少对于大多数当代的设计师,使用实 物形态更自如和容易,实物形态即厚纸片制成的实物纸样。因此,在过程的 开始,设计师产生式样,即一组实物式样,然后,由使用“数字化仪”描绘 纸样轮廓的“取模人员”将每个纸样数字化为数字形式。
数字化实物纸样的过程是缓慢和费的。典型地,取模人员将纸样固定 在大的数字化仪板上,并通过在轮廓上逐个对准(采用专的指示器)相关 点来描绘纸样的轮廓,并按下一按钮通知数字化仪板定位并记录仪板上的定 位器的位置
Bankart等人的美国专利4,575,628(1986)介绍了纸样扫描仪。然而, 该纸样扫描仪没有被广泛使用的部分原因是其无法自动识别纸样轮廓线上 的拐。纸样的轮廓线是其最重要的特征,并且区分在轮廓线上的点是否是 拐角是非常重要的。也就是说,拐角是轮廓线的形状的最显著的特征,并且 被经常用作分级点。目前正在使用的几乎所有的计算机化的设计管理系统中 都将拐角点与其它点区别对待。因此,在现有技术中,用户或者用数字化仪 板手动地进行数字化,或者使用现有的纸样扫描仪,然后手动地标记拐角。
本发明涉及数字化实物纸样的过程。

发明内容

有鉴于此,本发明的一个目的是提供一种自动数字化服装纸样的方法。 本发明的另一个目的是提供一种自动数字化服装纸样从而所得到的数据包 括纸样的形状信息的方法,纸样的形状信息包括拐角的识别。
图1示出了本发明的过程。首先,将实物纸样(101),即与作为服装 的一部分的布料片的形状相同的纸样扫描成光栅图像(102)。这可以使用 任何一种目前的数字成像技术实现。例如,可以使用在办公室中常见的平板 扫描仪(103)或CCD数码相机(104)。在工业环境中,可以使用大幅面 扫描仪(105)。扫描的结果是实物纸样的光栅图像(102)或数字影印。第 二阶段识别诸如亮度边缘之类的光栅图像的特征并产生数字形式的数字纸 样(106)或实物纸样的一组相关信息。相关信息包括实物纸样的形状和尺 寸,以及在实物纸样上画出的直线和曲线。信息应当以有用的形式数字表示, 也就是说,以容易被机器处理的形式表示。例如,为了控制绘图仪画出纸样 的轮廓线,必须明确地知道在轮廓线上的连续点的坐标。因此,数字纸样应 当包括轮廓线的明确表示。这种明确表示可以是一系列点的坐标,或者诸如 样条参数之类的曲线的某些描述,但显然不是光栅图像。从光栅图像中提取 这些以完全不同的形式表示的信息是一项重要的任务。
阶段1:扫描
第一阶段(107)将实物纸样扫描为光栅图像。这可以使用任何一种当 前的数字成像技术实现。例如,可以使用在办公室中常见的平板扫描仪 (103),或者CCD数码相机(104)。在工业环境中,可以使用大幅面扫 描仪(105)。扫描的结果是光栅图像(102),即,实物纸样的数字影印。
阶段2:识别
给定由第一阶段得到的纸样的光栅图像(102),该方法从光栅图像中 提取相关信息。纸样的最重要的信息是它的轮廓线(108),其它重要特性 包括在纸样上画出的直线和曲线(109),下文中称其为内部曲线。在光栅 图像中出现的轮廓线和内部曲线都作为曲线。因此,本方法识别光栅图像中 的曲线。存在不止一个可能的算法来检测和识别曲线。任何能够可靠地识别 出光栅图像中的曲线的算法都可以用于本发明。
这种算法找出在光栅图像中如曲线一样排列的特征象素。象素所具有的 特征依赖于算法所要寻找的曲线的类型。在背景和纸样纸的颜色已知的情况 下,在纸样的轮廓线上的象素的特征为两种颜色的边界。在内部曲线上的象 素的特征在于它的颜色不同于纸样纸的颜色。虽然其本身的这种简单特征不 够充分,但是它们作为局部标准来缩小曲线的轨迹。找到满足局部标准的一 组候选象素后,算法找出这些象素确定的曲线。
本阶段的结果是一组数据,称为数字纸样。它包括构成轮廓线和内部曲 线的曲线的表示。该表示使得容易计算出曲线上的连续点的坐标。另外,数 字纸样还包括其它诸如识别码、生产日期以及应使用何种织物之类的附带数 据,附带数据可以手动输入到系统中。数字纸样甚至还可以包括原始的光栅 图像,这样,即使第二阶段中出现的错误在以后被发现,也可以利用不同的 参数重新进行识别。
阶段3:手动数据输入(可选)
每个纸样具有某些诸如识别码、生产日期以及使用何种织物之类的附带 数据。这可以由操作人员手动输入。某些附带数据写在实物纸样上。例如, 有时用数字表示的分级信息写在扫描仪上的纸样上。在图1中,(111)所 示的纸样是属于这种情况的例子。白色的箭头表示代表重要信息的手写数 字。虽然它最好能够由机器识别,但是可靠地识别纸样上散布的所有信息是 一个技术难题。代替的方式是,所有这些数据可以由操作人员输入。为了容 易实现,系统可以在计算机屏幕上显示纸样的光栅图像,从而操作人员可以 从屏幕上读取数据。甚至在输入分级信息时可以将图像从显示一个数字的部 分移动到显示另一个数字的部分。
附图说明
图1示出了本发明的过程。
图2a示出了典型的大幅面扫描仪。
图2b示出了旋转组件的放大图。
图2c示出了服装纸样送入扫描仪的情形。
图2d示出了卡在辊子的轴之间的小的服装纸样。
图2e示出了在两个杆上跨接的传送带。
图2f示出了具有传送带的整个扫描仪。
图2g示出了只接触少数几个辊子时的旋转的纸样。
图2h示出了更宽的辊子。
图2i示出了构成长辊筒的整个杆。
图2j示出了在两个杆之间跨过宽传送带的扫描仪的改进。
图2k示出了使用大的透明片和背景片作为一个整体通过扫描仪。
图3示意性地示出了Contours的数据结构。
图4示出了通过位图检测轮廓线的方法的流程图
图5示出了初始化-轮廓的子程序的流程图。
图6示出了收缩子程序的流程图。
图7示出了伸展-收缩子程序的流程图。
图8示出了循环-检查子程序的流程图。
图9示出了不正确的-轮廓子程序的流程图。
图10示出了平滑-曲率子程序的流程图。
图11示出了计算-曲率子程序的流程图。
图12示出了发现-拐角子程序的流程图。

具体实施方式

在此,详细介绍本发明的实施例。本实施例是配备扫描仪的标准PC系 统。硬件配置是可以从计算机设备销售商那里得到的普通的硬件配置,并且 该硬件配置很容易由本领域的技术人员实现。
扫描仪
由扫描仪扫描实物纸样,并发送到PC(110)以位图的格式存储。格式 可以是任何已知的或私有的格式。在下面,我们假设被扫描图像的背景是没 有用作实物纸样(即,与作为服装的一部分的布料片的形状相同的厚纸片) 的颜色的特殊颜色。虽然特殊颜色(黑)不重要,但是黑色几乎从来不用作 实物纸样的纸的颜色。还容易安排使背景以特定的颜色表现出来。图1示出 了实物纸样的典型的扫描位图图像(102)。
大幅面扫描仪
在此,我们讨论为满足扫描服装纸样的需要而改进的大幅面扫描仪。图 2a示出了典型的大幅面扫描仪(105)。它有一组旋转的辊子(201),在支 撑表面(204)上移动纸片(203)(或者用户想要扫描的任何东西)。纸片 (203)要扫描的一面向下放置。从支撑表面(204)的下方,产生光扫描。 辊子通常由泡沫橡胶制成,并且附着在同样旋转的两个杆(202)上。图2b 示出了旋转组件的放大图。在支撑表面(204)的下方是与表面(204)上方 的辊子(201)配合旋转的另一组辊子(205),以利于纸片(203)的平滑 移动。
图2c示出了服装纸样(206)送入扫描仪的情形。当要扫描服装纸样而 不是规则的四方形的纸张时,问题出现了。有些服装纸样太小了,以至于不 能用这种大扫描仪扫描。图2d示出了卡在辊子(201、205)的轴之间的小 的服装纸样(207)。虽然对于这种小的服装纸样可以用诸如办公室常见的 平板扫描仪(103)等较小的扫描仪扫描,但是对所有的纸样使用同一个大 扫描仪扫描则更方便。为了使利用大扫描仪扫描所有纸样成为可能,移动表 面必须时刻与纸样接触。图2e示出了通过在两个杆(202)上跨接的传送带 (208)如何使利用大扫描仪扫描所有纸样成为可能。传送带也由泡沫橡胶 制成。在图2f示出了进行了该项改进的整个扫描仪。
当扫描不规则形状的对象,例如服装纸样时,利用典型的大幅面扫描仪 的另一个问题在于扫描对象(209)可能不稳定。例如,如图2g所示,当纸 样只接触少数几个辊子(201)时,它往往会旋转。用如图2h所示的更宽的 辊子作为辊子(210),甚至如图2i所示使整个杆成为一个长辊子来解决该 问题。
结合这两项改进,图2j示出了在两个杆(202)之间跨接宽传送带(211) 的改进,以解决上述两个问题。
提供移动表面的不同的方法(图2k)是使用大的透明片(212)和背景 片(213)作为一个整体通过扫描仪。大的和小的服装纸样(206、207)可 以放在两个片之间。扫描仪可以从下方以光学方式扫描纸样,因为下面的片 (212)是透明的。背景片(213)是黑色的,以便在得到的光栅图像中作为 背景色出现。
识别
从位图图像中提取相关信息的识别阶段由运行在PC系统上的计算机程 序实现。程序装载扫描的位图图像并产生存储提取的数据的计算机文件。在 本实施例中,提取纸样的轮廓线,这是实物纸样最重要的特征。
因为布料需要根据轮廓线来裁剪,所以纸样的轮廓线是其最重要的特 征。因此,精确地识别纸样的轮廓线对于系统是最重要的。为了实现最精确 和可靠的性能,本实施例采用了仅使用轮廓线的特殊性质检测轮廓线的特殊 方法。该方法利用轮廓线总是单一封闭曲线的事实。该方法还使用了有关于 背景和纸样的颜色的信息。更具体地,该方法找出是作为两种颜色的边界的 封闭曲线,这样,该图像在封闭曲线外侧的部分由背景色填充。某些参数依 赖于图像的分辨率。在实际上,可采用分辨率为75DPI(每英寸的点数)。
数据结构
在图3(301)中示意性地示出了记录数据结构Contours的方法,该数 据结构Contours保存一个或多个轮廓记录。如图3(302)所示,每个轮廓 记录是一个数据结构,该数据结构包括保存诸如可变长度阵列或列表的象素 记录的可变数量的数据结构。每个象素记录包括若干字段(303)。pt字段 (304)是矢量类型(305)的变量,其自身具有表示图像中一个象素坐标的 整数变量的两个字段x(306)和y(307)。其它字段包括实数变量curv(308) 和布尔变量corner(309)。在轮廓记录中记录的各个象素通过索引号访问。 在下文中和图中,在轮廓记录C中的记录数量由size(C)表示,其中的第n 个记录由C[n]表示。字段表示为C[n].pt、C[n].curv和C[n].corner。索引号 应当从零开始。例如,在轮廓记录ctr中的第一个记录的索引号是0,由ctr[0] 表示,而最后一个记录的索引号是size(ctr)-1,由ctr[size(ctr)-1]表示。因为 轮廓记录用来表示闭合的轮廓,所以数据结构应当是循环的,也就是说,最 后一个记录之后,重新回到第一个记录,直到找到所关心的索引号。因此, ctr[size(ctr)]与ctr[0]表示同一个记录,更广泛地,对于任意整数n,ctr[n+ size(ctr)]与ctr[n]表示同一个记录。特别地,为了简化标号,允许使用负的 索引号。因此,例如ctr[-1]表示ctr中的最后一个记录,与ctr[size(ctr)-1]相 同。
检测轮廓线
图4示出了从位图图像中检测轮廓线的方法的流程图。入口点为401。 在步骤402,如下文介绍的,在初始化轮廓子程序中初始化数据结构 Contours。然后是两个嵌套的循环。重复外部循环直到在循环开始处(403) 设置为真的布尔变量finished在循环的末端(416)仍保持为真。也就是说, 如果在416发现变量finished为假,不退出外部循环并返回到步骤403。对 在Contours中的所有轮廓记录重复内部循环(由初始化步骤404、增加步骤 405和退出测试步骤415控制)。在内部循环中当前轮廓记录称作ctr。在内 部循环中,当前轮廓记录ctr通过入口参数传送给多个子程序。在下面将更 详细的介绍每个子程序。首先,调用收缩子程序(406)。返回值为真或假 的布尔变量。检查该返回值(407),如果为真,则将变量finished的值设 为假(408)。下一步,调用伸展-收缩子程序(409)。然后,调用循环- 检查子程序(410),如果返回值为真(411),则调用不正确的-轮廓子程 序(412)。如果仍然返回真(413),则从Contours中去除当前轮廓记录 ctr(414)。在步骤415,检查是否已经对Contours中的所有轮廓记录重复 内部循环。在退出外部循环之后,选择在Contours中留下的轮廓中最大的 作为外形轮廓并称作ctr。然后,ctr传送到计算局部曲率(418)、平滑(419) 局部曲率以及识别拐角点(420)这三个子程序。该方法返回ctr。
该方法的输出是存储在返回值ctr中的轮廓。它是连续的象素记录,其 中的每一个记录保存象素坐标(pt)、该点的曲率(curv)以及该点是否是 拐角(corner)的信息。
初始化-轮廓
图5示出了初始化-轮廓的子程序的流程图。首先,清空数据结构 Contours并建立一个新的轮廓记录(51),该记录在此称作newcontour。然 后用象素记录填充该新的轮廓,从而表示图像矩形的外形。我们假设全局矢 量变量ImageSize在变量ImageSize.x和ImageSize.y中包含图像矩形的尺寸, 图像的宽度和高度的象素数量的变量ImageSize.x和ImageSize.y是以象素数 量表示的图像宽度和高度的。因此,新的轮廓从坐标(0,0)开始,并在 平方向上至(ImageSize.x-1,0)(在52中增加),然后至(ImageSize.x-1, ImageSize.y-1)(53),然后至(0,ImageSize.y-1)(54),最后返回至(0, 0)(55)。在图中,“增加点(0,0)”指“将pt字段(0,0)加到象素 记录中”等。新的轮廓加到结构Contours中(56)。
收缩
图6示出了收缩子程序的流程图。对轮廓记录带入口参数ctr调用收缩 子程序。也就是说,在该子程序中对ctr的任何改变(增加象素记录、删除 象素记录等)都是直接针对在调用侧作为实际参数传递的轮廓记录进行的。 在编程语言C++中,可以通过使用函数调用的“带入口参数调用”方法来实 现。其它语言具有类似的功能来实现该功能,并且它们的使用在本领域中是 公知的。
首先,布尔变量moved初始化为假(601),并且ctr复制到另一个新 的轮廓记录数据结构C中(602)。然后,对在轮廓记录中的每个象素记录 执行循环,索引号i从0增加到size(ctr)-1(由初始化步骤603、增加步骤 611和退出测试步骤612控制)。在循环内部,矢量C[i+1].pt-C[i-1].pt存储 在矢量变量v中(604)。请记住该矢量具有整数部分。下一步,得到v的 长度|v|(即,(v.x)2+(v.y)2的正平方根),并且其整数部分存储在整数变量d 中(605)。在此,假设函数Int(t)给出数t的整数部分。更具体地,如果t 是非负的,则返回不大于t的最大整数,如果t是负的,则返回不小于t的 最小整数。如果d为零(606),则循环继续到下一个索引号。否则,将值 (Int(-v.y/d)和Int(v.x/d))分配给v(607),然后检查点ctr[i].pt+v是否在图 像矩形的内部(608),如果在内部,则检查该点的象素是否是背景象素(609)。 如果是背景象素,则存储在轮廓记录ctr中的ctr[i].pt中的点坐标改为坐标 ctr[i].pt+v,并且变量moved指定为真(610)。在退出循环后,变量moved 作为布尔返回值返回。这可以表示出在子程序中是否移动了在轮廓记录ctr 中的任何点坐标。如果象素点没有命中非背景象素,则该子程序具有向“内 部”方向(v)移动轮廓的每个点的作用。
伸展-收缩
图7示出了伸展-收缩子程序的流程图。和前面的收缩子程序一样,对 轮廓记录带入口参数ctr调用伸展-收缩子程序。该子程序有两个嵌套循环。 重复外部循环,直到在循环开始处(701)设置为真的布尔变量nochange在 循环的末端(714)仍保持为真。使用从0到size(ctr)-1的索引号i对在ctr 中的所有象素记录重复内部循环(由初始化步骤701、增加步骤712和退出 测试步骤713控制)。在内部循环中,首先检查在轮廓中具有连续索引号的 一对象素记录(702)或者索引号相差二的一对象素记录(703)是否具有相 同的点坐标(pt字段)。如果满足其中一种条件,则从轮廓记录ctr中去除 象素记录ctr[i](704),并且布尔变量nochange设置为假(705)。如果两 种情况都没有出现,则按如下方法测试两个连续记录的点坐标是否离得太远 (两个坐标中的任一个的距离大于1)。差矢量ctr[i].pt-ctr[i-1].pt存储 在变量v中(706),并测试是否|v.x|>1或者|v.y|>1(707)。如果两种情 况都没有出现,则点之间没有离得太远,并继续执行内部循环。如果其中的 任一种情况出现,则在两个记录之间插入新的象素记录。为了找到插入新点 的位置,反复用(Int(v.x/2),Int(v.y/2))代替v,直到|v.x|和|v.y|至多为1 (708、709)。然后,点坐标为ctr[i].pt-v的象素记录插入到轮廓记录ctr 中的索引号i和i-1之间的位置(710),并且布尔变量nochange设置为假 (711)。这样,在图像平面中的两点之间紧邻ctr[i].pt形成新的点。如果新 的点与ctr[i].pt仍然离得太远,在下一个外部重复中将被纠正。因此,子程 序保持在轮廓中的连续点在每个坐标中至多相距一。
循环-检查
图8示出了循环-检查子程序的流程图。对轮廓记录带入口参数ctr调 用循环-检查子程序。程序通过比较所有象素记录对的pt字段检查是否有比 整个轮廓更小的轮廓。因此,它具有外部循环(由初始化步骤802、增加步 骤812和退出测试步骤813控制),i从1到size(ctr)-1,以及内部循环(由 初始化步骤803、增加步骤810和退出测试步骤811控制),内部循环j从 0到i-1。程序从布尔变量loopfound为假(801)开始运行。如果发现循环, 即,对于某些i和j满足ctr[i].pt=ctr[j].pt(804),则将表示索引号从j到 i-1的轮廓的循环部分的象素记录复制到新的轮廓记录newcontour(805), 并从ctr中去除(806)。然后将newcontour加到Contours中(807),并且 将变量loopfound设置为真(808)。随着ctr的缩短而修改索引号i(809) 并退出内部循环。子程序返回loopfound,表示是否发现循环。该子程序具 有保持轮廓为简单轮廓的作用,简单轮廓即没有自交叉的轮廓。
不正确的-轮廓
图9示出了不正确的-轮廓子程序的流程图。对轮廓记录带入口参数 ctr调用不正确的-轮廓子程序,但不修改ctr。首先检查ctr是否具有由全 局变量MinSize给定的最少点数(91)。MinSize的最佳值依赖于多个参数, 包括输入图像的分辨率。因为几乎没有小于几英寸的纸样,DPI(每英寸的 点数)值的几倍已经足够小了。如果ctr比MinSize的点数少,则子程序返 回值为真。如果轮廓至少有MinSize个点,则计算由轮廓围绕的区域的符号 面积。符号面积根据方向(顺时针或逆时针)改变正负号,如果轮廓与在初 始化-轮廓子程序中定义的初始轮廓具有相同的方向则其面积为正;如果方 向相反则面积为负。符号面积的计算如下。首先,累加器变量volume初始 化为零(92)。然后,通过简单循环(由初始化步骤92、增加步骤94和退 出测试步骤95控制),对于从0到size(ctr)-1的每一个i,ctr[i].pt.y× ctr[i-1].pt.x-ctr[i].pt.x×ctr[i-1].pt.y的值加到累加器变量volume中(93)。 退出循环,检查累加器变量的符号(96),如果为负则子程序返回值为真, 否则返回值为假。为真的返回值表示轮廓是不正确的,也就是说,或者轮廓 太小,或者轮廓的方向与所希望的方向相反。
计算-曲率
图11示出了计算-曲率子程序的流程图。对轮廓记录带入口参数ctr 调用计算-曲率子程序。子程序计算在轮廓中的每个象素邻近区域的平均曲 率,并在象素记录的curv字段中存储该值。全局整数变量NN确定邻近区域 的半径。在此,给定NN=Int(DPI/18)(如果DPI=150,则为8),其中 DPI是以每英寸的点数表示的图像分辨率。使用索引号i对在轮廓中的每个 象素记录执行外部循环(由初始化步骤1101、增加步骤1113和退出测试步 骤1114控制)。实数变量theta和len初始化为0(1102)。使用在象素记 录邻近区域执行的索引号j,即,从i-NN到i+NN,执行内部循环(由初始 化步骤1103、增加步骤1110和退出测试步骤1111控制);对于每个象素 记录,计算从(v1)之前的点到当前点的矢量和从当前点到(v2)之后的点 的矢量(1104)。如果两个矢量都不是零矢量(1105),则使用内积v1·v2 (由v1.x×v2.x+v1.y×v2.y定义)除以两个矢量长度的乘积的反余弦计算 两个矢量之间的角度。在此,acos(x)对于在-1≤x≤1之间的x返回0和π之 间的角度θ,从而cos(θ)=x。角度需要确定符号,并且根据判断是否满足v1.x ×v2.y<v1.y×v2.x(1106),以两种方式计算角度(1107、1108)。角度加 到theta。矢量v2的长度|v2|加到len(1109)。在退出内部循环之后,通过 用len除angle计算曲率,并存储在ctr[i].curv中(1112)。注意,在本子程 序中,因为角度是有符号的,所以小的弯曲被平滑,并且计算邻近区域的平 均曲率。
平滑-曲率
图10示出了平滑-曲率子程序的流程图。对轮廓记录带入口参数ctr 调用平滑-曲率子程序。该子程序通过高斯卷积(convoluting with the Gaussian)来平滑曲率值。假设曲率值存储在每个象素记录的curv字段中。 因为要修改在ctr中的值,所以首先复制曲率值到具有相同尺寸的实数的循 环容器c中,即,size(c)=size(ctr)(1001)。使用两个循环;从0到size(ctr)-1 的索引号i的外部循环(由初始化步骤1002、增加步骤1009和退出测试步 骤1010控制)和从i-NN到i+NN的索引号j的内部循环(由初始化步骤1004、 增加步骤1006和退出测试步骤1007控制),其中NN是在计算曲率中所用 的同一个全局变量,为邻近区域的半径。在内部循环的开始,实数变量sum 初始化为零(1003)。数c[j]被exp(-(j-i)2/(NN2×R))乘,并被加到sum中(1005), 其中R是控制平滑度的参数,且exp(x)返回x的指数。在此采用的值为R=2。 在退出内部循环之后,sum的值存储在ctr[i].curv中(1008)。
发现-拐角
图12示出了发现-拐角子程序的流程图。对轮廓记录带入口参数ctr 调用发现-拐角子程序。该子程序寻找在其各自的邻近区域内具有最大绝对 曲率并且至少具有预先确定的最小绝对曲率的点。索引号i的外部循环(由 初始化步骤1201、增加步骤1211和退出测试步骤1212控制)从0到size(ctr)-1 执行。对于在轮廓中的每个象素记录,首先corner字段设置为假(1202)。 然后,检查在该点的绝对曲率(曲率的绝对值)(1203),并且如果不大于 存储在全局变量MinC中的拐角的最小曲率,则循环继续。在此MinC的值 为π/8或0.3927。如果确实有大于MinC的绝对曲率,则使用内循环(由初 始化步骤1205、增加步骤1207和退出测试步骤1208控制)检查在记录的 邻近区域的最大绝对曲率。实数变量M初始化为0(1204),并且对于在邻 近区域的每一个记录更新(1206)。如果发现在邻近区域中初始点具有最大 绝对曲率(1209),则字段corner的值设为真(1210)。
工业适用性
虽然在这里只说明和介绍了本发明的某些优选特性,但是对于本领域的 技术人员可以做出许多修改和变化。
例如,以基本相同的方式可以找出纸样上的孔。仅仅是从不是黑色的对 象中找出黑色对象的问题,而无需采用其它方法。可以采用与轮廓识别相同 的方法识别在孔的周围的拐角。
而且,在曲线被识别出之后,可以对其进行平滑。例如,可以拟合诸如 样条或贝塞尔曲线之类的参数曲线,以数字化曲线。在此,知道拐角的位置 是重要的,正如在本发明中所能实现的,因为在这些参数曲线中,在切向量 不连续变化之处,拐角被当作以不同的方式来处理的点。在数字纸样中的轮 廓线的明确描述可以是参数曲线的参数。
此外,公开的方法可以用来数字化任何形状,而不一定是服装纸样。用 来生产、包以及其它缝制商品的纸样仅仅是本发明可以应用的更明显的例 子。
因此,应当理解,附带的权利要求书涵盖落入本发明的真正精神中的所 有这些修改和变化。
QQ群二维码
意见反馈