python-pcl 使用积分图进行点云法线估计

在获取了矩形特征后,要计算矩形特征的值。Viola等人提出了利用积分图求特征值的方法。积分图的概念可用图3表示:

坐标A(x,y)的积分图是其左上角的所有像素之和(图中的阴影部分)。定义为:

其中ii(x,y)表示积分图,i(x,y)表示原始图像,对于彩色图像,是此点的颜色值;对于灰度图像,是其灰度值,范围为0~255。

在上图中,A(x,y)表示点(x,y)的积分图;s(x,y)表示点(x,y)的y方向的所有原始图像之和。积分图也可以用公式(2)和公式(3)得出:

法线方向基本一致朝向视点,利用此方法进行法线估计只适用于有序点云,对于无序点云就只能采用其他方法了。

具体代码如下:

import pcl
import pcl.pcl_visualization


cloud = pcl.load('1.pcd')

print ('load 1.pcd')


print ('make_IntegralImageNormalEstimation: ')

ne = pcl.IntegralImageNormalEstimation(cloud)
print ('set_NormalEstimation_Method_AVERAGE_3D_GRADIENT: ')
ne.set_NormalEstimation_Method_AVERAGE_3D_GRADIENT ()
print ('set_MaxDepthChange_Factor: ')
ne.set_MaxDepthChange_Factor(0.02)
print ('set_NormalSmoothingSize: ')
ne.set_NormalSmoothingSize(10.0)
print ('set OK')
print ('compute - start')
normals = ne.compute()
print ('compute2 - end')
print (str(normals.size))


viewer = pcl.pcl_visualization.PCLVisualizering()
viewer.SetBackgroundColor (0.0, 0.0, 0.5)

viewer.AddPointCloudNormals(cloud, normals)

flag = True
while (flag):
    flag != viewer.WasStopped ()
    viewer.SpinOnce ()
end

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值