第三周C++与PCL的学习(3.13-3.19)

目录

第一天3.13 星期一   Qt安装于简单应用

第二天3.14 星期二  ui闪退的解决、PCL的pri文件配置

第三天3.15 星期三  百度地图api的调用以及在Qt中的配置

第四天3.16 星期四  PCM软件的学习

第五天3.17 星期五   数据库的建立和使用

第六天3.18 星期六  Kinect融合、时间复杂度

第七天3.19 星期日  NP难问题、立体复杂度、刚性和非刚性等概念

本周总结:


第一天3.13 星期一   Qt安装于简单应用

今天主要完成的是PCL库的安装与配置和对QT与VS配置时的补充

主要的收货:

1.Qt的更新与插件添加,使用Qt Maintenance Tool

71e06d79ac2b4e3dbe37f5a11170bf11.png

2.Qt在VS2019下的配置

1)在VS的扩展工具里下载并按照QT visual Studio Tool,下载后关闭VS后会自动安装

95074ac6ed0e4ddabb432b6c67ae6771.png

2)再次打开VS打开Qt option选项

eb3c0da7798c44518f2a4c8aff3edbf5.png

3)弹出qt options界面后点击Add按钮弹出以下界面,在点击path最左侧按钮

56bf56efff3e4539b86c2c50e513c695.png

4)添加qt安装目录下msvc2017的qmake即可

468d0f7283704bffb5092d2d8759e2b9.png

3.$$PWD的意思为当前目录

如pro文件中:INCLUDEPATH += $$PWD/lib/x64-win64

$$PWD表示的意思就是pro文件所在的目录。

4.在VS里的QCoreApplication::applicationDirPath()指的是E:\yan1\kaifa\QtWidgetsApplication1\x64\Debug

5.在替换UI文件时,若不想一个一个调整样式,可以直接复制代码

1)复制ui_Text1.h的代码,注意更改名称

2)复制Text1.ui的代码(用notepad++打开),注意更改名称

3)完成更改后使用qt designer打开验证是否成功

第二天3.14 星期二  ui闪退的解决、PCL的pri文件配置

今天主要是练习了使用ChatGPT学英语与看论文的方法,并总结了PCL库的总体安装步骤,同时也找到了github上的很多开源项目以便学习使用

主要收获如下:

6.在VS里若直接点击.ui文件后跳出qt designer过一会报错+闪退,可使用直接打开qt designer再打开.ui文件的方法

7.微信在手机中传的文档在电脑中传不过来的解决办法:

使用手机微信将文档进行多选,然后选择转发,再选择逐个转发即可

8.学习编程语言的基本步骤:

1)总体目标:明确的目标,思维导图,筛选,实践

2)要学的东西:操作系统、计算机组成原理、数据结构、算法、计算机网络、数据库、编程语言(C/C++、Java、Python)

3)主流比赛:ACM-ICPC、topcoder、kaggle...

9.qt支持css2

10.在PCL库安装时最难的一步莫过于是pri文件的配置,需讲该文件放置在pcl的根目录下,其配置文件大致如下:

INCLUDEPATH += $$PWD/include/pcl-1.12
INCLUDEPATH += $$PWD/3rdParty/Boost/include/boost-1_78
INCLUDEPATH += $$PWD/3rdParty/Eigen/eigen3
INCLUDEPATH += $$PWD/3rdParty/FLANN/include
INCLUDEPATH += $$PWD/3rdParty/OpenNI2/Include
INCLUDEPATH += $$PWD/3rdParty/Qhull/include
INCLUDEPATH += $$PWD/3rdParty/VTK/include/vtk-9.1

win32:CONFIG(release, debug|release):{
    LIBS += -L$$PWD/3rdParty/Qhull/lib/ -lqhull_r
}
else:win32:CONFIG(debug, debug|release):{
    LIBS += -L$$PWD/3rdParty/Qhull/lib/ -lqhull_rd
}

win32:CONFIG(release, debug|release):{
    LIBS += -L$$PWD/lib/ -lpcl_filters
    LIBS += -L$$PWD/lib/ -lpcl_io
    LIBS += -L$$PWD/lib/ -lpcl_io_ply
    LIBS += -L$$PWD/lib/ -lpcl_kdtree
    LIBS += -L$$PWD/lib/ -lpcl_keypoints
    LIBS += -L$$PWD/lib/ -lpcl_ml
    LIBS += -L$$PWD/lib/ -lpcl_octree
    LIBS += -L$$PWD/lib/ -lpcl_outofcore
    LIBS += -L$$PWD/lib/ -lpcl_people
    LIBS += -L$$PWD/lib/ -lpcl_recognition
    LIBS += -L$$PWD/lib/ -lpcl_registration
    LIBS += -L$$PWD/lib/ -lpcl_sample_consensus
    LIBS += -L$$PWD/lib/ -lpcl_search
    LIBS += -L$$PWD/lib/ -lpcl_segmentation
    LIBS += -L$$PWD/lib/ -lpcl_stereo
    LIBS += -L$$PWD/lib/ -lpcl_surface
    LIBS += -L$$PWD/lib/ -lpcl_tracking
    LIBS += -L$$PWD/lib/ -lpcl_visualization
    LIBS += -L$$PWD/lib/ -lpcl_common
    LIBS += -L$$PWD/lib/ -lpcl_features
    LIBS += -L$$PWD/3rdParty/FLANN/lib/ -lflann
#    LIBS += -L$$PWD/3rdParty/Qhull/lib/ -lqhullstatic
}
else:win32:CONFIG(debug, debug|release):{
    LIBS += -L$$PWD/lib/ -lpcl_filtersd
    LIBS += -L$$PWD/lib/ -lpcl_io_plyd
    LIBS += -L$$PWD/lib/ -lpcl_iod
    LIBS += -L$$PWD/lib/ -lpcl_kdtreed
    LIBS += -L$$PWD/lib/ -lpcl_keypointsd
    LIBS += -L$$PWD/lib/ -lpcl_mld
    LIBS += -L$$PWD/lib/ -lpcl_octreed
    LIBS += -L$$PWD/lib/ -lpcl_outofcored
    LIBS += -L$$PWD/lib/ -lpcl_peopled
    LIBS += -L$$PWD/lib/ -lpcl_recognitiond
    LIBS += -L$$PWD/lib/ -lpcl_registrationd
    LIBS += -L$$PWD/lib/ -lpcl_sample_consensusd
    LIBS += -L$$PWD/lib/ -lpcl_searchd
    LIBS += -L$$PWD/lib/ -lpcl_segmentationd
    LIBS += -L$$PWD/lib/ -lpcl_stereod
    LIBS += -L$$PWD/lib/ -lpcl_surfaced
    LIBS += -L$$PWD/lib/ -lpcl_trackingd
    LIBS += -L$$PWD/lib/ -lpcl_visualizationd
    LIBS += -L$$PWD/lib/ -lpcl_commond
    LIBS += -L$$PWD/lib/ -lpcl_featuresd
    LIBS += -L$$PWD/3rdParty/FLANN/lib/ -lflann-gd
#    LIBS += -L$$PWD/3rdParty/Qhull/lib/ -lqhullstatic_d
}

