Skip to content

Commit 4909da1

Browse files
committed
和VS2015分支同步
1 parent 214fd71 commit 4909da1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

73 files changed

+1114
-150
lines changed

.gitignore

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
#common files
2-
*.jpg
32
*.svn-base
43
reconstruction/x64/
54
CloudOptimization/x64/
65
Kinect2Cloud/x64/
76
BatchProcess/x64/
8-
dlls/
7+
lib/opencv/
98
.svn/
109

1110
# Compiled Object files
@@ -37,7 +36,7 @@ dlls/
3736
#*.lib
3837

3938
# Executables
40-
*.exe
39+
#*.exe
4140
*.out
4241
*.app
4342

CloudOptimization/CCloudOptimization.cpp

Lines changed: 46 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,12 @@ pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_in(new pcl::PointCloud<pcl::PointXYZ>)
77
vector<Eigen::Vector3f> CamCenter;
88
vector<vector<Eigen::Matrix3f>> R;
99
vector<vector<Eigen::Vector3f>> T;
10-
cv::Mat current_img;
10+
uchar * current_img;
1111
int current_img_width, current_img_height;
1212
Eigen::Matrix3f current_R;
1313
Eigen::Vector3f current_T;
1414
void texture_color(float x, float y, float z, uchar rgb[]);
15+
void safe_process(char * cmdLine, DWORD max_time);
1516
class _declspec(dllexport) CCloudOptimization
1617
{
1718
public:
@@ -30,6 +31,11 @@ class _declspec(dllexport) CCloudOptimization
3031
};
3132

3233
inline void reverse(float &x) { x = -x;}
34+
inline void reverse_normal(pcl::PointNormal &input) {
35+
reverse(input.normal_x);
36+
reverse(input.normal_y);
37+
reverse(input.normal_z);
38+
}
3339

