alpha shape 2D点集边缘线提取

news/2024/11/17 0:18:48/

Delaunay三角网 alpha shape 2D点集边缘线提取

1\

  1. Delaunay三角网
    参考blog:
    Scipy
    笔记
    [Geometry] Alpha Shapes - 原理及我的实现
  2. Alpha Shape
    Widyaningrum E , Peters R Y , Lindenbergh R C . Building outline extraction from als point clouds using medial axis transform descriptors[J]. Pattern Recognition, 2020:107447.
    在这里插入图片描述

  1. Codes
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3Dfrom scipy.spatial import Delaunay
from sklearn.neighbors import KDTreedef plot_circle(centers,rs,ax):N = centers.shape[0]for i in range(N):theta = np.arange(0, 2*np.pi, 0.01)x = centers[i,0] + rs[i] * np.cos(theta)y = centers[i,1] + rs[i] * np.sin(theta)ax.plot(x, y, 'b-', alpha=0.1)def edge_check_vaild(e,tree,r,err):xp = e[0]xq = e[1]L = np.sqrt(np.dot(xq-xp,xq-xp))if L > 2*r:return False, -1vec = (xq-xp)/L # the vector from p to qnormal = np.array([vec[1],-vec[0]])c1 = (xp + xq) / 2 + normal * np.sqrt(r**2-(L/2)**2)c2 = (xp + xq) / 2 - normal * np.sqrt(r**2-(L/2)**2)c = np.array([c1,c2])count = tree.query_radius(c,r=r+err,return_distance=False,count_only=True,sort_results=False)if count[0]<=2:return True, c[0]elif count[1]<=2:return True, c[1]else:return False, -1def boundary_extract(points,alpha,err=10e-3):"""Here, parameter err was place, because there are errors when calculating distancemeanwhile, this err was different for different scaling 2D point cloudso, a parameter was placed here to considering the calculation errors"""R = 1 / alphapts = np.copy(points)tree = KDTree(pts, leaf_size=2)tri = Delaunay(pts)s = tri.simplicesN = s.shape[0]i = 0edges = []centers = []while i <= N - 1:if s[i,0]==-1:i = i + 1continuep3 = s[i]e1 = np.array([points[p3[0],:],points[p3[1],:]])e2 = np.array([points[p3[1],:],points[p3[2],:]])e3 = np.array([points[p3[0],:],points[p3[2],:]])e = [e1,e2,e3]for j in range(3):flag, center = edge_check_vaild(e[j],tree,R,err)if flag:edges.append(e[j])centers.append(center)nb = tri.neighbors[i]nb_valid = nb[nb!=-1]#nb_valid_num = nb_valid.shape[0]#s[nb_valid] = -1i = i + 1return edges, centersdef show_edge(edges,points,circle=None,r=None):fig = plt.figure()ax = fig.add_subplot(111)ax.scatter(*zip(*points),s=4,c='k')for i in range(len(edges)):ax.plot(*zip(*edges[i]),'-r')if circle is not None:plot_circle(circle,r,ax)plt.show()if __name__ == "__main__":pts = np.random.rand(200, 2) # 随机生成10个2维点alpha = 6edges, centers = boundary_extract(pts,alpha,err=10e-5)show_edge(edges,pts,circle=np.array(centers),r=np.ones(len(centers))/alpha)print("over!!!")
  1. Results
    在这里插入图片描述
    在这里插入图片描述

http://www.ppmy.cn/news/1173298.html

相关文章

CSS 的盒子Day03(2)

在Web 开发中&#xff0c; CSS 盒子模型是指如何在浏览器引擎中对 HTML 元素进行建模和如何从CSS属性导出 HTML 元素的尺寸。 [3]盒模型的指导方针由 Web 标准万维网联盟 (W3C)特别是 CSS 工作组描述。在 20 世纪 90 年代末和 2000 年代初的多数时间里&#xff0c;主流浏览器中…

IDC发布生成式AI采用旅程报告:容联云助力银行引入生成式AI

近日&#xff0c;国际数据公司IDC发布了《从典型落地案例看生成式AI采用旅程&#xff0c;3Q23》报告&#xff0c;通过几个典型案例介绍用户采用生成式AI的考量、应用场景、落地路线、决策流程&#xff0c;为最终用户提供参考建议。 容联云基于自研赤兔大模型助力《XX银行服务营…

博途S7-1200PLC自由口通信(Send_P2P和Receive_P2P指令编程)

S7-1200PLC的MODBUS-RTU通信的实战应用和完整SCL源代码,请参看下面的文章链接 https://rxxw-control.blog.csdn.net/article/details/132845221https://rxxw-control.blog.csdn.net/article/details/132845221MODBUS-RTU协议和常用功能码解读 https://rxxw-control.blog.csd…

Flutter最全面试题大全

在理解这些问题之前&#xff0c;建议看一下Flutter架构原理&#xff0c;如下链接&#xff1a; https://blog.csdn.net/wang_yong_hui_1234/article/details/130427887?spm1001.2014.3001.5501 目录 一. 有个Text节点&#xff0c;由于文字内容过多&#xff0c;发生了溢出错误&…

Linux备份Docker的mysql数据并传输到其他服务器保证数据级容灾

目录 简介什么是容灾 &#xff1f;容灾的分类容灾和备份有什么连系 &#xff1f; 数据级容灾备份步骤1、scp命令&#xff1a;用于Linux之间复制文件和目录2、编写备份数据库脚本3、crontab定时任务执行脚本4、测试 应用级容灾业务级容灾 简介 为了防止客户系统的数据丢失&…

数字化用户裂变怎么做?用户裂变系统推荐

移动互联网时代&#xff0c;企业获取流量的成本非常昂贵&#xff0c;因此需要考虑如何降低流量成本&#xff0c;如选择小程序等的私域运营方式。但流量只是结果&#xff0c;本质上是要打通用户的社交关系链&#xff0c;那又要怎么做呢&#xff1f; 裂变的要素就是以利益驱动&am…

基于springboot实现CSGO赛事管理系统【项目源码+论文说明】计算机毕业设计

基于SpringBoot实现CSGO赛事管理系统演示 摘要 CSGO赛事管理系统是针对CSGO赛事管理方面必不可少的一个部分。在CSGO赛事管理的整个过程中&#xff0c;CSGO赛事管理系统担负着最重要的角色。为满足如今日益复杂的管理需求&#xff0c;各类的管理系统也在不断改进。本课题所设计…

ranger的只读(read)权限引起的

开发人员只要只读权限 在rang中只给了read的权限 ranger的read和select的权限区别 read 权限&#xff1a; read 权限允许用户读取&#xff08;查看&#xff09;文件或目录的内容。 具有 read 权限的用户可以查看文件的内容&#xff0c;读取目录中的文件列表和元数据&#xf…