win32:CONFIG(release, debug|release):{
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_atomic-vc142-mt-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_bzip2-vc142-mt-x64-1_78.lib
    LIBS += $$PWD/3rdParty/Boost/lib/libboost_chrono-vc142-mt-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_container-vc142-mt-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_context-vc142-mt-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_contract-vc142-mt-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_coroutine-vc142-mt-x64-1_78.lib
    LIBS += $$PWD/3rdParty/Boost/lib/libboost_date_time-vc142-mt-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_exception-vc142-mt-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_fiber-vc142-mt-x64-1_78.lib
    LIBS += $$PWD/3rdParty/Boost/lib/libboost_filesystem-vc142-mt-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_graph_parallel-vc142-mt-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_graph-vc142-mt-x64-1_78.lib
    LIBS += $$PWD/3rdParty/Boost/lib/libboost_iostreams-vc142-mt-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_locale-vc142-mt-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_log_setup-vc142-mt-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_log-vc142-mt-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_math_c99f-vc142-mt-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_math_c99l-vc142-mt-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_math_c99-vc142-mt-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_math_tr1f-vc142-mt-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_math_tr1l-vc142-mt-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_math_tr1-vc142-mt-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_mpi-vc142-mt-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_numpy27-vc142-mt-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_numpy37-vc142-mt-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_program_options-vc142-mt-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_random-vc142-mt-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_regex-vc142-mt-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_serialization-vc142-mt-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_signals-vc142-mt-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_stacktrace_noop-vc142-mt-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_stacktrace_windbg_cached-vc142-mt-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_stacktrace_windbg-vc142-mt-x64-1_78.lib
    LIBS += $$PWD/3rdParty/Boost/lib/libboost_system-vc142-mt-x64-1_78.lib
    LIBS += $$PWD/3rdParty/Boost/lib/libboost_thread-vc142-mt-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_timer-vc142-mt-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_type_erasure-vc142-mt-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_wave-vc142-mt-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_wserialization-vc142-mt-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_zlib-vc142-mt-x64-1_78.lib
}
else:win32:CONFIG(debug, debug|release):{
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_atomic-vc142-mt-gd-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_bzip2-vc142-mt-gd-x64-1_78.lib
    LIBS += $$PWD/3rdParty/Boost/lib/libboost_chrono-vc142-mt-gd-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_container-vc142-mt-gd-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_context-vc142-mt-gd-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_contract-vc142-mt-gd-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_coroutine-vc142-mt-gd-x64-1_78.lib
    LIBS += $$PWD/3rdParty/Boost/lib/libboost_date_time-vc142-mt-gd-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_exception-vc142-mt-gd-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_fiber-vc142-mt-gd-x64-1_78.lib
    LIBS += $$PWD/3rdParty/Boost/lib/libboost_filesystem-vc142-mt-gd-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_graph_parallel-vc142-mt-gd-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_graph-vc142-mt-gd-x64-1_78.lib
    LIBS += $$PWD/3rdParty/Boost/lib/libboost_iostreams-vc142-mt-gd-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_locale-vc142-mt-gd-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_log_setup-vc142-mt-gd-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_log-vc142-mt-gd-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_math_c99f-vc142-mt-gd-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_math_c99l-vc142-mt-gd-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_math_c99-vc142-mt-gd-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_math_tr1f-vc142-mt-gd-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_math_tr1l-vc142-mt-gd-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_math_tr1-vc142-mt-gd-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_mpi-vc142-mt-gd-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_numpy27-vc142-mt-gd-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_numpy37-vc142-mt-gd-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_program_options-vc142-mt-gd-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_random-vc142-mt-gd-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_regex-vc142-mt-gd-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_serialization-vc142-mt-gd-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_signals-vc142-mt-gd-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_stacktrace_noop-vc142-mt-gd-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_stacktrace_windbg_cached-vc142-mt-gd-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_stacktrace_windbg-vc142-mt-gd-x64-1_78.lib
    LIBS += $$PWD/3rdParty/Boost/lib/libboost_system-vc142-mt-gd-x64-1_78.lib
    LIBS += $$PWD/3rdParty/Boost/lib/libboost_thread-vc142-mt-gd-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_timer-vc142-mt-gd-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_type_erasure-vc142-mt-gd-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_wave-vc142-mt-gd-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_wserialization-vc142-mt-gd-x64-1_78.lib
#    LIBS += $$PWD/3rdParty/Boost/lib/libboost_zlib-vc142-mt-gd-x64-1_78.lib
}