3440
void CCloudOptimization::Init(int sor_meank, double sor_stdThres, int outrem_neighbor, double outrem_radius, double mls_radius, CManageData *ImageData, bool isdelete_)
3541
{
@@ -50,7 +56,6 @@ void CCloudOptimization::Init(int sor_meank, double sor_stdThres, int outrem_nei
5056
system(cmd);
5157
}
5258

53-
5459
void CCloudOptimization::InsertPoint(cv::Mat p)
5560
{
5661
cloud_in->push_back(pcl::PointXYZ(p.ptr<double>(0)[0], p.ptr<double>(1)[0], p.ptr<double>(2)[0]));
@@ -80,6 +85,7 @@ void CCloudOptimization::filter(int idx)
8085
sor.setStddevMulThresh (m_sor_stdThres);//face 0.3
8186
sor.filter (*cloud_filtered);
8287
printf("Initial points: %d\n",cloud_in->points.size());
88+
8389
/*
8490
pcl::RadiusOutlierRemoval<pcl::PointXYZ> outrem;
8591
// build the filter
@@ -88,7 +94,7 @@ void CCloudOptimization::filter(int idx)
8894
outrem.setMinNeighborsInRadius (m_outrem_neighbor);
8995
// apply filter
9096
outrem.filter (*cloud_filtered);*/
91-
97+
9298
std::cerr << "Cloud after filtering: " << std::endl;
9399
std::cerr << *cloud_filtered;
94100

@@ -104,71 +110,48 @@ void CCloudOptimization::filter(int idx)
104110
pcl::PointCloud<pcl::PointNormal>::Ptr cloud_normal (new pcl::PointCloud<pcl::PointNormal>);
105111
pcl::concatenateFields(*current_cloud_normals, *cloud_filtered, *cloud_normal);
106112

113+
107114
#pragma omp parallel for
108115
for (int i=0; i<cloud_normal->size(); i++)
109116
{
110117
Eigen::Vector3f current_camdir = CamCenter[idx] - cloud_normal->points[i].getVector3fMap();
111118
Eigen::Vector3f current_direction_normed = cloud_normal->points[i].getNormalVector3fMap();
112119
if (current_direction_normed.dot(current_camdir) < 0)
113-
{
114-
reverse(cloud_normal->points[i].normal_x);
115-
reverse(cloud_normal->points[i].normal_y);
116-
reverse(cloud_normal->points[i].normal_z);
117-
}
120+
reverse_normal(cloud_normal->points[i]);
118121
}
119-
120-
122+
121123
*cloud_normals += *cloud_normal;
122124
char name[MAX_PATH];
123125
pcl::io::savePLYFileBinary("tmp\\cloud_filter.ply", *cloud_normal);
124126
system("mesh.bat");
125127
current_img_width = m_ImageData->cam[idx][0].image.cols;
126128
current_img_height = m_ImageData->cam[idx][0].image.rows;
129+
127130
MyPlyIo myPlyIo(texture_color, 'b');
128131
sprintf(name, "tmp\\color_%d_0.ply", idx);
129-
current_img = m_ImageData->cam[idx][0].image;
132+
current_img = m_ImageData->cam[idx][0].image.data;
130133
current_R = R[idx][0];
131134
current_T = T[idx][0];
135+
132136
if (myPlyIo.ReadAndWrite("tmp\\mesh_trimmer.ply", name))
133137
std::cout << "fail\n";
134138
sprintf(name, "tmp\\color_%d_1.ply", idx);
135-
current_img = m_ImageData->cam[idx][1].image;
139+
current_img = m_ImageData->cam[idx][1].image.data;
136140
current_R = R[idx][1];
137141
current_T = T[idx][1];
138142
if (myPlyIo.ReadAndWrite("tmp\\mesh_trimmer.ply", name))
139143
std::cout << "fail\n";
144+
140145
cloud_in->clear();
146+
141147
}
142148

143149
void CCloudOptimization::run()
144150
{
145-
// Eigen::Vector4f centroid;
146-
// pcl::compute3DCentroid (*cloud,centroid);
147-
// Eigen::Vector3f m_ObjectCenter = Eigen::Vector3f(centroid[0]-50, centroid[1], centroid[2]);
148-
149-
// for (int i=0; i<m_ImageData->m_CampairNum; i++)
150-
// {
151-
// boost::shared_ptr<std::vector<int> > indicesptr_temp (new std::vector<int> (cam_indices[i]));
152-
// pcl::ExtractIndices<pcl::PointXYZ> extract;
153-
// extract.setInputCloud (cloud);
154-
// extract.setIndices (indicesptr_temp);
155-
// extract.setNegative (false);
156-
// extract.filter (*cloud_in);
157-
// char name[100];
158-
// sprintf(name, "cloud_filter%d.ply", i+10);
159-
// pcl::io::savePLYFileBinary(name, *cloud_in);
160-
// }
161-
162151
boost::shared_ptr<std::vector<int> > indicesptr (new vector<int> );
163152
if (isdelete)
164153
{
165154
//TODO:首先计算法向,假设法向正确,用法向和点到相机方向的夹角来判断所属相机
166-
// pcl::io::savePLYFileBinary("tmp\\bigcloud_normal.ply", *cloud_normals);
167-
// pcl::PLYWriter w;
168-
// w.write<pcl::PointNormal>("tmp\\bigcloud_normal.ply", *cloud_normals, false, false);
169-
// system("gen_normals.bat");
170-
// pcl::io::loadPLYFile("tmp\\bigcloud.ply", *cloud_normals);
171-
// cout<<"read succeed"<<endl;
172155
std::cerr << "Cloud before deleting: " << std::endl;
173156
std::cerr << *cloud_normals;
174157
vector<pcl::PointNormal,Eigen::aligned_allocator<pcl::PointNormal>> &points = cloud_normals->points;
@@ -390,57 +373,18 @@ void CCloudOptimization::run()
390373
{
391374
if (cloud_ms_normals->points[i].getNormalVector3fMap().dot(
392375
cloud_normals->points[(*indicesptr)[idx_in_orig[i]]].getNormalVector3fMap()) < 0)
393-
{
394-
reverse(cloud_ms_normals->points[i].normal_x);
395-
reverse(cloud_ms_normals->points[i].normal_y);
396-
reverse(cloud_ms_normals->points[i].normal_z);
397-
}
376+
reverse_normal(cloud_ms_normals->points[i]);
398377
}
399378
}else{
400379
#pragma omp parallel for
401380
for (int i=0; i<idx_in_orig.size(); i++)
402381
{
403382
if (cloud_ms_normals->points[i].getNormalVector3fMap().dot(
404383
cloud_normals->points[idx_in_orig[i]].getNormalVector3fMap()) < 0)
405-
{
406-
reverse(cloud_ms_normals->points[i].normal_x);
407-
reverse(cloud_ms_normals->points[i].normal_y);
408-
reverse(cloud_ms_normals->points[i].normal_z);
409-
}
384+
reverse_normal(cloud_ms_normals->points[i]);
410385
}
411386
}
412-
413-
/*
414-
Eigen::Vector4f centroid;
415-
pcl::compute3DCentroid (*cloud_ms_normals,centroid);
416-
Eigen::Vector3f m_ObjectCenter = Eigen::Vector3f(centroid[0]-50, centroid[1], centroid[2]);
417-
418-
#pragma omp parallel for
419-
for (int i=0; i<cloud_ms_normals->size(); i++)
420-
{
421-
Eigen::Vector3f current_point = cloud_ms_normals->points[i].getVector3fMap();
422-
Eigen::Vector3f current_direction_normed = m_ObjectCenter-current_point;
423-
current_direction_normed /= current_direction_normed.norm();
424-
float min_value = FLT_MAX;
425-
Eigen::Vector3f best_camdir;
426-
for (int j=0; j<m_ImageData->m_CameraNum; j++)
427-
{
428-
Eigen::Vector3f current_camdir = CamCenter[j]-current_point;
429-
float current_value = current_direction_normed.dot(current_camdir)/current_camdir.norm();
430-
if (current_value < min_value)
431-
{
432-
min_value = current_value;
433-
best_camdir = current_camdir;
434-
}
435-
}
436-
if (cloud_ms_normals->points[i].getNormalVector3fMap().dot(best_camdir) < 0)
437-
{
438-
reverse(cloud_ms_normals->points[i].normal_x);
439-
reverse(cloud_ms_normals->points[i].normal_y);
440-
reverse(cloud_ms_normals->points[i].normal_z);
441-
}
442-
}
443-
*/
387+
cloud_normals->clear();
444388

445389
pcl::io::savePLYFileBinary("tmp\\bigcloud.ply", *cloud_ms_normals);
446390
// system("gen_normals.bat");
@@ -450,7 +394,7 @@ void CCloudOptimization::run()
450394
//texture mapping
451395
char cmd[MAX_PATH];
452396
sprintf(cmd, "TextureStitcher.exe --in tmp\\bigmesh.ply --scans scans.txt --out %s --useKD --verbose", m_ImageData->outfilename.c_str());
453-
system(cmd);
397+
safe_process(cmd, 2e4);
454398
}
455399

456400
void texture_color(float x, float y, float z, uchar rgb[])
@@ -470,8 +414,27 @@ void texture_color(float x, float y, float z, uchar rgb[])
470414
rgb[2] = 127;
471415
return ;
472416
}
473-
current_x *= 3;
474-
rgb[2] = current_img.ptr<uchar>(current_y)[current_x];
475-
rgb[1] = current_img.ptr<uchar>(current_y)[current_x+1];
476-
rgb[0] = current_img.ptr<uchar>(current_y)[current_x+2];
477-
}
417+
uchar *base_ptr = current_img + (current_img_width * current_y + current_x) * 3;
418+
rgb[2] = base_ptr[0];
419+
rgb[1] = base_ptr[1];
420+
rgb[0] = base_ptr[2];
421+
}
422+
423+
void safe_process(char * cmdLine, DWORD max_time) {
424+
TCHAR szCmdLine[MAX_PATH];
425+
#ifdef UNICODE
426+
MultiByteToWideChar(CP_ACP, 0, cmdLine, -1, szCmdLine, MAX_PATH);
427+
#else
428+
strcpy(szCmdLine, cmdLine);
429+
#endif
430+
STARTUPINFO si;
431+
PROCESS_INFORMATION pi;
432+
ZeroMemory(&si, sizeof(si));
433+
si.cb = sizeof(si);
434+
ZeroMemory(&pi, sizeof(pi));
435+
if (CreateProcess(NULL, szCmdLine, 0, 0, FALSE, 0, 0, 0, &si, &pi)) {
436+
CloseHandle(pi.hThread);
437+
WaitForSingleObject(pi.hProcess, max_time);
438+
CloseHandle(pi.hProcess);
439+
}
440+
}

