Tango: added min texture cluster size option

This commit is contained in:
matlabbe
2017-03-04 19:34:40 -05:00
parent e003fb8d35
commit d927b82020
11 changed files with 92 additions and 55 deletions

View File

@@ -2,7 +2,7 @@
<!-- BEGIN_INCLUDE(manifest) -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.introlab.rtabmap"
android:versionCode="39"
android:versionCode="40"
android:versionName="@RTABMAP_VERSION@">
<uses-permission android:name="android.permission.CAMERA" />

View File

@@ -1558,7 +1558,6 @@ bool RTABMapApp::exportMesh(
bool meshing,
int textureSize,
int normalK,
float maxTextureDistance,
bool optimized,
float optimizedVoxelSize,
int optimizedDepth,
@@ -1566,6 +1565,8 @@ bool RTABMapApp::exportMesh(
float optimizedColorRadius,
bool optimizedCleanWhitePolygons,
bool optimizedColorWhitePolygons, // not yet used
float optimizedMaxTextureDistance,
int optimizedMinTextureClusterSize,
bool blockRendering)
{
// make sure createdMeshes_ is not modified while exporting! We don't
@@ -1991,8 +1992,8 @@ bool RTABMapApp::exportMesh(
mesh,
cameraPoses,
cameraModels,
maxTextureDistance,
50,
optimizedMaxTextureDistance,
optimizedMinTextureClusterSize,
&progressionStatus_);
LOGI("Texturing... done! %fs", timer.ticks());

View File

@@ -151,7 +151,6 @@ class RTABMapApp : public UEventsHandler {
bool meshing,
int textureSize,
int normalK,
float maxTextureDistance,
bool optimized,
float optimizedVoxelSize,
int optimizedDepth,
@@ -159,6 +158,8 @@ class RTABMapApp : public UEventsHandler {
float optimizedColorRadius,
bool optimizedCleanWhitePolygons,
bool optimizedColorWhitePolygons,
float optimizedMaxTextureDistance,
int optimizedMinTextureClusterSize,
bool blockRendering);
bool postExportation(bool visualize);
int postProcessing(int approach);

View File

@@ -312,7 +312,6 @@ Java_com_introlab_rtabmap_RTABMapLib_exportMesh(
bool meshing,
int textureSize,
int normalK,
float maxTextureDistance,
bool optimized,
float optimizedVoxelSize,
int optimizedDepth,
@@ -320,6 +319,8 @@ Java_com_introlab_rtabmap_RTABMapLib_exportMesh(
float optimizedColorRadius,
bool optimizedCleanWhitePolygons,
bool optimizedColorWhitePolygons,
float optimizedMaxTextureDistance,
int optimizedMinTextureClusterSize,
bool blockRendering)
{
std::string filePathC;
@@ -331,7 +332,6 @@ Java_com_introlab_rtabmap_RTABMapLib_exportMesh(
meshing,
textureSize,
normalK,
maxTextureDistance,
optimized,
optimizedVoxelSize,
optimizedDepth,
@@ -339,6 +339,8 @@ Java_com_introlab_rtabmap_RTABMapLib_exportMesh(
optimizedColorRadius,
optimizedCleanWhitePolygons,
optimizedColorWhitePolygons,
optimizedMaxTextureDistance,
optimizedMinTextureClusterSize,
blockRendering);
}

View File

@@ -65,8 +65,8 @@ const std::string kPointCloudVertexShader =
" vLightWeighting = 1.0;\n"
" } else {\n"
" vec3 transformedNormal = uN * aNormal;\n"
" vLightWeighting = max(dot(transformedNormal, uLightingDirection), 0.0);\n"
" if(vLightWeighting<0.1) vLightWeighting=0.1;\n"
" vLightWeighting = max(dot(transformedNormal, uLightingDirection)*0.5+0.5, 0.0);\n"
" if(vLightWeighting<0.5) vLightWeighting=0.5;\n"
" }\n"
" vColor = aColor;\n"
"}\n";
@@ -111,8 +111,8 @@ const std::string kTextureMeshVertexShader =
" vLightWeighting = 1.0;\n"
" } else {\n"
" vec3 transformedNormal = uN * aNormal;\n"
" vLightWeighting = max(dot(transformedNormal, uLightingDirection), 0.0);\n"
" if(vLightWeighting<0.1) vLightWeighting=0.1;\n"
" vLightWeighting = max(dot(transformedNormal, uLightingDirection)*0.5+0.5, 0.0);\n"
" if(vLightWeighting<0.5) vLightWeighting=0.5;\n"
" }\n"
"}\n";
const std::string kTextureMeshFragmentShader =

View File

@@ -217,6 +217,14 @@
android:entryValues="@array/pref_max_texture_distance_values"
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
android:key="@string/pref_key_block_render"
android:title="@string/pref_title_block_render"

View File

@@ -102,6 +102,8 @@
<string name="pref_default_normal_k">6</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_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_default_block_render">false</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_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_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_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"</item>
</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_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>

View File

@@ -1165,8 +1165,8 @@ public class RTABMapActivity extends Activity implements OnClickListener {
mButtonShareOnSketchfab.setVisibility(View.VISIBLE);
mItemSave.setEnabled(mButtonPause.isChecked());
mItemExport.setEnabled(mButtonPause.isChecked() && !mItemDataRecorderMode.isChecked());
mItemOpen.setEnabled(mButtonPause.isChecked() && !mItemDataRecorderMode.isChecked());
mItemPostProcessing.setEnabled(mButtonPause.isChecked() && !mItemDataRecorderMode.isChecked());
mItemOpen.setEnabled(false);
mItemPostProcessing.setEnabled(false);
mItemSettings.setEnabled(true);
mItemReset.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 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 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 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)));
@@ -1752,7 +1753,6 @@ public class RTABMapActivity extends Activity implements OnClickListener {
meshing,
textureSize,
normalK,
maxTextureDistance,
optimized,
optimizedVoxelSize,
optimizedDepth,
@@ -1760,6 +1760,8 @@ public class RTABMapActivity extends Activity implements OnClickListener {
optimizedColorRadius,
optimizedCleanWhitePolygons,
optimizedColorWhitePolygons,
maxTextureDistance,
minTextureClusterSize,
blockRendering);
runOnUiThread(new Runnable() {
public void run() {

View File

@@ -94,7 +94,6 @@ public class RTABMapLib
boolean meshing,
int textureSize,
int normalK,
float maxTextureDistance,
boolean optimized,
float optimizedVoxelSize,
int optimizedDepth,
@@ -102,6 +101,8 @@ public class RTABMapLib
float optimizedColorRadius,
boolean optimizedCleanWhitePolygons,
boolean optimizedColorWhitePolygons,
float optimizedMaxTextureDistance,
int optimizedMinTextureClusterSize,
boolean blockRendering);
public static native boolean postExportation(boolean visualize);
public static native int postProcessing(int approach);

View File

@@ -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_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_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_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_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_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_color_radius))==0) pref.setSummary("("+((ListPreference)pref).getEntry() + ") "+getString(R.string.pref_summary_opt_color_radius));