win32:CONFIG(release, debug|release):{
    LIBS += $$PWD/3rdParty/VTK/lib/vtkCommonDataModel-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkCommonExecutionModel-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkCommonMath-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkCommonMisc-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkCommonSystem-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkCommonTransforms-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkDICOMParser-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkDomainsChemistry-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkDomainsChemistryOpenGL2-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkdoubleconversion-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkexodusII-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkexpat-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersAMR-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersCore-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersExtraction-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersFlowPaths-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersGeneral-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersGeneric-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersGeometry-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersHybrid-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersHyperTree-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersImaging-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersModeling-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersParallel-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersParallelImaging-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersPoints-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersProgrammable-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersSelection-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersSMP-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersSources-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersStatistics-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersTexture-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersTopology-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersVerdict-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkfreetype-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkGeovisCore-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkgl2ps-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkglew-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkGUISupportQt-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkGUISupportQtSQL-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkhdf5_hl-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkhdf5-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkImagingColor-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkImagingCore-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkImagingFourier-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkImagingGeneral-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkImagingHybrid-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkImagingMath-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkImagingMorphological-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkImagingSources-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkImagingStatistics-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkImagingStencil-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkInfovisCore-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkInfovisLayout-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkInteractionImage-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkInteractionStyle-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkInteractionWidgets-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOAMR-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOAsynchronous-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOCityGML-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOCore-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOEnSight-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOExodus-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOExport-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOExportPDF-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOGeometry-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOImage-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOImport-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOInfovis-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOLegacy-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOLSDyna-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOMINC-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOMovie-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIONetCDF-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOParallel-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOParallelXML-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOPLY-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOSegY-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOSQL-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOTecplotTable-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOVeraOut-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOVideo-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOXML-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOXMLParser-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkjpeg-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkjsoncpp-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtklibharu-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtklibxml2-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtklz4-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtklzma-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkmetaio-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkNetCDF-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkogg-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkParallelCore-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkpng-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkpugixml-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkRenderingAnnotation-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkRenderingContext2D-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkRenderingContextOpenGL2-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkRenderingCore-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkRenderingFreeType-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkRenderingGL2PSOpenGL2-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkRenderingImage-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkRenderingLabel-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkRenderingLOD-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkRenderingOpenGL2-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkRenderingQt-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkRenderingVolume-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkRenderingVolumeOpenGL2-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtksqlite-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtksys-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtktheora-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtktiff-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkverdict-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkViewsContext2D-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkViewsCore-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkViewsInfovis-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkViewsQt-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkzlib-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkChartsCore-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkCommonColor-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkCommonComputationalGeometry-9.1.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkCommonCore-9.1.lib
}
else:win32:CONFIG(debug, debug|release):{
    LIBS += $$PWD/3rdParty/VTK/lib/vtkCommonDataModel-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkCommonExecutionModel-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkCommonMath-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkCommonMisc-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkCommonSystem-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkCommonTransforms-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkDICOMParser-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkDomainsChemistry-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkDomainsChemistryOpenGL2-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkdoubleconversion-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkexodusII-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkexpat-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersAMR-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersCore-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersExtraction-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersFlowPaths-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersGeneral-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersGeneric-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersGeometry-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersHybrid-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersHyperTree-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersImaging-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersModeling-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersParallel-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersParallelImaging-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersPoints-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersProgrammable-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersSelection-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersSMP-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersSources-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersStatistics-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersTexture-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersTopology-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkFiltersVerdict-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkfreetype-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkGeovisCore-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkgl2ps-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkglew-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkGUISupportQt-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkGUISupportQtSQL-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkhdf5_hl-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkhdf5-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkImagingColor-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkImagingCore-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkImagingFourier-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkImagingGeneral-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkImagingHybrid-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkImagingMath-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkImagingMorphological-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkImagingSources-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkImagingStatistics-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkImagingStencil-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkInfovisCore-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkInfovisLayout-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkInteractionImage-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkInteractionStyle-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkInteractionWidgets-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOAMR-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOAsynchronous-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOCityGML-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOCore-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOEnSight-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOExodus-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOExport-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOExportPDF-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOGeometry-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOImage-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOImport-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOInfovis-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOLegacy-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOLSDyna-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOMINC-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOMovie-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIONetCDF-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOParallel-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOParallelXML-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOPLY-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOSegY-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOSQL-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOTecplotTable-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOVeraOut-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOVideo-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOXML-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkIOXMLParser-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkjpeg-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkjsoncpp-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtklibharu-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtklibxml2-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtklz4-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtklzma-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkmetaio-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkNetCDF-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkogg-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkParallelCore-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkpng-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkpugixml-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkRenderingAnnotation-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkRenderingContext2D-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkRenderingContextOpenGL2-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkRenderingCore-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkRenderingFreeType-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkRenderingGL2PSOpenGL2-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkRenderingImage-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkRenderingLabel-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkRenderingLOD-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkRenderingOpenGL2-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkRenderingQt-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkRenderingVolume-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkRenderingVolumeOpenGL2-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtksqlite-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtksys-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtktheora-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtktiff-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkverdict-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkViewsContext2D-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkViewsCore-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkViewsInfovis-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkViewsQt-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkzlib-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkChartsCore-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkCommonColor-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkCommonComputationalGeometry-9.1d.lib
    LIBS += $$PWD/3rdParty/VTK/lib/vtkCommonCore-9.1d.lib
}

第三天3.15 星期三  百度地图api的调用以及在Qt中的配置

今天主要是完成了百度地图api的调用和qt界面的代码编写

主要收获有:

1.网络上找了很多个百度地图调用的方法,尝试了很多次,最后终于成功,尝试过后正确的方法如下:

1)使用VS新建项目,一定要选MSVC项目,添加模块时添加QtWebEngineWidgets的相关模块

2)在.h中输入 

#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_QtWidgetsApplication1.h"
#include <QWidget>
#include <QWebEngineHistory>
#include <QWebEngineHistoryItem>
#include <QWebEnginePage>
#include <QWebEngineView>
#include <QtWebEngineWidgets/QtWebEngineWidgets>

namespace Ui {
    class QtWidgetsApplication1;
}
class QtWidgetsApplication1 : public QMainWindow
{
    Q_OBJECT
public:
    explicit QtWidgetsApplication1(QWidget *parent = nullptr);
    ~QtWidgetsApplication1();
private:
    Ui::QtWidgetsApplication1Class ui;

3)在.app中输入

#include "QtWidgetsApplication1.h"

QtWidgetsApplication1::QtWidgetsApplication1(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
    QString htmlPath = QCoreApplication::applicationDirPath() + "/html/";
    QString htmlFile = htmlPath + "index.html";
    qDebug() << htmlFile; /* 获取你要显示网页的路径 */
    QFile file(htmlFile);
    if (!file.exists())
        qDebug() << "html file is not exist";
    /* 创建一个与网页交互的通道 */
    QWebChannel* webChannel = new QWebChannel(ui.webEngineView->page());
    ui.webEngineView->page()->setWebChannel(webChannel);
    /* 注册通道,ID 为 JSInterface,其将在JS文件这引用 */
    webChannel->registerObject(QString("JSInterface"), ui.webEngineView);
    /* 加载网页,注意加载网页必须在通道注册之后,其有有一个注册完成的信号,
       可根据需要调用 */
    ui.webEngineView->page()->load(QUrl("file:///" + htmlFile));
}