CloudOptimization/CCloudOptimization.h

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,43 +2,41 @@
22
#define CCloudOptimization_h
33
#define _CRT_SECURE_NO_WARNINGS
44
#include <iostream>
5-
#include <pcl/PolygonMesh.h>
65
#include <pcl/io/ply_io.h>
7-
#include <pcl/kdtree/kdtree_flann.h>
86
#include <pcl/features/normal_3d_omp.h>
97
#include <pcl/surface/mls.h>
10-
#include <pcl/surface/poisson.h>
8+
//#include <pcl/surface/poisson.h>
119
#include <pcl/filters/statistical_outlier_removal.h>
12-
#include <pcl/filters/radius_outlier_removal.h>
10+
//#include <pcl/filters/radius_outlier_removal.h>
1311
#include <pcl/filters/extract_indices.h>
14-
#include <pcl/segmentation/sac_segmentation.h>
15-
#include <pcl/segmentation/extract_clusters.h>
16-
12+
//#include <pcl/segmentation/sac_segmentation.h>
13+
//#include <pcl/segmentation/extract_clusters.h>
14+
//#include <pcl/kdtree/kdtree_flann.h>
15+
//#include <pcl/PolygonMesh.h>
16+
#include <windows.h>
1717

1818
#include <opencv/eigen.hpp>
1919
#include "../reconstruction/CManageData.h"
2020

