加速UV检测的一种算法

需求:角色身上各UV块之间的间距不能小于30像素,距离UV边界([0,1])不能小于15像素,也就是要保证一定的UV出血量。

看起来挺简单,直接每个UV点计算距离对比就完了。然而现在每只角色平平常常都是几万面,拿到的测试文件UV顶点数50000左右。如果直接粗暴两两对比,那对比次数高达上亿,再加上存在多套UV,即使C++写插件计算时间也太慢,很可能就没法用了。

稍加分析都会想到,先取每块UV的边界点,再进行处理。这样需要处理的数据量就会减少很多了,通常也就勉强能用了。但其实仍然不少,而且大量的计算实际上都浪费了。理想情况下,每块UV应该只去查环绕在它周围最近一圈的其它UV块,与它们边界上的UV点进行对比。

现在的问题是几乎每块UV都弯弯扭扭,有的跨度长有的跨度短, 准确找出相邻UV块是个难题。也不知道有什么好算法,要精确查找带来的计算量也可能大得吓人,搞不好又跟最初的方案差不多耗费时间了。

怎么办?

直接说我的算法,如下:

计算每块UV的BondingBox,构建一个矩形;检测所有矩形的相交情况,根据这将UV块分组,也就是说找出每块UV及其周围一圈需要对比的那些UV Shell,最后根据这些分组计算各UV Shell边上的UV点间距。

到这一步问题似乎就解决了。但是且慢,由于模型的对称性,往往存在好些UV块是完全重叠的,经过上面的计算后你会发现,结果似乎不对头。为什么呢,因为重叠的UV块会被分到将要与之对比检查的组里面,显然它们是不可能有30像素间距的。这时就要把这种情况从分组中排除掉。

解决办法也很简单了,检测矩形是否重叠。(从这里引申出另一个问题的解决方案,那就是检测是否有UV重叠)简单的算法,对比Rectangle的topLeft与rightBottom坐标就行。

其实这种情形还有一些小意外,可能模型经过几次修改后,原本对称的部分有小幅度的改动,导致UV又不完全重叠了。这种根据实际情况加个对比的容差值也就好了。

至此,算是可以比较好的解决这个需求了。Python代码也就二三百行,不同复杂度模型检测速度在十秒左右(5万左右面, 2套UV)。如果按最初想法上来简单粗暴处理,那结果就是电脑直接死机了,永远没有结果。

0017加速UV检测的一种算法相关推荐

  1. 论文推荐 | 目标检测中不平衡问题算法综述

    (图片付费下载于视觉中国) 作者 | CV君 来源 | 我爱计算机视觉(ID:aicvml) 今天跟大家推荐一篇前几天新出的投向TPAMI的论文:Imbalance Problems in Objec ...

  2. ## 论文学习—用一个可接受的的剪枝策略来加速动态时间规整聚类的算法

    论文学习-用一个可接受的的剪枝策略来加速动态时间规整聚类的算法 "Accelerating Dynamic Time Warping Clustering with a Novel Admi ...

  3. 显著性检测的四种经典方法

    最近闲来蛋痛,看了一些显著性检测的文章,只是简单的看看,并没有深入的研究,以下将研究的一些收获和经验共享. 先从最简单的最容易实现的算法说起吧: 1. LC算法 参考论文:Visual Attenti ...

  4. AI入门级的开发技巧:人脸检测的4种常见方法以及优缺点对比

    这是一篇纯干货文章,旨在与AI初学者分享关于人脸检测的4种常见方法,以及它们的各自优缺点的对比.同时我也从一位资深的AI开发者角度,给大家提出一些个人的开发技巧和建议,便于大家找到适合自己需求的方法. ...

  5. CVPR目标检测与实例分割算法解析:FCOS(2019),Mask R-CNN(2019),PolarMask(2020)

    CVPR目标检测与实例分割算法解析:FCOS(2019),Mask R-CNN(2019),PolarMask(2020) 目标检测:FCOS(CVPR 2019) 目标检测算法FCOS(FCOS: ...

  6. 腾讯AI开源框架Angel 3.0重磅发布:超50万行代码,支持3种算法,打造全栈机器学习平台...

    出品 | AI科技大本营(ID:rgznai100) [导语]2019年8月22日,腾讯首个AI开源项目Angel正式发布3.0版本.Angel 3.0尝试打造一个全栈的机器学习平台,功能特性涵盖了机 ...

  7. Drug Target Review | 开发一种算法来预测药物性肝损伤

    Elsevier和FDA之间合作将提出一种算法,用于准确预测药物诱发的肝损伤.Drug Target Review调查了该毒理学项目将为药物发现行业带来的好处. 确保候选药物进行毒性分析是药物开发过程 ...

  8. 独家 | 决策树VS随机森林——应该使用哪种算法?(附代码链接)

    作者:Abhishek Sharma 翻译:陈超 校对:丁楠雅 本文长度为4600字,建议阅读20分钟 本文以银行贷款数据为案例,对是否批准顾客贷款申请的决策过程进行了算法构建,并对比了决策树与随机森 ...

  9. 爱因斯坦谜题解答(三种算法比较)

    爱因斯坦谜题:     在一条街上有颜色互不相同的五栋房子,不同国籍的人分别住在这五栋房子力,每人抽不同品牌的香烟,喝不同的饮料,养不同的宠物.已知如下情况: 1.  英国人住红色房子里. 2.  瑞 ...

最新文章

  1. 飞凌OK6410开发板移植u-boot官方最新版u-boot-2012.10.tar.bz2
  2. 最小生成树(MST)
  3. 最实用的10个重构小技巧排行榜,您都用过哪些呢?
  4. python 服务端与c++客户端通讯_在C++与Python之间通信(IPC)
  5. android java split_Java中的split函数的用法
  6. vue+elementUI 添加多个可以全选的多选框
  7. 阿里巴巴研究员刘国华:阿里巴巴智能运维体系建设
  8. VDI序曲二 RemotoAPP部署
  9. Mybatis if test 中int判断非空的坑
  10. Pipe——高性能IO(二)
  11. Android USB Audio accessory设备
  12. 社工库源码mysql_社工库源码
  13. 项目汇报模板—再也不怕撕逼了
  14. el-select 默认选中url参数对应的选项
  15. 华为手机能隐藏蓝牙吗_华为手机的11个隐藏功能
  16. PC上无法捕捉vlan tag的原因
  17. PHPExcel导出excel入门实例教程
  18. 乐乐和表姐(共15张)nbsp;-nbsp;照片质量…
  19. java 实现写出倒立三角形的几种方法
  20. 计算机软件申请专利描述,计算机软件能否申请专利?

热门文章

  1. 微信服务商特约商户入驻接口(提交申请单)示例DEMO-java版
  2. 苹果要加入Face ID到Mac,Magic Keyboard 添加 Touch Bar
  3. 为什么连接xshell报错Could not connect to 172.16.16.100 (port 22): Connection failed
  4. 浏览器访问jsp页面
  5. python检测键盘输入termios、等待按键超时检测
  6. java基础知识之加强
  7. win10环境下搭建IIS图片服务器
  8. 计算机房灭火房间用的系数,消防安全知识试题(三)(2)
  9. Cisco ❀ VRF(虚拟路由转发表)
  10. 安卓图像处理(四)保存以及删除图片