QtWidgetsApplication1::~QtWidgetsApplication1()
{}

4)编写index.html文件

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<style type="text/css">
body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;font-family:"微软雅黑";}
</style>
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=你申请的密钥"></script>
<title>周边搜索</title>
<script type="text/javascript" >
  function calltoqt()
  {
    var nameArray;
    nameArray = document.getElementsByName("username");
    var pwdArray;
    pwdArray = document.getElementsByName("userpwd");
    var mytxtArray;
    mytxtArray = document.getElementsByName("textarea");
    BDWebkit.onCallfromJs(nameArray[0].value,pwdArray[0].value,mytxtArray[0].value);

  }
  function callfromqt(name,local2,xL,yL)
  {
     var map = new BMap.Map("allmap");            // 创建Map实例
     map.centerAndZoom(new BMap.Point(xL, yL), 11);

     var local = new BMap.LocalSearch(map, {
     renderOptions:{map: map, autoViewport:true}
     });
     local.searchNearby(name, local2);
     //alert("欢迎进入本市 "+local2+"搜索 "+name);
  }
</script>
</head>
<body>
<div id="allmap"></div>
</body>
</html>
<script type="text/javascript">
// 百度地图API功能
     var map = new BMap.Map("allmap");            // 创建Map实例
map.centerAndZoom(new BMap.Point(116.404, 39.915), 11);
var local = new BMap.LocalSearch(map, {
  renderOptions:{map: map, autoViewport:true}
    });
    local.searchNearby("加油站", "长沙");
</script>

5)将html文件放在E:\yan1\kaifa\QtWidgetsApplication1\x64\Debug下

2.申请百度地图api时,要选择浏览器端,白名单里输入*

3.有时用qt creater开发时缺少某些库,用VS开发会更好一点

第四天3.16 星期四  PCM软件的学习

今天主要完成了对PCM软件的学习,主要收获如下,基本都是对基本功能和界面操作的学习:

1.添加数据(栅格、矢量、DEM、点云、模型)与新建项目

2.文件管理:新建、打开、保存、删除…

3.视图:自由排列窗口、创建视图后要将数据切换视图切换过来

4.F11进入和退出全屏显示

5.设置:类别设置、风格设置、缩放设置

6.多种不同的渲染方式,其中自定义渲染+单木分割

7.各种视角与正射和透视视图

8.2d/3d漫游,剖面图:打开后框选区域

9.点选工具,属性设置、标签设置

10.裁剪:点云内/外裁剪(需要先矩形/多边形框选),若没有裁剪好,可选择取消

11.框选工具都是点一下,再点一下;多边形时用右键结束框选,选定框中的点云

12.点云工具:坐标转换、属性统计、特征统计

13.文件工具:批量导入/导出、自定义导出、数据分块/合并、裁剪(按圆形、矩形、shp)、筛选(按高程、强度、类型、回波)

14.建筑物应用:建筑物提取、简易模型、精细模型

15.点云分类:

1)基于机器学习的分类:提供了(随机森林、神经网络、lightGBM)三种方式

要分别选择训练数据和待分类数据

决策树数目过少容易欠拟合,过多容易过拟合

2)按模型分类:选择模型(训练好的)和待分类数据

16.点云滤波:CSF滤波(山地最软、丘陵中等、平原最硬)、形态学滤波、移动曲面滤波、    坡度滤波、三角网滤波

17.数字高程模型(反距离加权平均/不规则三角网)、数字表面模型、冠层高度模型/点云生产CHM

18.高程归一化:详见说明书P103

a.加载的为.PCMData的地面文件

1)先对原始点云数据进行滤波

2)按类别筛选,筛选出地面点,然后保存

3)进行高程归一化

b.加载.tif的地面文件

1)先加载滤波后的点云数据,生成dem

2)进行高程归一化

19.基于地面点的高程归一化,没有地面点就先滤波生成地面点

20.高程反归一化:将归一化后的高程值反算为真是高程值

21.分类(这里只能分出一个类别):

1)按矢量边界分类:需结合矢量数据

2)按离地高差分类:首先对原始点云进行滤波;生成DEM;分类

3)基于地面点的高差分类:3)与2)参照18月19的关系

4)按高程分类:设置最小高程和最大高程

5)按强度分类:同上

6)按回波分类:同上

22.林业应用:

注:树冠边界文件为CHM分割生成的shp文件

1)参数统计(在使用该模块前,所有数据必须先归一化处理)

(要选择输出为tif还是csv,前两个最好是csv,后三个最好是tif):高程参数、强度参数、覆盖率、间隙率、叶面积指数

2)基于点云分割单木(需dem)、基于CHM分割单木(需chm)、基于树冠边界分割单木(需shp)

3)清楚单木分割结果

4)提取单木结构参数

5)生成单木简易模型

6)基于单木编号提取点云、基于树冠边界提取点云

23.电力应用:——看的论文也少、没有数据

1)树木倒状分析

2)地物变化检测

3)杆塔倾斜检测

4)数据矢量化——模型(osgb)+贴图

5) 数据分类…

24.其他说明书中未有的新加功能:都在工具-点云工具里
1)采样——让点变稀疏

2)去噪

3)投影——投影到平面

4)距离计算——计算两点云之间的距离

5)凸包提取

第五天3.17 星期五   数据库的建立和使用

今天主要是完成了软件数据的加载,对数据库的建立和使用也更深了一步,主要收获如下:

1.使用Python完成对一段字符串中某种标点符号的统计

string_column = 'GPST,e-baseline(m),n-baseline(m),u-baseline(m),Q,ns,sde(m),sdn(m),sdu(m),sden(m),sdnu(m),sdue(m),age(s),ratio'
df = string_column.count(",")
print(df)
#计算出13个逗号

text = 'GPST,e-baseline(m),n-baseline(m),u-baseline(m),Q,ns,sde(m),sdn(m),sdu(m),sden(m),sdnu(m),sdue(m),age(s),ratio'
tags = text.split(',')
number = len(tags)
print(number)
#用逗号进行分割,一共计算出14段

2.读取txt文件中的数据再写入Excel中

