NX/UG二次开发—建模—文字中心线提取思路简介

news2024/11/25 15:31:42

一、中心线提取

1、离散文字平面:

离散文字平面,构建一个二维矩阵数组(实际操作时用的一维数组)

1.1最小边界盒子:

可以计算文字平面的最小边界盒子,然后按步距在平面上采点,优点是点距比较均匀,缺点是速度比较慢。

1.2UV曲线:

可以利用面的UV曲线的交点,构建二维矩阵,这样可以拓展到曲面文字,此处需要注意的是,使用UFUN函数提取UV线,在边界的极限位置会有偏差,导致矩阵数值不连续。具体见博客:

http://t.csdn.cn/wLhc0http://t.csdn.cn/wLhc0使用NXopen的话,速度会很慢,此处建议使用PK函数,我是按照面的U方向取500个点,V方向按照U方向点距,自适应,大概一个面用时0.2~0.5s左右。

2、提取中心线点位:

使用提取骨干线算法,也有交细化算法的,此处建议使用“Zhang-Suen”提取(K3M算法在验证过程中出现双侧点位的情况,可以自行尝试)。可以参考如下博客

http://t.csdn.cn/AfwmThttp://t.csdn.cn/AfwmT

3、获取交点:

细化后的点位存在三岔口、四岔口,其中四岔口存在异形,即其中一个封闭,比如Q:

4、分割笔画:

以交点为起始终止点,来划分每条笔画,没有交点的地方使用终点替代;

其中对于仿宋的小写的g,存在一个封闭曲线与两处笔画相交,注意此处可以打断一根根线。

 

5、处理交点、优化交点:

此处提供两个参考方法:

a、测量交点到边界的距离,以最近的边界走势,摆正点位。

b、以交点为起点,获取一定范围内的点,获取波峰,此处需要一些经验参数,来判断优化走势。

6、去除端部分支:

参考方法:

a、如果存在两个端部分支,长度近似,则可以去除一条角度最小的;

b、或者从端部分中缩短交点半径,没有剩余的线肯定是端部分支;

c、利用交点和端部点位到边界距离比值,大于一定范围的肯定是角线,但存在一些需要保留的角线。

  

7、合并相连且角度小于一定角度的线:

比如字母A、W、M、V,数字4,此处建议使用55度,作为分界线。除此还要判断延长交点是否在面外,如果超过曲面,需要用第三个交线裁断。

8、合并短连接线左右两侧的笔画:

比如一些交叉笔画,注意合并后,应及时去除中间连接的笔画,放置后面误连接其他笔画

9、特殊笔画处理:

比如黑体的小f:

黑体的小k:

仿宋的米、木、木字旁的文字等:

 以上处理顺序,尽可能不要打乱,优先处理汉字和字母文字经常出现的交叉情况,对于特殊情况,在最后统一处理,由于米字存在多线交叉,给出参考算法描述:

1、优先处理两根长线+一根短连接线,求交两根长线,并将与连接线角度最小的,设为端线,不在处理,继续迭代。

2、处理一根长线+两根短连接线,获取与长线角度最大的连接线,并将剩余的两根线的起点设为连接线的端部序号,继续迭代。

3、最后在迭代中,加一个判断,即出现两根线相连的情况,直接合并,完成迭代。

如下提取效果:

刻字中心线提取-CSDN直播刻字中心线提取https://live.csdn.net/v/319539

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/873052.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【TODO】米哈游20230813笔试第三题

是计算抽中什么当期五星的期望。 现在的程序结果是99.6087。结果不对&#xff0c;有时间再调。 #include <iostream> #include <bits/stdc.h> typedef long long LL; using namespace std;int n 90; double p; // double min_p 1e-7; double min_p 0.0000000000…

根据源码,模拟实现 RabbitMQ - 通过 SQLite + MyBatis 设计数据库(2)

目录 一、数据库设计 1.1、数据库选择 1.2、环境配置 1.3、建库建表接口实现 1.4、封装数据库操作 1.5、针对 DataBaseManager 进行单元测试 一、数据库设计 1.1、数据库选择 MySQL 是我们最熟悉的数据库&#xff0c;但是这里我们选择使用 SQLite&#xff0c;原因如下&am…

什么是多线程?进程和线程的区别是什么?如何使用Java实现多线程?

文章目录 前言我们为什么要使用线程而不是进程来实现并发编程什么是线程进程和线程的区别如何使用Java实现多线程创建线程1.创建一个继承 Thread 类的线程类2.实现 Runnable 接口匿名内部类方式实现 Runnable 接口lambda 表达式实现 Runnable 接口 Thread 类的常见构造方法Thre…

NO.1 MyBatis配置文件:配置连接数据库的环境,实现数据库连接

目录 1、MyBatis配置数据库环境的连接方式 1.1连接方式一&#xff1a;MyBatis核心配置文件配置数据库连接信息 1.2连接方式二&#xff1a;在MyBatis核心配置文件中引入properties文件&#xff0c;配置数据库的环境 2、MyBatisd核心配置文件连接数据库的环境完整配置信息 3…

基于Matlab实现心电信号小波特征提取和对应疾病识别仿真(附上源码+数据集)

本文基于Matlab平台&#xff0c;研究了心电信号的小波特征提取方法&#xff0c;并应用于心电信号疾病识别仿真实验中。首先&#xff0c;介绍了心电信号的基本特征和常见的心电疾病。然后&#xff0c;详细阐述了小波变换的原理和方法&#xff0c;并提出了一种基于小波分解和小波…

[Leetcode] [Tutorial] 多维动态规划(未完待续)

