【编程实践】利用python实现csf滤波-免订阅

主要过程

建议直接看标题4

1 下载CSF包

要想实现CSF的 python实现,需要在GitHub上找到对应的项目,原始项目地址jianboqi/CSF,对应论文地址
在这里插入图片描述
下载,得到压缩包文件,将压缩包解压。

2 安装VS2015

安装VS 2015,CSF运行需要VS2015中支持的C++和Python对应库;
在安装VS2015时,会遇到问题,提示安装包丢失或损坏。
VS2015获取地址 感谢wgscd博主整理,请移步博主主页下载。
在这里插入图片描述

问题:默认从Internet下载包,可能是因为限制所以无法定向到对应的服务器地址,在线安装过程中临时路径中找不到对应的证书文件,而ios映像文件中有所有的所需文件,只不过程序默认不会去扫描映像文件。

解决:选在第三种在指定位置搜索安装,将软件提供的临时路径更改为ios映像文件的packages路径。

分析:换句话说,将 请提供搜索包的位置 “…Temp/{-}/Java_**” 直接替换为“C:\Users\用户狮子\Desktop\Visual Studio2015 Enterprise\Visual Studio2015\packages”,【注:自己确定好iso影像文件的地址,上述用户狮子是作者本人的路径】。一般遇到问题的是这两个,JavaScript_ProjectSystem.msi 和JavaScript_LanguageService.msi。

此处ios映像文件是放在桌面的,不论遇到那个msi,都用这个路径替换,程序会在提供的路径中自动寻找证书。调整后,点击重试。

随后,就可以安装成功。

3 安装Anaconda或者其他Python编译器

默认已完成编辑器的安装。

3.1 在第一步下载的文件夹中找打CSF的python文件
3.2 在此处的路径栏中,输入cmd,进入终端,目的是为了在终端模式下对文件进行编译
3.3 激活自定义的python环境,输入命令对库进行编译
// cmd窗口编译过程

(base) C:\Users\57102>activate Env_PCSF

(Env_PCSF) C:\Users\57102>cd d
系统找不到指定的路径。

(Env_PCSF) E:\>cd CSF-master

(Env_PCSF) E:\CSF-master>cd CSF-master

(Env_PCSF) E:\CSF-master\CSF-master>python setup.py buidl
Traceback (most recent call last):
  File "setup.py", line 3, in <module>
    import numpy
ModuleNotFoundError: No module named 'numpy'

(Env_PCSF) E:\CSF-master\CSF-master>python setup.py build
Traceback (most recent call last):
  File "setup.py", line 3, in <module>
    import numpy
ModuleNotFoundError: No module named 'numpy'

(Env_PCSF) E:\CSF-master\CSF-master>pip install numpy
Collecting numpy
  Downloading numpy-1.19.5-cp36-cp36m-win_amd64.whl (13.2 MB)
     |████████████████████████████████| 13.2 MB 930 kB/s
Installing collected packages: numpy
Successfully installed numpy-1.19.5

