mirror of
https://github.com/introlab/rtabmap.git
synced 2026-09-02 01:20:25 +08:00
Tango: added min texture cluster size option
This commit is contained in:
@@ -2,7 +2,7 @@
|
|||||||
<!-- BEGIN_INCLUDE(manifest) -->
|
<!-- BEGIN_INCLUDE(manifest) -->
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
package="com.introlab.rtabmap"
|
package="com.introlab.rtabmap"
|
||||||
android:versionCode="39"
|
android:versionCode="40"
|
||||||
android:versionName="@RTABMAP_VERSION@">
|
android:versionName="@RTABMAP_VERSION@">
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.CAMERA" />
|
<uses-permission android:name="android.permission.CAMERA" />
|
||||||
|
|||||||
@@ -1558,7 +1558,6 @@ bool RTABMapApp::exportMesh(
|
|||||||
bool meshing,
|
bool meshing,
|
||||||
int textureSize,
|
int textureSize,
|
||||||
int normalK,
|
int normalK,
|
||||||
float maxTextureDistance,
|
|
||||||
bool optimized,
|
bool optimized,
|
||||||
float optimizedVoxelSize,
|
float optimizedVoxelSize,
|
||||||
int optimizedDepth,
|
int optimizedDepth,
|
||||||
@@ -1566,6 +1565,8 @@ bool RTABMapApp::exportMesh(
|
|||||||
float optimizedColorRadius,
|
float optimizedColorRadius,
|
||||||
bool optimizedCleanWhitePolygons,
|
bool optimizedCleanWhitePolygons,
|
||||||
bool optimizedColorWhitePolygons, // not yet used
|
bool optimizedColorWhitePolygons, // not yet used
|
||||||
|
float optimizedMaxTextureDistance,
|
||||||
|
int optimizedMinTextureClusterSize,
|
||||||
bool blockRendering)
|
bool blockRendering)
|
||||||
{
|
{
|
||||||
// make sure createdMeshes_ is not modified while exporting! We don't
|
// make sure createdMeshes_ is not modified while exporting! We don't
|
||||||
@@ -1991,8 +1992,8 @@ bool RTABMapApp::exportMesh(
|
|||||||
mesh,
|
mesh,
|
||||||
cameraPoses,
|
cameraPoses,
|
||||||
cameraModels,
|
cameraModels,
|
||||||
maxTextureDistance,
|
optimizedMaxTextureDistance,
|
||||||
50,
|
optimizedMinTextureClusterSize,
|
||||||
&progressionStatus_);
|
&progressionStatus_);
|
||||||
LOGI("Texturing... done! %fs", timer.ticks());
|
LOGI("Texturing... done! %fs", timer.ticks());
|
||||||
|
|
||||||
|
|||||||
@@ -151,7 +151,6 @@ class RTABMapApp : public UEventsHandler {
|
|||||||
bool meshing,
|
bool meshing,
|
||||||
int textureSize,
|
int textureSize,
|
||||||
int normalK,
|
int normalK,
|
||||||
float maxTextureDistance,
|
|
||||||
bool optimized,
|
bool optimized,
|
||||||
float optimizedVoxelSize,
|
float optimizedVoxelSize,
|
||||||
int optimizedDepth,
|
int optimizedDepth,
|
||||||
@@ -159,6 +158,8 @@ class RTABMapApp : public UEventsHandler {
|
|||||||
float optimizedColorRadius,
|
float optimizedColorRadius,
|
||||||
bool optimizedCleanWhitePolygons,
|
bool optimizedCleanWhitePolygons,
|
||||||
bool optimizedColorWhitePolygons,
|
bool optimizedColorWhitePolygons,
|
||||||
|
float optimizedMaxTextureDistance,
|
||||||
|
int optimizedMinTextureClusterSize,
|
||||||
bool blockRendering);
|
bool blockRendering);
|
||||||
bool postExportation(bool visualize);
|
bool postExportation(bool visualize);
|
||||||
int postProcessing(int approach);
|
int postProcessing(int approach);
|
||||||
|
|||||||
@@ -312,7 +312,6 @@ Java_com_introlab_rtabmap_RTABMapLib_exportMesh(
|
|||||||
bool meshing,
|
bool meshing,
|
||||||
int textureSize,
|
int textureSize,
|
||||||
int normalK,
|
int normalK,
|
||||||
float maxTextureDistance,
|
|
||||||
bool optimized,
|
bool optimized,
|
||||||
float optimizedVoxelSize,
|
float optimizedVoxelSize,
|
||||||
int optimizedDepth,
|
int optimizedDepth,
|
||||||
@@ -320,6 +319,8 @@ Java_com_introlab_rtabmap_RTABMapLib_exportMesh(
|
|||||||
float optimizedColorRadius,
|
float optimizedColorRadius,
|
||||||
bool optimizedCleanWhitePolygons,
|
bool optimizedCleanWhitePolygons,
|
||||||
bool optimizedColorWhitePolygons,
|
bool optimizedColorWhitePolygons,
|
||||||
|
float optimizedMaxTextureDistance,
|
||||||
|
int optimizedMinTextureClusterSize,
|
||||||
bool blockRendering)
|
bool blockRendering)
|
||||||
{
|
{
|
||||||
std::string filePathC;
|
std::string filePathC;
|
||||||
@@ -331,7 +332,6 @@ Java_com_introlab_rtabmap_RTABMapLib_exportMesh(
|
|||||||
meshing,
|
meshing,
|
||||||
textureSize,
|
textureSize,
|
||||||
normalK,
|
normalK,
|
||||||
maxTextureDistance,
|
|
||||||
optimized,
|
optimized,
|
||||||
optimizedVoxelSize,
|
optimizedVoxelSize,
|
||||||
optimizedDepth,
|
optimizedDepth,
|
||||||
@@ -339,6 +339,8 @@ Java_com_introlab_rtabmap_RTABMapLib_exportMesh(
|
|||||||
optimizedColorRadius,
|
optimizedColorRadius,
|
||||||
optimizedCleanWhitePolygons,
|
optimizedCleanWhitePolygons,
|
||||||
optimizedColorWhitePolygons,
|
optimizedColorWhitePolygons,
|
||||||
|
optimizedMaxTextureDistance,
|
||||||
|
optimizedMinTextureClusterSize,
|
||||||
blockRendering);
|
blockRendering);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -65,8 +65,8 @@ const std::string kPointCloudVertexShader =
|
|||||||
" vLightWeighting = 1.0;\n"
|
" vLightWeighting = 1.0;\n"
|
||||||
" } else {\n"
|
" } else {\n"
|
||||||
" vec3 transformedNormal = uN * aNormal;\n"
|
" vec3 transformedNormal = uN * aNormal;\n"
|
||||||
" vLightWeighting = max(dot(transformedNormal, uLightingDirection), 0.0);\n"
|
" vLightWeighting = max(dot(transformedNormal, uLightingDirection)*0.5+0.5, 0.0);\n"
|
||||||
" if(vLightWeighting<0.1) vLightWeighting=0.1;\n"
|
" if(vLightWeighting<0.5) vLightWeighting=0.5;\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
" vColor = aColor;\n"
|
" vColor = aColor;\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
@@ -111,8 +111,8 @@ const std::string kTextureMeshVertexShader =
|
|||||||
" vLightWeighting = 1.0;\n"
|
" vLightWeighting = 1.0;\n"
|
||||||
" } else {\n"
|
" } else {\n"
|
||||||
" vec3 transformedNormal = uN * aNormal;\n"
|
" vec3 transformedNormal = uN * aNormal;\n"
|
||||||
" vLightWeighting = max(dot(transformedNormal, uLightingDirection), 0.0);\n"
|
" vLightWeighting = max(dot(transformedNormal, uLightingDirection)*0.5+0.5, 0.0);\n"
|
||||||
" if(vLightWeighting<0.1) vLightWeighting=0.1;\n"
|
" if(vLightWeighting<0.5) vLightWeighting=0.5;\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
const std::string kTextureMeshFragmentShader =
|
const std::string kTextureMeshFragmentShader =
|
||||||
|
|||||||
@@ -217,6 +217,14 @@
|
|||||||
android:entryValues="@array/pref_max_texture_distance_values"
|
android:entryValues="@array/pref_max_texture_distance_values"
|
||||||
android:defaultValue="@string/pref_default_max_texture_distance"/>
|
android:defaultValue="@string/pref_default_max_texture_distance"/>
|
||||||
|
|
||||||
|
<ListPreference
|
||||||
|
android:key="@string/pref_key_min_texture_cluster_size"
|
||||||
|
android:title="@string/pref_title_min_texture_cluster_size"
|
||||||
|
android:summary="@string/pref_summary_min_texture_cluster_size"
|
||||||
|
android:entries="@array/pref_min_texture_cluster_size_keys"
|
||||||
|
android:entryValues="@array/pref_min_texture_cluster_size_values"
|
||||||
|
android:defaultValue="@string/pref_default_min_texture_cluster_size"/>
|
||||||
|
|
||||||
<SwitchPreference
|
<SwitchPreference
|
||||||
android:key="@string/pref_key_block_render"
|
android:key="@string/pref_key_block_render"
|
||||||
android:title="@string/pref_title_block_render"
|
android:title="@string/pref_title_block_render"
|
||||||
|
|||||||
@@ -102,6 +102,8 @@
|
|||||||
<string name="pref_default_normal_k">6</string>
|
<string name="pref_default_normal_k">6</string>
|
||||||
<string name="pref_key_max_texture_distance">pref_key_max_texture_distance</string>
|
<string name="pref_key_max_texture_distance">pref_key_max_texture_distance</string>
|
||||||
<string name="pref_default_max_texture_distance">3</string>
|
<string name="pref_default_max_texture_distance">3</string>
|
||||||
|
<string name="pref_key_min_texture_cluster_size">pref_key_min_texture_cluster_size</string>
|
||||||
|
<string name="pref_default_min_texture_cluster_size">50</string>
|
||||||
<string name="pref_key_block_render">pref_key_block_render</string>
|
<string name="pref_key_block_render">pref_key_block_render</string>
|
||||||
<string name="pref_default_block_render">false</string>
|
<string name="pref_default_block_render">false</string>
|
||||||
<string name="pref_key_opt_depth">pref_key_opt_depth</string>
|
<string name="pref_key_opt_depth">pref_key_opt_depth</string>
|
||||||
@@ -481,6 +483,8 @@
|
|||||||
<string name="pref_summary_normal_k">K-nearest neighbors used for normal computation when a mesh is created.</string>
|
<string name="pref_summary_normal_k">K-nearest neighbors used for normal computation when a mesh is created.</string>
|
||||||
<string name="pref_title_max_texture_distance">Max Texture Distance</string>
|
<string name="pref_title_max_texture_distance">Max Texture Distance</string>
|
||||||
<string name="pref_summary_max_texture_distance">Maximum distance from a camera for polygons to be textured by this camera.</string>
|
<string name="pref_summary_max_texture_distance">Maximum distance from a camera for polygons to be textured by this camera.</string>
|
||||||
|
<string name="pref_title_min_texture_cluster_size">Min Texture Cluster Size</string>
|
||||||
|
<string name="pref_summary_min_texture_cluster_size">Minimum polygon cluster size to be textured by a camera. This helps to filter sparse textured polygons.</string>
|
||||||
<string name="pref_title_block_render">Block Rendering Thread While Exporting</string>
|
<string name="pref_title_block_render">Block Rendering Thread While Exporting</string>
|
||||||
<string name="pref_summary_block_render">This decreases exporting time, but freezes rendering while exporting. This also clears temporary the rendered clouds/meshes from memory during exporting, this can be useful to avoid out of memory errors.</string>
|
<string name="pref_summary_block_render">This decreases exporting time, but freezes rendering while exporting. This also clears temporary the rendered clouds/meshes from memory during exporting, this can be useful to avoid out of memory errors.</string>
|
||||||
|
|
||||||
@@ -543,7 +547,25 @@
|
|||||||
<item>"2.5"</item>
|
<item>"2.5"</item>
|
||||||
<item>"2"</item>
|
<item>"2"</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
<string-array name="pref_min_texture_cluster_size_keys">
|
||||||
|
<item>"Disabled"</item>
|
||||||
|
<item>"1000"</item>
|
||||||
|
<item>"500"</item>
|
||||||
|
<item>"200"</item>
|
||||||
|
<item>"100"</item>
|
||||||
|
<item>"50"</item>
|
||||||
|
<item>"10"</item>
|
||||||
|
</string-array>
|
||||||
|
<string-array name="pref_min_texture_cluster_size_values">
|
||||||
|
<item>"0"</item>
|
||||||
|
<item>"1000"</item>
|
||||||
|
<item>"500"</item>
|
||||||
|
<item>"200"</item>
|
||||||
|
<item>"100"</item>
|
||||||
|
<item>"50"</item>
|
||||||
|
<item>"10"</item>
|
||||||
|
</string-array>
|
||||||
|
|
||||||
<string name="pref_title_optimized">Optimized</string>
|
<string name="pref_title_optimized">Optimized</string>
|
||||||
<string name="pref_title_opt_voxel">Voxel Size</string>
|
<string name="pref_title_opt_voxel">Voxel Size</string>
|
||||||
<string name="pref_summary_opt_voxel">Increasing this can reduce reconstruction time at the cost of less geometry precision.</string>
|
<string name="pref_summary_opt_voxel">Increasing this can reduce reconstruction time at the cost of less geometry precision.</string>
|
||||||
|
|||||||
@@ -1165,8 +1165,8 @@ public class RTABMapActivity extends Activity implements OnClickListener {
|
|||||||
mButtonShareOnSketchfab.setVisibility(View.VISIBLE);
|
mButtonShareOnSketchfab.setVisibility(View.VISIBLE);
|
||||||
mItemSave.setEnabled(mButtonPause.isChecked());
|
mItemSave.setEnabled(mButtonPause.isChecked());
|
||||||
mItemExport.setEnabled(mButtonPause.isChecked() && !mItemDataRecorderMode.isChecked());
|
mItemExport.setEnabled(mButtonPause.isChecked() && !mItemDataRecorderMode.isChecked());
|
||||||
mItemOpen.setEnabled(mButtonPause.isChecked() && !mItemDataRecorderMode.isChecked());
|
mItemOpen.setEnabled(false);
|
||||||
mItemPostProcessing.setEnabled(mButtonPause.isChecked() && !mItemDataRecorderMode.isChecked());
|
mItemPostProcessing.setEnabled(false);
|
||||||
mItemSettings.setEnabled(true);
|
mItemSettings.setEnabled(true);
|
||||||
mItemReset.setEnabled(true);
|
mItemReset.setEnabled(true);
|
||||||
mItemModes.setEnabled(true);
|
mItemModes.setEnabled(true);
|
||||||
@@ -1721,6 +1721,7 @@ public class RTABMapActivity extends Activity implements OnClickListener {
|
|||||||
final int textureSize = isOBJ?Integer.parseInt(sharedPref.getString(getString(R.string.pref_key_texture_size), getString(R.string.pref_default_texture_size))):0;
|
final int textureSize = isOBJ?Integer.parseInt(sharedPref.getString(getString(R.string.pref_key_texture_size), getString(R.string.pref_default_texture_size))):0;
|
||||||
final int normalK = Integer.parseInt(sharedPref.getString(getString(R.string.pref_key_normal_k), getString(R.string.pref_default_normal_k)));
|
final int normalK = Integer.parseInt(sharedPref.getString(getString(R.string.pref_key_normal_k), getString(R.string.pref_default_normal_k)));
|
||||||
final float maxTextureDistance = Float.parseFloat(sharedPref.getString(getString(R.string.pref_key_max_texture_distance), getString(R.string.pref_default_max_texture_distance)));
|
final float maxTextureDistance = Float.parseFloat(sharedPref.getString(getString(R.string.pref_key_max_texture_distance), getString(R.string.pref_default_max_texture_distance)));
|
||||||
|
final int minTextureClusterSize = Integer.parseInt(sharedPref.getString(getString(R.string.pref_key_min_texture_cluster_size), getString(R.string.pref_default_min_texture_cluster_size)));
|
||||||
final float optimizedVoxelSize = cloudVoxelSize;
|
final float optimizedVoxelSize = cloudVoxelSize;
|
||||||
final int optimizedDepth = Integer.parseInt(sharedPref.getString(getString(R.string.pref_key_opt_depth), getString(R.string.pref_default_opt_depth)));
|
final int optimizedDepth = Integer.parseInt(sharedPref.getString(getString(R.string.pref_key_opt_depth), getString(R.string.pref_default_opt_depth)));
|
||||||
final float optimizedColorRadius = Float.parseFloat(sharedPref.getString(getString(R.string.pref_key_opt_color_radius), getString(R.string.pref_default_opt_color_radius)));
|
final float optimizedColorRadius = Float.parseFloat(sharedPref.getString(getString(R.string.pref_key_opt_color_radius), getString(R.string.pref_default_opt_color_radius)));
|
||||||
@@ -1752,7 +1753,6 @@ public class RTABMapActivity extends Activity implements OnClickListener {
|
|||||||
meshing,
|
meshing,
|
||||||
textureSize,
|
textureSize,
|
||||||
normalK,
|
normalK,
|
||||||
maxTextureDistance,
|
|
||||||
optimized,
|
optimized,
|
||||||
optimizedVoxelSize,
|
optimizedVoxelSize,
|
||||||
optimizedDepth,
|
optimizedDepth,
|
||||||
@@ -1760,6 +1760,8 @@ public class RTABMapActivity extends Activity implements OnClickListener {
|
|||||||
optimizedColorRadius,
|
optimizedColorRadius,
|
||||||
optimizedCleanWhitePolygons,
|
optimizedCleanWhitePolygons,
|
||||||
optimizedColorWhitePolygons,
|
optimizedColorWhitePolygons,
|
||||||
|
maxTextureDistance,
|
||||||
|
minTextureClusterSize,
|
||||||
blockRendering);
|
blockRendering);
|
||||||
runOnUiThread(new Runnable() {
|
runOnUiThread(new Runnable() {
|
||||||
public void run() {
|
public void run() {
|
||||||
|
|||||||
@@ -94,7 +94,6 @@ public class RTABMapLib
|
|||||||
boolean meshing,
|
boolean meshing,
|
||||||
int textureSize,
|
int textureSize,
|
||||||
int normalK,
|
int normalK,
|
||||||
float maxTextureDistance,
|
|
||||||
boolean optimized,
|
boolean optimized,
|
||||||
float optimizedVoxelSize,
|
float optimizedVoxelSize,
|
||||||
int optimizedDepth,
|
int optimizedDepth,
|
||||||
@@ -102,6 +101,8 @@ public class RTABMapLib
|
|||||||
float optimizedColorRadius,
|
float optimizedColorRadius,
|
||||||
boolean optimizedCleanWhitePolygons,
|
boolean optimizedCleanWhitePolygons,
|
||||||
boolean optimizedColorWhitePolygons,
|
boolean optimizedColorWhitePolygons,
|
||||||
|
float optimizedMaxTextureDistance,
|
||||||
|
int optimizedMinTextureClusterSize,
|
||||||
boolean blockRendering);
|
boolean blockRendering);
|
||||||
public static native boolean postExportation(boolean visualize);
|
public static native boolean postExportation(boolean visualize);
|
||||||
public static native int postProcessing(int approach);
|
public static native int postProcessing(int approach);
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ public class SettingsActivity extends PreferenceActivity implements OnSharedPref
|
|||||||
((Preference)findPreference(getString(R.string.pref_key_texture_size))).setSummary("("+((ListPreference)findPreference(getString(R.string.pref_key_texture_size))).getEntry() + ") "+getString(R.string.pref_summary_texture_size));
|
((Preference)findPreference(getString(R.string.pref_key_texture_size))).setSummary("("+((ListPreference)findPreference(getString(R.string.pref_key_texture_size))).getEntry() + ") "+getString(R.string.pref_summary_texture_size));
|
||||||
((Preference)findPreference(getString(R.string.pref_key_normal_k))).setSummary("("+((ListPreference)findPreference(getString(R.string.pref_key_normal_k))).getEntry() + ") "+getString(R.string.pref_summary_normal_k));
|
((Preference)findPreference(getString(R.string.pref_key_normal_k))).setSummary("("+((ListPreference)findPreference(getString(R.string.pref_key_normal_k))).getEntry() + ") "+getString(R.string.pref_summary_normal_k));
|
||||||
((Preference)findPreference(getString(R.string.pref_key_max_texture_distance))).setSummary("("+((ListPreference)findPreference(getString(R.string.pref_key_max_texture_distance))).getEntry() + ") "+getString(R.string.pref_summary_max_texture_distance));
|
((Preference)findPreference(getString(R.string.pref_key_max_texture_distance))).setSummary("("+((ListPreference)findPreference(getString(R.string.pref_key_max_texture_distance))).getEntry() + ") "+getString(R.string.pref_summary_max_texture_distance));
|
||||||
|
((Preference)findPreference(getString(R.string.pref_key_min_texture_cluster_size))).setSummary("("+((ListPreference)findPreference(getString(R.string.pref_key_min_texture_cluster_size))).getEntry() + ") "+getString(R.string.pref_summary_min_texture_cluster_size));
|
||||||
|
|
||||||
((Preference)findPreference(getString(R.string.pref_key_opt_depth))).setSummary("("+((ListPreference)findPreference(getString(R.string.pref_key_opt_depth))).getEntry() + ") "+getString(R.string.pref_summary_opt_depth));
|
((Preference)findPreference(getString(R.string.pref_key_opt_depth))).setSummary("("+((ListPreference)findPreference(getString(R.string.pref_key_opt_depth))).getEntry() + ") "+getString(R.string.pref_summary_opt_depth));
|
||||||
((Preference)findPreference(getString(R.string.pref_key_opt_color_radius))).setSummary("("+((ListPreference)findPreference(getString(R.string.pref_key_opt_color_radius))).getEntry() + ") "+getString(R.string.pref_summary_opt_color_radius));
|
((Preference)findPreference(getString(R.string.pref_key_opt_color_radius))).setSummary("("+((ListPreference)findPreference(getString(R.string.pref_key_opt_color_radius))).getEntry() + ") "+getString(R.string.pref_summary_opt_color_radius));
|
||||||
@@ -84,6 +85,7 @@ public class SettingsActivity extends PreferenceActivity implements OnSharedPref
|
|||||||
if(key.compareTo(getString(R.string.pref_key_texture_size))==0) pref.setSummary("("+((ListPreference)pref).getEntry() + ") "+getString(R.string.pref_summary_texture_size));
|
if(key.compareTo(getString(R.string.pref_key_texture_size))==0) pref.setSummary("("+((ListPreference)pref).getEntry() + ") "+getString(R.string.pref_summary_texture_size));
|
||||||
if(key.compareTo(getString(R.string.pref_key_normal_k))==0) pref.setSummary("("+((ListPreference)pref).getEntry() + ") "+getString(R.string.pref_summary_normal_k));
|
if(key.compareTo(getString(R.string.pref_key_normal_k))==0) pref.setSummary("("+((ListPreference)pref).getEntry() + ") "+getString(R.string.pref_summary_normal_k));
|
||||||
if(key.compareTo(getString(R.string.pref_key_max_texture_distance))==0) pref.setSummary("("+((ListPreference)pref).getEntry() + ") "+getString(R.string.pref_summary_max_texture_distance));
|
if(key.compareTo(getString(R.string.pref_key_max_texture_distance))==0) pref.setSummary("("+((ListPreference)pref).getEntry() + ") "+getString(R.string.pref_summary_max_texture_distance));
|
||||||
|
if(key.compareTo(getString(R.string.pref_key_min_texture_cluster_size))==0) pref.setSummary("("+((ListPreference)pref).getEntry() + ") "+getString(R.string.pref_summary_min_texture_cluster_size));
|
||||||
|
|
||||||
if(key.compareTo(getString(R.string.pref_key_opt_depth))==0) pref.setSummary("("+((ListPreference)pref).getEntry() + ") "+getString(R.string.pref_summary_opt_depth));
|
if(key.compareTo(getString(R.string.pref_key_opt_depth))==0) pref.setSummary("("+((ListPreference)pref).getEntry() + ") "+getString(R.string.pref_summary_opt_depth));
|
||||||
if(key.compareTo(getString(R.string.pref_key_opt_color_radius))==0) pref.setSummary("("+((ListPreference)pref).getEntry() + ") "+getString(R.string.pref_summary_opt_color_radius));
|
if(key.compareTo(getString(R.string.pref_key_opt_color_radius))==0) pref.setSummary("("+((ListPreference)pref).getEntry() + ") "+getString(R.string.pref_summary_opt_color_radius));
|
||||||
|
|||||||
@@ -1193,51 +1193,49 @@ pcl::TextureMapping<PointInT>::textureMeshwithMultipleCameras2 (
|
|||||||
|
|
||||||
// filter clusters
|
// filter clusters
|
||||||
int clusterFaces = 0;
|
int clusterFaces = 0;
|
||||||
if(min_cluster_size_>0)
|
|
||||||
|
std::vector<pcl::Vertices> polygons(visibleFaces[current_cam].size());
|
||||||
|
std::vector<int> polygon_to_face_index(visibleFaces[current_cam].size());
|
||||||
|
oi =0;
|
||||||
|
for(std::map<int, FaceInfo>::iterator iter=visibleFaces[current_cam].begin(); iter!=visibleFaces[current_cam].end(); ++iter)
|
||||||
{
|
{
|
||||||
std::vector<pcl::Vertices> polygons(visibleFaces[current_cam].size());
|
polygons[oi].vertices.resize(3);
|
||||||
std::vector<int> polygon_to_face_index(visibleFaces[current_cam].size());
|
polygons[oi].vertices[0] = faces[iter->first].vertices[0];
|
||||||
oi =0;
|
polygons[oi].vertices[1] = faces[iter->first].vertices[1];
|
||||||
for(std::map<int, FaceInfo>::iterator iter=visibleFaces[current_cam].begin(); iter!=visibleFaces[current_cam].end(); ++iter)
|
polygons[oi].vertices[2] = faces[iter->first].vertices[2];
|
||||||
{
|
polygon_to_face_index[oi] = iter->first;
|
||||||
polygons[oi].vertices.resize(3);
|
++oi;
|
||||||
polygons[oi].vertices[0] = faces[iter->first].vertices[0];
|
}
|
||||||
polygons[oi].vertices[1] = faces[iter->first].vertices[1];
|
|
||||||
polygons[oi].vertices[2] = faces[iter->first].vertices[2];
|
|
||||||
polygon_to_face_index[oi] = iter->first;
|
|
||||||
++oi;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::vector<std::set<int> > neighbors;
|
std::vector<std::set<int> > neighbors;
|
||||||
std::vector<std::set<int> > vertexToPolygons;
|
std::vector<std::set<int> > vertexToPolygons;
|
||||||
rtabmap::util3d::createPolygonIndexes(polygons,
|
rtabmap::util3d::createPolygonIndexes(polygons,
|
||||||
(int)camera_cloud->size(),
|
(int)camera_cloud->size(),
|
||||||
neighbors,
|
neighbors,
|
||||||
vertexToPolygons);
|
vertexToPolygons);
|
||||||
std::list<std::list<int> > clusters = rtabmap::util3d::clusterPolygons(
|
std::list<std::list<int> > clusters = rtabmap::util3d::clusterPolygons(
|
||||||
neighbors,
|
neighbors,
|
||||||
min_cluster_size_);
|
min_cluster_size_);
|
||||||
std::set<int> polygonsKept;
|
std::set<int> polygonsKept;
|
||||||
for(std::list<std::list<int> >::iterator iter=clusters.begin(); iter!=clusters.end(); ++iter)
|
for(std::list<std::list<int> >::iterator iter=clusters.begin(); iter!=clusters.end(); ++iter)
|
||||||
|
{
|
||||||
|
for(std::list<int>::iterator jter=iter->begin(); jter!=iter->end(); ++jter)
|
||||||
{
|
{
|
||||||
for(std::list<int>::iterator jter=iter->begin(); jter!=iter->end(); ++jter)
|
polygonsKept.insert(polygon_to_face_index[*jter]);
|
||||||
{
|
faceCameras[polygon_to_face_index[*jter]].push_back(current_cam);
|
||||||
polygonsKept.insert(polygon_to_face_index[*jter]);
|
|
||||||
faceCameras[polygon_to_face_index[*jter]].push_back(current_cam);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for(std::map<int, FaceInfo>::iterator iter=visibleFaces[current_cam].begin(); iter!=visibleFaces[current_cam].end();)
|
for(std::map<int, FaceInfo>::iterator iter=visibleFaces[current_cam].begin(); iter!=visibleFaces[current_cam].end();)
|
||||||
|
{
|
||||||
|
if(polygonsKept.find(iter->first) == polygonsKept.end())
|
||||||
{
|
{
|
||||||
if(polygonsKept.find(iter->first) == polygonsKept.end())
|
visibleFaces[current_cam].erase(iter++);
|
||||||
{
|
++clusterFaces;
|
||||||
visibleFaces[current_cam].erase(iter++);
|
}
|
||||||
++clusterFaces;
|
else
|
||||||
}
|
{
|
||||||
else
|
++iter;
|
||||||
{
|
|
||||||
++iter;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user