点云处理学习笔记(六)-- 特征描述 2D/3D Shape Context

一、2D Shape Context

       形状上下文特征多用于形状匹配和目标识别,它采用一种基于形状轮廓的特征描述方法,其在对数极坐标系下利用直方图描述形状特征能够很好地反映轮廓上下采样点的分布情况。形状上下文特征的基本原理如下:

       1.对于一个给定的形状,通过边缘检测算子(如Canny算子)获取轮廓边缘,对轮廓边缘采样将获得一组离散的点集P = {p1, p2, p3, ..., pn};

       2.计算形状上下文,以其中任意一点pi为参考点,在以pi为圆心、R为半径的局域按对数距离间隔建立N个同心圆将此区域沿圆周方向M等分,形成如下图所示的靶状模板,点pi到其他各点的向量相对位置简化为模板上各扇区内的点分布数,这些点的统计分布直方图hi(k)称为点pi的形状上下文

       采用对数距离分割可以使形状上下文描述子对邻近的采样点比远离点更加敏感下,强化局部特征,轮廓不同点处的形状上下文是不同,但相似轮廓的对应点处有相似的形状上下文:

       对于整个点集P,分别以其n个点 p1, p2, p3, ..pn作参考点,依次计算与剩下的n-1个点构成的形状直方图,最终得到 n个形状直方图。以n*(n-1)大小的矩阵存储。这样,对于任一目标,可用n*(n-1)大小的矩阵表示其形状信息,n*(n-1)大小的矩阵就是点集P的形状上下文,它描述了整个轮廓形状的特征。采样点越多,形状表达也越精细,计算量也会成倍加大

       完成形状上下文的计算后,需要比较这连个目标上下文的相似度,从而得到相似与否的结论,形状上下文之间的相似度计算方法如下:

       3.计算一个目标的形状直方图与另一目标的形状直方图之间的匹配代价,代价函数如下:

       其中,hi(k)为目标P的点pi的形状直方图,hj(k)为目标Q的点pj的形状直方图,按照公式就可以得到两个目标之间的代价矩阵C,大小为n * n。

       4.然后,基于计算到的代价矩阵C,进行点的匹配操作,使下式获得最小值:

       经分析,上述点的匹配问题即为经典的双向图的匹配问题,利用匈牙利算法即可解决。该方法以一个非矢量的数值表示两个目标的相似度,由于是基于代价矩阵进行计算,所以结果越大表示越不想四,结果越小表示越相似

       优点:

       充分利用上下文信息,在非刚性物体的匹配中,具有很好的鲁棒性。

       缺点:

       1.标准的形状上下文不能很好地解决物体内部的变形,后期改进的基于内部距离的形状上下文改善了一点

       2.对于有背景、噪声点过多的情况,匹配效果很不好

二、3D Shape Context

       3DSC是直接在2DSC上扩展而来,扩展为以点P为球心,R为半径的球区域,球的北极点由重建法线来估计。其中,与2Dsc类似,也存在不同大小的同心球,半径的计算方式为:

        此时的采样点不再是计算梯度后的采样点,而是相对P点的距离,为了避免P点太近的点类似于噪声的干扰(即采样点太近,造成噪声的干扰影响程度更大),因此需要设置一个最小半径:

        相对于2DSC中点数统计方式,3DSC增加了统计区域内点集的每个点不同的权重,其中权重的计算过程如下:

        其中v(j, k, l)对应第j个同心球,第k个方位方向,第l个羊角方向区域对应的体积,\varrho反应了局部点的密度,即以P点为球心,a为半径的球体内的点数。
 

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在JWS SOAP Web Service中,可以使用Handler实现过滤器/拦截器的效果,对接口请求和响应进行处理。 Handler是Java EE中的一个标准接口,用于处理Web Service请求和响应。在JWS SOAP Web Service中,Handler可以对请求和响应进行处理,类似于Servlet中的过滤器和拦截器。 Handler可以在请求到达Web Service之前或者响应离开Web Service之后进行处理,可以对SOAP消息的头和体进行处理,可以修改SOAP消息中的内容,可以设置SOAP消息的属性等。 在JWS SOAP Web Service中,使用Handler需要完成以下步骤: 1. 创建Handler类,实现javax.xml.ws.handler.Handler接口,并实现其方法。 2. 在Web Service实现类中,使用@HandlerChain注解指定Handler链的位置和名称。 3. 在Handler链的配置文件中,指定Handler类的位置和名称,并指定Handler类的处理顺序。 示例代码如下: Handler类: ```java public class MyHandler implements SOAPHandler<SOAPMessageContext> { public boolean handleMessage(SOAPMessageContext context) { Boolean outbound = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY); if (outbound) { System.out.println("Handle outbound message."); } else { System.out.println("Handle inbound message."); } return true; } public boolean handleFault(SOAPMessageContext context) { System.out.println("Handle message fault."); return true; } public void close(MessageContext context) { System.out.println("Close handler."); } public Set<QName> getHeaders() { return null; } } ``` Web Service实现类: ```java @WebService @HandlerChain(file = "handler-chain.xml") public class MyWebService { @WebMethod public String sayHello(String name) { return "Hello, " + name + "!"; } } ``` Handler链配置文件handler-chain.xml: ```xml <?xml version="1.0" encoding="UTF-8"?> <handler-chains xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/handler-chains_1_0.xsd"> <handler-chain> <handler> <handler-class>com.example.MyHandler</handler-class> </handler> </handler-chain> </handler-chains> ``` 在上面的示例中,我们创建了一个MyHandler类,实现了javax.xml.ws.handler.Handler接口,并实现了handleMessage、handleFault、close和getHeaders方法。在MyWebService类中,使用@HandlerChain注解指定了Handler链的位置和名称。在handler-chain.xml中,指定了MyHandler类的位置和名称,并指定了处理顺序。 当Web Service被调用时,MyHandler类会对请求和响应进行处理,并输出相关信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值