(Env_PCSF) E:\CSF-master\CSF-master>python setup.py build
running build
running build_py
creating build
creating build\lib.win-amd64-3.6
copying python\CSF\CSF.py -> build\lib.win-amd64-3.6
running build_ext
building '_CSF' extension
creating build\temp.win-amd64-3.6
creating build\temp.win-amd64-3.6\Release
creating build\temp.win-amd64-3.6\Release\python
creating build\temp.win-amd64-3.6\Release\python\CSF
creating build\temp.win-amd64-3.6\Release\src
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -DCSF_USE_OPENMP -Isrc/ -IC:\Users\57102\.conda\envs\Env_PCSF\lib\site-packages\numpy\core\include -IC:\Users\57102\.conda\envs\Env_PCSF\include -IC:\Users\57102\.conda\envs\Env_PCSF\include "-IC:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE" "-IC:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\ATLMFC\INCLUDE" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.10150.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.6\include\um" "-IC:\Program Files (x86)\Windows Kits\8.1\include\shared" "-IC:\Program Files (x86)\Windows Kits\8.1\include\um" "-IC:\Program Files (x86)\Windows Kits\8.1\include\winrt" /EHsc /Tppython/CSF/CSF_wrap.cxx /Fobuild\temp.win-amd64-3.6\Release\python/CSF/CSF_wrap.obj /openmp /std:c++11
cl: 命令行 warning D9002 :忽略未知选项“/std:c++11”
CSF_wrap.cxx
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -DCSF_USE_OPENMP -Isrc/ -IC:\Users\57102\.conda\envs\Env_PCSF\lib\site-packages\numpy\core\include -IC:\Users\57102\.conda\envs\Env_PCSF\include -IC:\Users\57102\.conda\envs\Env_PCSF\include "-IC:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE" "-IC:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\ATLMFC\INCLUDE" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.10150.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.6\include\um" "-IC:\Program Files (x86)\Windows Kits\8.1\include\shared" "-IC:\Program Files (x86)\Windows Kits\8.1\include\um" "-IC:\Program Files (x86)\Windows Kits\8.1\include\winrt" /EHsc /Tpsrc/c2cdist.cpp /Fobuild\temp.win-amd64-3.6\Release\src/c2cdist.obj /openmp /std:c++11
cl: 命令行 warning D9002 :忽略未知选项“/std:c++11”
c2cdist.cpp
src/c2cdist.cpp(56): warning C4267: “参数”: 从“size_t”转换到“const int”,可能丢失数据
src/c2cdist.cpp(58): warning C4267: “参数”: 从“size_t”转换到“const int”,可能丢失数据
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -DCSF_USE_OPENMP -Isrc/ -IC:\Users\57102\.conda\envs\Env_PCSF\lib\site-packages\numpy\core\include -IC:\Users\57102\.conda\envs\Env_PCSF\include -IC:\Users\57102\.conda\envs\Env_PCSF\include "-IC:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE" "-IC:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\ATLMFC\INCLUDE" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.10150.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.6\include\um" "-IC:\Program Files (x86)\Windows Kits\8.1\include\shared" "-IC:\Program Files (x86)\Windows Kits\8.1\include\um" "-IC:\Program Files (x86)\Windows Kits\8.1\include\winrt" /EHsc /Tpsrc/Cloth.cpp /Fobuild\temp.win-amd64-3.6\Release\src/Cloth.obj /openmp /std:c++11
cl: 命令行 warning D9002 :忽略未知选项“/std:c++11”
Cloth.cpp
src/Cloth.cpp(276): warning C4267: “参数”: 从“size_t”转换到“const int”,可能丢失数据
src/Cloth.cpp(293): warning C4267: “参数”: 从“size_t”转换到“const int”,可能丢失数据
src/Cloth.cpp(310): warning C4267: “参数”: 从“size_t”转换到“const int”,可能丢失数据
src/Cloth.cpp(327): warning C4267: “参数”: 从“size_t”转换到“const int”,可能丢失数据
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -DCSF_USE_OPENMP -Isrc/ -IC:\Users\57102\.conda\envs\Env_PCSF\lib\site-packages\numpy\core\include -IC:\Users\57102\.conda\envs\Env_PCSF\include -IC:\Users\57102\.conda\envs\Env_PCSF\include "-IC:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE" "-IC:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\ATLMFC\INCLUDE" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.10150.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.6\include\um" "-IC:\Program Files (x86)\Windows Kits\8.1\include\shared" "-IC:\Program Files (x86)\Windows Kits\8.1\include\um" "-IC:\Program Files (x86)\Windows Kits\8.1\include\winrt" /EHsc /Tpsrc/CSF.cpp /Fobuild\temp.win-amd64-3.6\Release\src/CSF.obj /openmp /std:c++11
cl: 命令行 warning D9002 :忽略未知选项“/std:c++11CSF.cpp
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -DCSF_USE_OPENMP -Isrc/ -IC:\Users\57102\.conda\envs\Env_PCSF\lib\site-packages\numpy\core\include -IC:\Users\57102\.conda\envs\Env_PCSF\include -IC:\Users\57102\.conda\envs\Env_PCSF\include "-IC:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE" "-IC:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\ATLMFC\INCLUDE" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.10150.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.6\include\um" "-IC:\Program Files (x86)\Windows Kits\8.1\include\shared" "-IC:\Program Files (x86)\Windows Kits\8.1\include\um" "-IC:\Program Files (x86)\Windows Kits\8.1\include\winrt" /EHsc /Tpsrc/Particle.cpp /Fobuild\temp.win-amd64-3.6\Release\src/Particle.obj /openmp /std:c++11
cl: 命令行 warning D9002 :忽略未知选项“/std:c++11”
Particle.cpp
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -DCSF_USE_OPENMP -Isrc/ -IC:\Users\57102\.conda\envs\Env_PCSF\lib\site-packages\numpy\core\include -IC:\Users\57102\.conda\envs\Env_PCSF\include -IC:\Users\57102\.conda\envs\Env_PCSF\include "-IC:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE" "-IC:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\ATLMFC\INCLUDE" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.10150.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.6\include\um" "-IC:\Program Files (x86)\Windows Kits\8.1\include\shared" "-IC:\Program Files (x86)\Windows Kits\8.1\include\um" "-IC:\Program Files (x86)\Windows Kits\8.1\include\winrt" /EHsc /Tpsrc/point_cloud.cpp /Fobuild\temp.win-amd64-3.6\Release\src/point_cloud.obj /openmp /std:c++11
cl: 命令行 warning D9002 :忽略未知选项“/std:c++11”
point_cloud.cpp
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -DCSF_USE_OPENMP -Isrc/ -IC:\Users\57102\.conda\envs\Env_PCSF\lib\site-packages\numpy\core\include -IC:\Users\57102\.conda\envs\Env_PCSF\include -IC:\Users\57102\.conda\envs\Env_PCSF\include "-IC:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE" "-IC:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\ATLMFC\INCLUDE" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.10150.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.6\include\um" "-IC:\Program Files (x86)\Windows Kits\8.1\include\shared" "-IC:\Program Files (x86)\Windows Kits\8.1\include\um" "-IC:\Program Files (x86)\Windows Kits\8.1\include\winrt" /EHsc /Tpsrc/Rasterization.cpp /Fobuild\temp.win-amd64-3.6\Release\src/Rasterization.obj /openmp /std:c++11
cl: 命令行 warning D9002 :忽略未知选项“/std:c++11”
Rasterization.cpp
src/Rasterization.cpp(61): warning C4267: “初始化”: 从“size_t”转换到“int”,可能丢失数据
src/Rasterization.cpp(86): warning C4267: “初始化”: 从“size_t”转换到“int”,可能丢失数据
src/Rasterization.cpp(117): warning C4267: “参数”: 从“size_t”转换到“const int”,可能丢失数据
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -DCSF_USE_OPENMP -Isrc/ -IC:\Users\57102\.conda\envs\Env_PCSF\lib\site-packages\numpy\core\include -IC:\Users\57102\.conda\envs\Env_PCSF\include -IC:\Users\57102\.conda\envs\Env_PCSF\include "-IC:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE" "-IC:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\ATLMFC\INCLUDE" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.10150.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.6\include\um" "-IC:\Program Files (x86)\Windows Kits\8.1\include\shared" "-IC:\Program Files (x86)\Windows Kits\8.1\include\um" "-IC:\Program Files (x86)\Windows Kits\8.1\include\winrt" /EHsc /Tpsrc/XYZReader.cpp /Fobuild\temp.win-amd64-3.6\Release\src/XYZReader.obj /openmp /std:c++11
cl: 命令行 warning D9002 :忽略未知选项“/std:c++11”
XYZReader.cpp
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\link.exe /nologo /INCREMENTAL:NO /LTCG /DLL /MANIFEST:EMBED,ID=2 /MANIFESTUAC:NO /LIBPATH:C:\Users\57102\.conda\envs\Env_PCSF\libs /LIBPATH:C:\Users\57102\.conda\envs\Env_PCSF\PCbuild\amd64 "/LIBPATH:C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\LIB\amd64" "/LIBPATH:C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\ATLMFC\LIB\amd64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.10150.0\ucrt\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6\lib\um\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\8.1\lib\winv6.3\um\x64" /EXPORT:PyInit__CSF build\temp.win-amd64-3.6\Release\python/CSF/CSF_wrap.obj build\temp.win-amd64-3.6\Release\src/c2cdist.obj build\temp.win-amd64-3.6\Release\src/Cloth.obj build\temp.win-amd64-3.6\Release\src/CSF.obj build\temp.win-amd64-3.6\Release\src/Particle.obj build\temp.win-amd64-3.6\Release\src/point_cloud.obj build\temp.win-amd64-3.6\Release\src/Rasterization.obj build\temp.win-amd64-3.6\Release\src/XYZReader.obj /OUT:build\lib.win-amd64-3.6\_CSF.cp36-win_amd64.pyd /IMPLIB:build\temp.win-amd64-3.6\Release\python/CSF\_CSF.cp36-win_amd64.lib
CSF_wrap.obj : warning LNK4197: 多次指定导出“PyInit__CSF”;使用第一个规范
  正在创建库 build\temp.win-amd64-3.6\Release\python/CSF\_CSF.cp36-win_amd64.lib 和对象 build\temp.win-amd64-3.6\Release\python/CSF\_CSF.cp36-win_amd64.exp