import xlwt

def writeinexcel():
    f = open('data.txt', 'r', encoding='utf-8')  # 打开数据文本文档,注意编码格式的影响
    wb = xlwt.Workbook(encoding='utf-8')  # 新建一个excel文件
    ws1 = wb.add_sheet('first')  # 添加一个新表,名字为first
    ws1.write(0, 0, '名称')
    ws1.write(0, 1, '播放数')
    ws1.write(0, 2, '追番人数 ')
    ws1.write(0, 3, ' 弹幕数')
    ws1.write(0, 4, '点赞数量')
    ws1.write(0, 5, '投币数')
    row = 1  # 写入的起始行
    col = 0  # 写入的起始列
    # 通过row和col的变化实现指向单元格位置的变化
    k = 1
    for lines in f:
        a = lines.split(',')  # txt文件中每行的内容按逗号分割并存入数组中
        k += 1
        for i in range(len(a)):
            ws1.write(row, col, a[i])  # 向Excel文件中写入每一项
            col += 1
        row += 1
        col = 0
    wb.save("数据表.xls")
if __name__ == "__main__":
    writeinexcel()

3.Python中报错'utf-8' codec can't decode byte 0xd0 in position 0: invalid continuation byte

可能需要将txt按默认格式保存,或更改encoding='utf-8',若还是不行就重新生成txt

4.将Excel数据导入到sqlite中:在sqlite中新建连接,然后右键表导入向导

第六天3.18 星期六  Kinect融合、时间复杂度

今天完成了软件中数据表的添加,同时也开始阅读论文,了解了诸如鲁棒性、时间复杂度、Kinect融合、四叉树、几何哈希结构等概念,主要收获如下:

1.查找和替换内容用文本编辑器比用Python方便

2.使用Python将txt转化为Excel后要记得替换掉最后一列的换行符,否则在数据库的使用时会在数字后产生…的符号

3.ui.setupUi(this);为主界面初始化方法,其他的方法一定要放到它之后

4.C++中汉字乱码,使用QStringLiteral()函数

5.鲁棒性:鲁棒性(Robustness)是指一个系统或算法对于输入数据的异常情况的处理能力,即在输入数据包含异常值、噪声或错误时,系统或算法仍能正常工作并产生合理的结果。鲁棒性强的系统或算法具有更好的稳定性和可靠性,能够应对多种情况下的数据干扰和噪声。在计算机视觉、图像处理等领域中,鲁棒性是评价算法质量的一个重要指标,尤其在实际应用中,输入数据常常存在噪声、遮挡、畸变等异常情况,因此算法的鲁棒性是保证算法正确性和稳定性的关键因素之一。

6.时间复杂度:

时间复杂度是指算法在执行过程中所需要的时间资源的量度。它通常用大O符号表示,例如$O(1)$、$O(n)$、$O(n^2)$等。其中,$n$ 表示输入数据的规模,也就是算法需要处理的数据的数量。

时间复杂度反映了算法的运行时间与输入规模之间的关系,可以用来衡量算法的运行效率。一般来说,时间复杂度越低的算法,其执行效率越高。

需要注意的是,时间复杂度只考虑了算法运行所需要的基本操作次数,而没有考虑到具体的机器硬件和软件环境,因此它只是一种理论上的分析方法,不能完全反映算法的实际执行效率。在实际应用中,需要综合考虑算法的时间复杂度、空间复杂度以及具体的运行环境等因素,来评估算法的优劣和适用性。

7.四叉树:

四叉树是一种常用于处理二维空间数据的数据结构,它通过将空间划分为四个象限,将数据逐层划分为子节点来实现对数据的组织和检索。

具体来说,四叉树是一棵四叉树,它的根节点代表整个空间,它的四个子节点代表空间被划分为的四个象限,依次递归划分下去,直到每个节点不再包含多于一个数据点为止。在实际应用中,四叉树通常用于快速地查找一个点在给定范围内的所有数据点。

由于四叉树的特点是空间上的快速递归和分割,所以它被广泛应用于计算机图形学、计算机视觉、地理信息系统等领域,例如在点云配准中,四叉树可以用来提高点云数据的检索和匹配效率。

8.几何哈希结构:

几何哈希结构是一种常用于处理三维空间数据的数据结构,它通过将空间划分为离散的网格单元,并将数据点映射到对应的网格单元中,实现对数据的组织和检索。

具体来说,几何哈希结构首先将空间划分为 $k \times k \times k$ 个离散的网格单元,然后将每个数据点映射到对应的网格单元中。在实际应用中,几何哈希结构通常用于快速地查找一个点在给定范围内的所有数据点。

由于几何哈希结构的特点是离散化和分割,所以它也被广泛应用于计算机图形学、计算机视觉、地理信息系统等领域,例如在点云配准中,几何哈希结构可以用来提高点云数据的检索和匹配效率。与四叉树相比,几何哈希结构的优点是在高维空间中也能有效地处理数据。

9.Kinect融合:

Kinect融合是一种三维点云配准技术,用于将多个相机或传感器采集的三维点云数据融合成一个更完整、更准确的三维模型。Kinect是一款基于结构光原理的三维摄像头,它可以通过投射结构光并捕捉反射光来获取场景的深度信息。

在Kinect融合中,首先需要对每个相机或传感器采集的点云数据进行预处理,例如去除离群点、进行下采样等。然后,通过使用点云配准算法,将每个点云数据与参考坐标系对齐,并将它们融合到一起形成一个更大的点云数据。最后,可以使用三角剖分算法将点云数据转换为三角面片,并进行纹理映射和渲染,生成一个完整的三维模型。

Kinect融合广泛应用于虚拟现实、机器人导航、建筑设计等领域。它可以帮助我们快速地构建出真实场景的三维模型,用于模拟、可视化和分析。

10.Kinect融合的优缺点:

优点:

  1. 三维重建效果好:Kinect融合可以利用多个深度传感器获得更多的点云数据,进而得到更加精细、准确的三维重建模型。
  2. 鲁棒性高:多个深度传感器可以相互补偿,降低了单个传感器因环境噪声、遮挡等原因造成的点云数据偏差,从而提高了三维重建的鲁棒性。
  3. 实时性强:Kinect融合可以利用GPU进行并行加速,大幅提升点云数据处理速度,适用于实时应用场景。