2121

2222
#ifdef _DEBUG
23-
#pragma comment (lib, "../../PCL/lib/pcl_common_debug.lib")
24-
#pragma comment (lib, "../../PCL/lib/pcl_kdtree_debug.lib")
25-
#pragma comment (lib, "../../PCL/lib/pcl_io_debug.lib")
26-
#pragma comment (lib, "../../PCL/lib/pcl_io_ply_debug.lib")
27-
#pragma comment (lib, "../../PCL/lib/pcl_surface_debug.lib")
28-
#pragma comment (lib, "../../PCL/lib/pcl_features_debug.lib")
29-
#pragma comment (lib, "../../PCL/lib/pcl_search_debug.lib")
30-
#pragma comment (lib, "../../PCL/lib/pcl_filters_debug.lib")
31-
#pragma comment (lib, "../../PCL/lib/pcl_segmentation_debug.lib")
23+
#pragma comment (lib, "../../PCL_1_6_0/lib/pcl_common_debug.lib")
24+
#pragma comment (lib, "../../PCL_1_6_0/lib/pcl_kdtree_debug.lib")
25+
#pragma comment (lib, "../../PCL_1_6_0/lib/pcl_io_debug.lib")
26+
#pragma comment (lib, "../../PCL_1_6_0/lib/pcl_io_ply_debug.lib")
27+
#pragma comment (lib, "../../PCL_1_6_0/lib/pcl_surface_debug.lib")
28+
#pragma comment (lib, "../../PCL_1_6_0/lib/pcl_features_debug.lib")
29+
#pragma comment (lib, "../../PCL_1_6_0/lib/pcl_search_debug.lib")
30+
#pragma comment (lib, "../../PCL_1_6_0/lib/pcl_filters_debug.lib")
3231
#else
33-
#pragma comment (lib, "../../PCL/lib/pcl_common_release.lib")
34-
#pragma comment (lib, "../../PCL/lib/pcl_kdtree_release.lib")
35-
#pragma comment (lib, "../../PCL/lib/pcl_io_release.lib")
36-
#pragma comment (lib, "../../PCL/lib/pcl_io_ply_release.lib")
37-
#pragma comment (lib, "../../PCL/lib/pcl_surface_release.lib")
38-
#pragma comment (lib, "../../PCL/lib/pcl_features_release.lib")
39-
#pragma comment (lib, "../../PCL/lib/pcl_search_release.lib")
40-
#pragma comment (lib, "../../PCL/lib/pcl_filters_release.lib")
41-
#pragma comment (lib, "../../PCL/lib/pcl_segmentation_release.lib")
32+
#pragma comment (lib, "../../PCL_1_6_0/lib/pcl_common_release.lib")
33+
#pragma comment (lib, "../../PCL_1_6_0/lib/pcl_kdtree_release.lib")
34+
#pragma comment (lib, "../../PCL_1_6_0/lib/pcl_io_release.lib")
35+
#pragma comment (lib, "../../PCL_1_6_0/lib/pcl_io_ply_release.lib")
36+
#pragma comment (lib, "../../PCL_1_6_0/lib/pcl_surface_release.lib")
37+
#pragma comment (lib, "../../PCL_1_6_0/lib/pcl_features_release.lib")
38+
#pragma comment (lib, "../../PCL_1_6_0/lib/pcl_search_release.lib")
39+
#pragma comment (lib, "../../PCL_1_6_0/lib/pcl_filters_release.lib")
4240
#endif
4341

