主要过程
建议直接看标题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++11”
CSF.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进行安装,调用即可。