缺点:

  1. 系统成本高:需要多个深度传感器、相应的数据处理设备等硬件设备,成本较高。
  2. 系统复杂度高:需要对多个传感器的数据进行同步和校准,同时需要进行数据融合和处理,算法实现较为复杂。
  3. 对环境依赖性强:多个深度传感器需要安装在恰当的位置和角度,同时需要考虑环境因素对点云数据采集和处理的影响,从而影响了系统的可用性和应用范围。

综上所述,Kinect融合具有高质量的三维重建效果、鲁棒性和实时性等优点,但也存在硬件成本高、算法实现复杂和环境依赖性强等缺点。在实际应用中,需要权衡这些因素,选择合适的深度传感器和融合算法,以满足具体应用的需求。

第七天3.19 星期日  NP难问题、立体复杂度、刚性和非刚性等概念

今天主要进行了论文的阅读,将阅读论文所用到的软件、网站等逐步进行固化,其中收获了许多概念知识,诸如最小二乘法、刚性识别、收敛性保证、共轭集、NP难问题、立体复杂度等概念,其主要收获如下:

1.NP难问题

NP难问题指的是非确定性多项式时间(Non-deterministic Polynomial time)问题的困难问题,也就是说这类问题的解决算法需要指数级的计算时间,不可能在多项式时间内求解。这种问题被认为是计算机科学中最难解决的问题之一,目前没有有效的通用算法可以解决NP难问题。

NP难问题是计算机科学和理论计算机科学领域中的重要问题,许多实际应用问题都可以归约为NP难问题,例如旅行商问题、背包问题、图着色问题等。虽然NP难问题不能在多项式时间内求解,但是一些近似算法可以在可接受的时间内给出较优解。另外,一些具有特殊结构的NP难问题可以在特殊情况下得到多项式时间解决方案,这类问题被称为NP完全问题。

2.立体复杂度

立体复杂度(stereo complexity)是指用于立体匹配的算法所需计算的操作数量,通常指算法对每个像素或图像块的计算量。因为立体匹配需要对每个像素或图像块进行匹配,而图像通常包含成千上万个像素,因此立体匹配算法的复杂度非常高,这是立体匹配算法优化的重要目标之一。

立体复杂度的大小取决于立体匹配算法的实现方式、计算的特征、匹配算法等因素。常用的立体匹配算法包括基于局部区域的方法、基于全局优化的方法、基于神经网络的方法等,它们的计算量和计算方式都不相同。因此,评估一个立体匹配算法的优劣需要考虑多个指标,其中立体复杂度是其中一个重要的指标之一。

3.仿生变换

仿生变换(Affine Transformation)是指在二维或三维空间中,对于一个对象或者图形,通过一系列线性变换和平移,使其发生形状的变化和位置的平移的过程。仿生变换包括旋转、缩放、平移、错切等几何变换。

在二维仿生变换中,通常使用一个2x3的仿射矩阵来表示变换,矩阵的前两列表示旋转、缩放和错切,第三列表示平移。

在三维仿生变换中,通常使用一个4x4的仿射矩阵来表示变换,矩阵的前三列表示旋转、缩放和错切,第四列表示平移。

仿生变换广泛应用于计算机视觉、图像处理、机器人、虚拟现实等领域。例如,在计算机视觉中,图像配准时常常需要对图像进行仿生变换,以使两幅图像在同一坐标系下对齐。

4.共轭集和非共轭集

共轭集(Conjugate Gradient,CG)是一种用于解决线性方程组的迭代算法。它可以高效地解决大规模、稀疏、对称、正定的线性方程组,如常见的最小二乘问题、非线性方程组等。

CG算法的思路是在每一次迭代中,利用之前的搜索方向信息,得到一个新的搜索方向,使得这个方向与之前的搜索方向相互垂直(即共轭)。在每一次迭代中,先通过搜索方向确定一个最小化残差的步长,然后在新的搜索方向上继续寻找下一个最优解,并且保证每个新的搜索方向与之前的所有搜索方向都共轭。

相比于传统的高斯-约旦消元等直接解法,CG算法具有较好的数值稳定性和计算效率。它在解决大规模线性方程组时通常比直接法更为有效。此外,CG算法还可以应用于非线性方程组求解、优化问题等方面。

在数值优化或线性方程组求解中,共轭和非共轭是两个概念,常常用来描述不同的优化算法或求解算法。

共轭的意思是“相互垂直”,在数值优化或线性方程组求解中,共轭通常指在每一步迭代中,搜索方向相互垂直的性质。共轭的概念最早由Hestenes和Stiefel在共轭梯度法中引入,后来发展出了各种共轭梯度法、共轭残差法等共轭算法。

非共轭则表示相互之间没有垂直的性质。在求解线性方程组时,非共轭的算法通常是直接求解,如高斯-约旦消元法、LU分解法等。这些算法不利用搜索方向的共轭性质,因此可能需要更多的迭代次数和计算时间。

总的来说,共轭算法在求解线性方程组或数值优化问题时往往比非共轭算法更有效,因为它们利用了搜索方向的共轭性质,可以更快地收敛到最优解。

5.刚性和非刚性识别

刚性识别是指识别物体时假设物体是刚体,即物体的形状和尺寸不会随着视角的改变而改变。在刚性识别中,通常使用特征点匹配或模板匹配等方法来确定物体的位置和姿态。

非刚性识别则是考虑到物体可能存在形变或非刚性变形,例如物体的形状可能会因为外部力的作用而发生改变。在非刚性识别中,通常需要对物体的形变进行建模,以便准确地进行物体的识别和跟踪。

刚性和非刚性识别各有优缺点,应根据具体应用场景进行选择。例如,刚性识别适用于对静态物体进行识别和跟踪,而非刚性识别则更适用于对动态物体或需要进行精细形状分析的物体进行识别和跟踪。

物体形状:

  • 刚性:例如球、立方体、圆柱体等几何体,在不考虑物体形变的情况下,它们的形状和尺寸保持不变。
  • 非刚性:例如布料、软泥、沙子等材料,在外力作用下,它们的形状和尺寸会发生变化。

物体运动:

  • 刚性:例如坦克、飞机、机器人等机械设备,在运动过程中,它们的形状和尺寸保持不变。
  • 非刚性:例如翻滚的球、弹跳的橡胶球、柔软的绳索等,它们在运动过程中会发生形变或者非刚性变形。