4442

CloudOptimization/CloudOptimization.vcxproj

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,22 +96,23 @@
9696
<FunctionLevelLinking>true</FunctionLevelLinking>
9797
<IntrinsicFunctions>true</IntrinsicFunctions>
9898
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
99-
<AdditionalIncludeDirectories>..\..\PCL\3rdParty\VTK\include\vtk-5.8;..\..\PCL\include\;..\..\PCL\3rdParty\Eigen\include;..\..\PCL\3rdParty\Boost\include;..\..\PCL\3rdParty\FLANN\include;..\include</AdditionalIncludeDirectories>
99+
<AdditionalIncludeDirectories>..\..\PCL_1_6_0\include\;..\..\PCL_1_6_0\3rdParty\Eigen\include;..\..\PCL_1_6_0\3rdParty\Boost\include;..\..\PCL_1_6_0\3rdParty\FLANN\include;..\include</AdditionalIncludeDirectories>
100100
<MultiProcessorCompilation>false</MultiProcessorCompilation>
101101
<OpenMPSupport>true</OpenMPSupport>
102102
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
103103
<AdditionalOptions>-Zm238 %(AdditionalOptions)</AdditionalOptions>
104+
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
104105
</ClCompile>
105106
<Link>
106107
<SubSystem>Console</SubSystem>
107108
<GenerateDebugInformation>true</GenerateDebugInformation>
108109
<EnableCOMDATFolding>false</EnableCOMDATFolding>
109110
<OptimizeReferences>false</OptimizeReferences>
110-
<AdditionalLibraryDirectories>../../PCL/3rdParty/Boost/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
111+
<AdditionalLibraryDirectories>../../PCL_1_6_0/3rdParty/Boost/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
111112
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
112113
<ModuleDefinitionFile>
113114
</ModuleDefinitionFile>
114-
<OutputFile>$(OutDir)../dlls/$(Configuration)/$(TargetName)$(TargetExt)</OutputFile>
115+
<OutputFile>$(OutDir)../Demo/$(TargetName)$(TargetExt)</OutputFile>
115116
<IgnoreSpecificDefaultLibraries>MSVCRT.lib</IgnoreSpecificDefaultLibraries>
116117
<LargeAddressAware>true</LargeAddressAware>
117118
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>

Demo/CloudOptimization_Release.dll

6.94 MB
Binary file not shown.

Demo/INPUT/ETH/0.jpg

1.06 MB
Loading

Demo/INPUT/ETH/1.jpg

1.13 MB
Loading

Demo/INPUT/ETH/2.jpg

1.01 MB
Loading

Demo/INPUT/ETH/3.jpg

1.01 MB
Loading

Demo/INPUT/ETH/4.jpg

880 KB
Loading

0 commit comments

Comments
 (0)