正在生成代码
已完成代码的生成

采用项目对应的语句代码进行滤波操作,进行实验,实验结果如下图所示。

# -*- coding: utf-8 -*-
"""
Spyder Editor

This is a temporary script file.
"""

import laspy
import numpy as np
import CSF
import time
# import open3d as o3d

file_input = r'E:\CSF-Process_spyder\aerialMap-Cloud.las'
file_out_ground = r'E:\CSF-Process_spyder\aerialMap-Cloud-out_ground.las'
file_out_nonground = r'E:\CSF-Process_spyder\aerialMap-Cloud-out_nonground.las'

def csf_las(file_in, file_out_gd, file_out_nongd):
    # 读取一个las文件
    las = laspy.read(file_in)
    points = las.points 
    # 提取x,y,z,并将其放入一个list
    xyz = np.vstack((las.x,las.y,las.z)).transpose()
    # -----------CSF参数设置------------
    
    csf = CSF.CSF()
    # 粒子设置为不可移动
    csf.params.bSloopSmooth = False
    # 布料网格分辨率
    csf.params.cloth_resolution = 0.1
    # 布料刚性参数(这个刚性参数怎样设置?)
    csf.params.rigidness = 3
    # 步长
    csf.params.time_step = 0.65
    # 点云与布料模拟点的距离阈值
    csf.params.class_threshold = 0.5
    # 最大迭代次数
    csf.params.interations = 200
    
    csf.setPointCloud(xyz)
    # 地面点索引列表
    ground =  CSF.VecInt()
    # 非地面点索引列表
    non_ground = CSF.VecInt()
    # 执行滤波函数
    csf.do_filtering(ground, non_ground)
    
    
    file_ground = laspy.LasData(las.header)
    file_ground.points = points[np.array(ground)]
    file_ground.write(file_out_gd)
    
    file_nonground = laspy.LasData(las.header)
    file_nonground.points = points[np.array(non_ground)]
    file_nonground.write(file_out_nongd)
    
    return xyz[ground], xyz[non_ground]



if __name__ == "__main__":
    time_start = time.time()
    gd,non_gd = csf_las(file_input, file_out_ground, file_out_nonground)
    time_end = time.time()
    time_consume = time_end - time_start

print(time_consume)
print("Done!")

实验结果侧视图:
在这里插入图片描述
实验结果俯视图:
在这里插入图片描述

红色的为非地面点,墨绿色的为地面点。

4 最新方法(为什么没有早点看到)

新建一个自定义的csf运行虚拟环境,pip进行安装,调用即可。
在这里插入图片描述

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值