在计算机视觉中,刚性和非刚性的区别常常涉及到物体的运动和变形。例如,对于刚性物体的识别和跟踪,可以使用特征点匹配和姿态估计等方法;对于非刚性物体的识别和跟踪,需要考虑物体的形变和变形,并采用更复杂的建模和算法来实现。

6.表面描述符

表面描述符是指在三维形状表面上计算得到的一组特征向量或特征描述符,用于表示物体的形状、几何结构或表面纹理等信息。这些描述符可用于识别、分类、匹配或比较不同的物体或形状。

表面描述符通常由三维模型或点云数据计算得到。常见的表面描述符包括形状上下文描述符(Shape Context Descriptor)、法向量直方图描述符(Normal Histogram Descriptor)、尺度不变特征变换描述符(Scale-Invariant Feature Transform Descriptor,SIFT)、快速海森矩阵描述符(Fast Hessian Descriptor,SURF)等。

表面描述符在计算机视觉、机器人、虚拟现实、图像处理等领域有着广泛的应用。例如,在三维物体识别中,通过计算不同物体的表面描述符,可以对不同的物体进行分类和识别;在三维重建和建模中,可以通过计算表面描述符来提取物体的几何信息,实现三维建模和可视化;在虚拟现实和游戏开发中,表面描述符可以用于实现高保真度的物体渲染和交互。

7.刚性非刚性识别和表面描述符的区别

刚性和非刚性识别是一种物体识别的分类方法,它是根据物体在运动或形变过程中是否保持其原有形状而划分的。刚性物体在运动或形变过程中形状保持不变,而非刚性物体在运动或形变过程中形状会发生变化。在机器视觉和计算机图形学中,刚性和非刚性识别常用于物体跟踪、物体识别等应用中。

表面描述符是一种用于描述物体形状和几何特征的数学工具。它是在三维空间中计算得到的一组向量或特征描述符,可以用于表示物体的形状、几何结构或表面纹理等信息。常用的表面描述符有形状上下文描述符(Shape Context Descriptor)、法向量直方图描述符(Normal Histogram Descriptor)、尺度不变特征变换描述符(Scale-Invariant Feature Transform Descriptor,SIFT)等。在机器视觉、计算机图形学等领域中,表面描述符被广泛应用于三维物体识别、三维重建和建模、虚拟现实等领域中。

因此,刚性和非刚性识别和表面描述符是两个不同的概念,它们在机器视觉和计算机图形学中都有着重要的应用。

8.收敛性保证

在计算机科学和数学中,收敛性保证是指一个算法或方法在运行过程中,能够保证最终得到一个正确的结果,并且这个结果是符合预期的。具体来说,收敛性保证是指随着算法或方法的迭代或计算次数增加,其输出结果逐渐接近最优解或理论解,并且在一定条件下,最终可以收敛到预期的结果。

通常情况下,为了保证算法或方法的收敛性,需要满足一些数学条件或假设,例如算法必须满足单调性、有界性、连续性等性质。此外,对于一些特殊的问题,如优化问题、方程求解问题、迭代求解问题等,可以使用一些特殊的方法来保证算法的收敛性,例如梯度下降、牛顿法、Jacobi迭代、Gauss-Seidel迭代等。

总之,收敛性保证是指在算法或方法的运行过程中,能够保证其最终得到的结果符合预期,并且在一定条件下能够收敛到预期的结果。这是保证算法正确性和实用性的重要前提。

9.最小二乘法

最小二乘法是一种数学优化方法,用于拟合数据点并估计相关的参数。其基本思想是通过最小化残差平方和来确定最优的参数估计值。通常情况下,最小二乘法被用来拟合线性模型,但也可以用于非线性模型的拟合。

最小二乘法的目标是找到一组参数,使得拟合曲线与实际数据点的距离最小化。其具体实现过程是通过求解一个方程组来确定模型参数。假设我们有N个数据点,每个数据点的横坐标为x,纵坐标为y,而模型的拟合函数为y=f(x,θ),其中θ是模型参数。则最小二乘法的优化目标是找到最优的θ值,使得所有数据点的残差平方和最小,即:

$$\sum_{i=1}^{N}(y_i-f(x_i,\theta))^2$$

求解最小二乘问题的一种常见方法是通过对残差平方和的一阶导数进行求解,得到一个方程组,然后通过数值方法求解这个方程组来确定最优的θ值。

最小二乘法在许多领域都有广泛的应用,例如数据拟合、曲线拟合、回归分析、信号处理等。它是一种简单而有效的统计工具,可以帮助我们估计模型参数并从实际数据中发现规律。

10.最小二乘法的基本步骤

  1. 定义模型:选择一个合适的数学模型,该模型能够解释数据集中的变化规律。

  2. 构造误差函数:对于给定的数据集,计算每个样本点的误差,通常是通过计算每个样本点与拟合模型的预测值之间的差距来实现的。

  3. 求解最小化误差函数的参数:使用数学优化方法,通过求解误差函数的一阶导数(也就是梯度),找到使误差函数最小的模型参数。这通常需要解一个线性方程组,因此最小二乘法常常被称为线性最小二乘。

  4. 评估拟合的质量:通过计算拟合的误差或者相关的统计量来评估拟合的质量。常见的评估指标包括均方误差(Mean Squared Error, MSE)、拟合优度(Coefficient of Determination, R-squared)等。

最小二乘法是一种非常通用的拟合方法,可以用于拟合任何具有确定函数形式的模型。由于它的计算简单、易于理解和解释,因此在各种领域都有广泛应用,例如线性回归、曲线拟合、信号处理、图像处理、机器学习等。

11.最小二乘法的代码实现

import numpy as np

# 生成一些样本数据
x = np.array([1, 2, 3, 4, 5])
y = np.array([2.1, 4.2, 6.0, 8.1, 10.2])

# 定义模型函数
def linear_model(x, a, b):
    return a * x + b

# 定义误差函数
def error_func(params, x, y):
    a, b = params
    y_pred = linear_model(x, a, b)
    return y - y_pred

# 求解最小二乘问题
from scipy.optimize import least_squares
params0 = np.array([1.0, 1.0])
res = least_squares(error_func, params0, args=(x, y))

# 输出拟合结果
a, b = res.x
print("a:", a)
print("b:", b)