文章目录 62. 不同路径Solution 62. 不同路径 一个机器人位于一个 m ∗ * ∗ n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角。 问总共有多少条不同的路径&#xff1f; 示例…

线程转换状态,傻傻分不清等待和阻塞吗?你还在暴力的停止线程吗?

线程切换 线程创建之后&#xff0c;调用start()方法开始运行。当线程执行wait()方法之后&#xff0c;线程进入等待状态。进入等待状态的线程需要依靠其他线程的通知才能够返回到运行状态&#xff0c;而超时等待状态相当于在等待状态的基础上增加了超时限制&#xff0c;也就是超…

StringJoiner

1、为什么要学习StringJoiner&#xff1f; 2、StringJoiner概述 StringJoiner跟StringBuilder一样&#xff0c;也可以看成一个容器&#xff0c;创建之后里面的内容是可变的。 2.1、作用 提高字符串的操作效率&#xff0c;而且代码编写特别简洁&#xff0c;但是目前市场上很少有…

用友时空KSOA SQL注入漏洞复现(HW0day)

0x01 产品简介 用友时空KSOA是建立在SOA理念指导下研发的新一代产品&#xff0c;是根据流通企业最前沿的I需求推出的统一的IT基础架构&#xff0c;它可以让流通企业各个时期建立的IT系统之间彼此轻松对话&#xff0c;帮助流通企业保护原有的IT投资&#xff0c;简化IT管理&#…

学习笔记整理-JS-03-表达式和运算符

[[toc]] 一、表达式和运算符 1. 表达式 表达式种类 算术、关系、逻辑、赋值、综合 二、JS基本表达式 1. 算术运算符 意义运算符加减-乘*除/取余% 加减乘除 加减的符号和数学一致&#xff0c;乘号是*号&#xff0c;除法是/号默认情况&#xff0c;乘除法的优先级高于加法和…

【软件工程】软件测试

软件测试的对象 软件程序文档 测试对象&#xff1a;各个阶段产生的源程序和文档。 软件测试的目的 基于不同的立场&#xff0c;对软件测试的目的存在着两种完全对立的观点。 &#xff08;1&#xff09;一种观点是通过测试暴露出软件中所包含的故障和缺陷(从用户的角度)&#xf…

ORB-SLAM2第一节---单目地图初始化

单目初始化 1.前提条件&#xff08;640*480&#xff09; 参与初始化的两帧各自的特征点数目都需要大于100.两帧特征点成功匹配的数目需要大于或等于100.两帧特征点三角化成功的三维点数目需要大于50. 2.针对条件三 流程如下 记录当前帧和参考帧&#xff08;第一帧&#xff…

计算机组成原理 汇编语言

..................................................

fastadmin采坑之页面调转

这里有个业务需求&#xff0c;就是一个表格页面添加一个报名按钮&#xff0c;这个报名按钮就对应另外一个表格页面的新增&#xff0c;那就不用单独写个报名页面了&#xff0c;直接添加一个报名按钮&#xff0c;然后按钮的url直接指向另外一个页面的新增页面&#xff0c;真的很方…

[vscode]vscode运行cmake时候exe不执行而且前面多一些字符

遇到一个奇怪问题,你单独打开cmd去执行vscode编译过程序没问题&#xff0c;但是你在vscode确不会执行&#xff0c;这是因为vscode没有读取到电脑环境变量导致加载DLL失败&#xff0c;但是在vscode终端不会给你提示少DLL&#xff0c;需要你自己把DLL复制到exe目录即可解决问题。…

CDH6.3应知应会

文章目录 1. CDH 简介1.1 CDH版本 2. CDH 集群的优势是什么&#xff1f;3. CDH 集群的部署方式有哪些&#xff1f;4. CDH 集群中如何进行故障排除和监控&#xff1f;5. 你有使用 CDH 部署集群的经验吗&#xff1f;6. CDH 集群如何实现高可用性&#xff1f;7. 在 CDH 集群中&…

Qt Bridge for Adobe Photoshop安装

*社区版没有这个文件夹无法安装&#xff0c;可以下载企业用的&#xff0c;然后给money&#xff0c;不多也就316刀&#xff0c;折合人民币2千多&#xff0c;或者试用10天。 ** B站找到的文章&#xff08;作者&#xff1a;原版英语 https://www.bilibili.com/read/cv17933098 出…

Redis进阶(4)——结合redis.conf配置文件深入理解 Redis两种数据持久化方案:RDB和AOF

目录 引出持久化方案RDBAOF Redis的持久化方案RDB如果采用docker stop关闭如果采用强制关闭 AOF参数设置混编方式的加载让aof进行重写 两种持久化方案的优缺点AOF优缺点RDB优势和劣势 总结 引出 1.Redis数据持久化的两种方式&#xff0c;RDB和AOF; 2.RDB采用二进制存储&#xf…

PHP8的字符串操作1-PHP8知识详解

字符串是php中最重要的数据之一&#xff0c;字符串的操作在PHP编程占有重要的地位。在使用PHP语言开发web项目的过程中&#xff0c;为了实现某些功能&#xff0c;经常需要对某些字符串进行特殊的处理&#xff0c;比如字符串的格式化、字符串的连接与分割、字符串的比较、查找等…

redis设置database 不生效剖析

设置database 不生效剖析 前言配置加载类问题commons-pool 对象池 主页传送门&#xff1a;&#x1f4c0; 传送 前言 事情是这样的 今天在拉取了同事的代码做redis缓存设置的时候&#xff0c;发现即使已经设置了database, 但是存数据的时候还是用的默认0数据库。这引起了我的好…