# 可视化拟合结果
import matplotlib.pyplot as plt
plt.plot(x, y, "ro")
plt.plot(x, linear_model(x, a, b), "b-")
plt.show()
  1. 首先,我们导入了 NumPy 库,用于支持数组和矩阵操作。

  2. 接着,我们生成了一些样本数据,其中 $x$ 是自变量,$y$ 是因变量。这些数据点中的关系被假设为线性的。

  3. 然后,我们定义了一个 linear_model 函数,用于计算给定参数 $a$ 和 $b$ 时的预测值 $y_{pred}$。

  4. 接着,我们定义了一个误差函数 error_func,该函数计算实际值 $y$ 与预测值 $y_{pred}$ 之间的差距。我们的目标是最小化这个误差函数。

  5. 接下来,我们使用 least_squares 函数来求解最优的模型参数 $a$ 和 $b$。该函数需要

  6. 提供一个误差函数和一个初始参数估计值。

  7. 最后,我们输出了拟合结果,并使用 matplotlib 库可视化了拟合的直线和原始数据点。

12.几处代码的解释:

1)a, b = params   

这种写法在 Python 中被称为“多重赋值”(Multiple Assignment),可以使代码更加简洁和优雅。这种写法可以同时为多个变量赋值,避免了需要编写多条赋值语句的情况。在本例中,将 params 数组中的两个元素分别赋值给 ab 两个变量,可以避免使用类似以下的代码:

a = params[0]
b = params[1]

2)为什么least_squares函数在error_func的参数params未定义时就能将error_func作为参数传入

least_squares 函数中,传递给 fun 参数的函数(即 error_func 函数)需要接受一个参数 params,用于表示待优化的参数估计值。但是在定义 error_func 函数时,并没有明确给出 params 参数的定义和初始值,而是将 params 参数的值作为 params0 参数传递给 least_squares 函数,之后再通过最小二乘法迭代求解得到最优值。

这样的写法实际上是为了方便代码的编写和可读性的提高。具体来说,我们可以将 params0params 分别看作待优化的参数估计值的初始值和最优值,在 error_func 函数中,我们假设 params 已经被赋值为最优值,并将其解析为直线斜率和截距,然后计算预测值和真实值之间的残差,作为目标函数的返回值。在 least_squares 函数中,通过迭代计算,将 params0 不断更新为更优的估计值,直到找到最优的参数估计值,之后将其解析为直线斜率和截距,并将其赋值给 params,以供后续使用。

需要注意的是,虽然在 error_func 函数定义中没有显式定义 params 参数,但是在 least_squares 函数中会自动将 params 参数传递给 error_func 函数,并且要求 error_func 函数返回一个长度与样本数量相同的一维数组,用于计算残差或误差。因此,在编写 error_func 函数时,需要确保函数能够接受一个参数 params,并返回正确的结果。

在Python中,函数的参数传递是一种动态的过程,即在调用函数时,实际参数的类型和数量并不需要与定义函数时的形式参数完全匹配。具体来说,如果函数在调用时所传递的实际参数数量比形式参数数量多,那么多余的实际参数将被忽略;如果实际参数数量少于形式参数数量,则必须提供默认值或者通过其他方式来保证所有参数都有值。

在本例中,error_func 函数定义了三个参数 paramsxy,但在调用 least_squares 函数时,只传递了两个实际参数 params0args=(x, y)。由于 args 参数的存在,least_squares 函数会将 xy 作为第二和第三个实际参数传递给 error_func 函数,而 params0 则作为 params 参数的初始值进行迭代求解。因此,尽管在 error_func 函数定义中并没有显式定义 params 参数,但是在实际调用中,params 参数已经被传递并被用于计算残差。因此,虽然 params 参数未定义,但程序并不会报错,而是正常运行,并输出最优的直线斜率和截距。

13.与least_squares函数类似的优化器

  • scipy.optimize.curve_fit: 用于拟合曲线,通过最小化残差平方和来寻找最优参数,基于 Levenberg-Marquardt 算法实现。
  • scipy.optimize.minimize: 通用的优化器,支持多种算法和约束条件,可以用于求解无约束、有约束、非线性、线性、凸优化等多种问题,常用的算法包括共轭梯度法、BFGS、L-BFGS-B 等。
  • numpy.linalg.lstsq: 用于求解线性最小二乘问题,通过求解最小二乘解来寻找最优参数,基于 SVD 分解实现。
  • scikit-learn: 一个广泛使用的机器学习库,包括多种模型和算法,可以用于回归、分类、聚类等任务,其中包括了多种线性模型和非线性模型,如线性回归、岭回归、Lasso、SVR、神经网络等。

14.least_squares函数

least_squares 函数是 scipy 库中用于最小二乘法的优化器之一,它的内部原理是使用 Levenberg-Marquardt 算法来求解非线性最小二乘问题。

Levenberg-Marquardt 算法是一种常用的非线性优化算法,它在 Gauss-Newton 算法的基础上引入了一个参数,使得算法更加稳定和可靠。Levenberg-Marquardt 算法的核心思想是通过不断地调整参数的值来逐步优化目标函数的值,直到满足一定的停止准则。

具体来说,Levenberg-Marquardt 算法通过求解线性化的约束方程来更新参数,其中约束方程是由目标函数对参数的一阶导数和二阶导数构成的矩阵方程。在每次迭代中,算法通过调整一个 damping factor 来平衡一阶导数和二阶导数的影响,使得算法能够更好地处理各种不同的问题。

least_squares 函数中,我们需要提供一个误差函数和初始参数值,算法会自动迭代求解,直到达到一定的停止准则,返回一个优化后的参数值。在求解过程中,我们可以通过设置不同的参数来调整算法的行为,例如设置 damping factor、最大迭代次数、收敛精度等。

本周总结:

1.本周将软件界面基本完成,等待下周进行功能模块的添加和细节上的修改

2.成功完成PCL库的配置,并完成了有关特征提取的代码学习

3.学会了用Python操作Excel的几种方法

4.PCM软件的基本使用都已学习,后续要进一步完成树干的计算

5.学会了百度地图api的调用方法和qt界面模板的套用方法

6.阅读了一篇论文,有关Super4pcs算法,有待进一步研究

猜你喜欢

转载自blog.csdn.net/z377989129/article/details/129567630