diff --git a/app/android/custom_rules.xml b/app/android/custom_rules.xml
index 52c63d99..6ce83384 100644
--- a/app/android/custom_rules.xml
+++ b/app/android/custom_rules.xml
@@ -4,7 +4,7 @@
-
+
\ No newline at end of file
diff --git a/app/android/jni/RTABMapApp.cpp b/app/android/jni/RTABMapApp.cpp
index 8dc4db2c..78d4d834 100644
--- a/app/android/jni/RTABMapApp.cpp
+++ b/app/android/jni/RTABMapApp.cpp
@@ -57,7 +57,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include
-const int g_minPolygonClusterSize = 200;
const int g_exportedMeshId = -100;
static JavaVM *jvm;
@@ -140,6 +139,8 @@ RTABMapApp::RTABMapApp() :
meshDecimation_(1),
meshTrianglePix_(1),
meshAngleToleranceDeg_(15.0),
+ minClusterSize_(200),
+ maxGainRadius_(0.02f),
paused_(false),
dataRecorderMode_(false),
clearSceneOnNextRender_(false),
@@ -823,7 +824,8 @@ int RTABMapApp::Render()
}
}
- rtabmap::GainCompensator compensator;
+ UASSERT(maxGainRadius_>0.0f);
+ rtabmap::GainCompensator compensator(maxGainRadius_);
if(clouds.size() > 1 && links.size())
{
compensator.feed(clouds, indices, links);
@@ -866,7 +868,7 @@ int RTABMapApp::Render()
notifyDataLoaded = true;
}
- if(filterPolygonsOnNextRender_)
+ if(filterPolygonsOnNextRender_ && minClusterSize_>0)
{
LOGI("Polygon filtering...");
filterPolygonsOnNextRender_ = false;
@@ -885,7 +887,7 @@ int RTABMapApp::Render()
vertexToPolygons);
std::list > clusters = rtabmap::util3d::clusterPolygons(
neighbors,
- g_minPolygonClusterSize);
+ minClusterSize_);
std::vector filteredPolygons(iter->second.polygons.size());
int oi=0;
for(std::list >::iterator jter=clusters.begin(); jter!=clusters.end(); ++jter)
@@ -1132,7 +1134,17 @@ void RTABMapApp::setMeshAngleTolerance(float value)
void RTABMapApp::setMeshTriangleSize(int value)
{
- meshTrianglePix_ = value;
+ meshTrianglePix_ = value;
+}
+
+void RTABMapApp::setMinClusterSize(int value)
+{
+ minClusterSize_ = value;
+}
+
+void RTABMapApp::setMaxGainRadius(float value)
+{
+ maxGainRadius_ = value;
}
int RTABMapApp::setMappingParameter(const std::string & key, const std::string & value)
@@ -1588,7 +1600,7 @@ bool RTABMapApp::exportMesh(
textureMesh->tex_polygons.pop_back();
textureMesh->tex_materials.pop_back();
- if(g_minPolygonClusterSize>0)
+ if(minClusterSize_>0)
{
LOGI("Filter small polygon clusters...");
@@ -1617,7 +1629,7 @@ bool RTABMapApp::exportMesh(
vertexToPolygons);
std::list > clusters = rtabmap::util3d::clusterPolygons(
neighbors,
- g_minPolygonClusterSize);
+ minClusterSize_);
std::set validPolygons;
for(std::list >::iterator kter=clusters.begin(); kter!=clusters.end(); ++kter)
diff --git a/app/android/jni/RTABMapApp.h b/app/android/jni/RTABMapApp.h
index daf5e3d5..6a3ca5e3 100644
--- a/app/android/jni/RTABMapApp.h
+++ b/app/android/jni/RTABMapApp.h
@@ -131,6 +131,8 @@ class RTABMapApp : public UEventsHandler {
void setMeshDecimation(int value);
void setMeshAngleTolerance(float value);
void setMeshTriangleSize(int value);
+ void setMinClusterSize(int value);
+ void setMaxGainRadius(float value);
int setMappingParameter(const std::string & key, const std::string & value);
void resetMapping();
@@ -179,6 +181,8 @@ class RTABMapApp : public UEventsHandler {
int meshDecimation_;
int meshTrianglePix_;
float meshAngleToleranceDeg_;
+ int minClusterSize_;
+ float maxGainRadius_;
rtabmap::ParametersMap mappingParameters_;
diff --git a/app/android/jni/jni_interface.cpp b/app/android/jni/jni_interface.cpp
index 0fc11dfd..5ebe87fd 100644
--- a/app/android/jni/jni_interface.cpp
+++ b/app/android/jni/jni_interface.cpp
@@ -246,6 +246,18 @@ Java_com_introlab_rtabmap_RTABMapLib_setMeshTriangleSize(
{
return app.setMeshTriangleSize(value);
}
+JNIEXPORT void JNICALL
+Java_com_introlab_rtabmap_RTABMapLib_setMinClusterSize(
+ JNIEnv*, jobject, int value)
+{
+ return app.setMinClusterSize(value);
+}
+JNIEXPORT void JNICALL
+Java_com_introlab_rtabmap_RTABMapLib_setMaxGainRadius(
+ JNIEnv*, jobject, float value)
+{
+ return app.setMaxGainRadius(value);
+}
JNIEXPORT jint JNICALL
Java_com_introlab_rtabmap_RTABMapLib_setMappingParameter(
JNIEnv* env, jobject, jstring key, jstring value)
diff --git a/app/android/res/layout/activity_settings.xml b/app/android/res/layout/activity_settings.xml
index 6ce192df..b53abea5 100644
--- a/app/android/res/layout/activity_settings.xml
+++ b/app/android/res/layout/activity_settings.xml
@@ -186,9 +186,25 @@
-
+
+
+
+
+
diff --git a/app/android/res/values/strings.xml b/app/android/res/values/strings.xml
index cd4ad28e..2bc7b61a 100644
--- a/app/android/res/values/strings.xml
+++ b/app/android/res/values/strings.xml
@@ -57,6 +57,9 @@
pref_key_opt_decimation_factor80
pref_key_opt_color_radius 0.0
pref_key_opt_clean_white true
+
+ pref_key_gain_max_radius 0.02
+ pref_key_min_cluster_size 200
Rendering
@@ -413,6 +416,37 @@
General
+
+ Color Correction Radius
+ Radius used to find pixel correspondences for color correction.
+ Min Cluster Size
+ Minimum number of polygons for a cluster to be kept after Noise Filtering optimization.
+
+
+ - "0.3 m"
+ - "0.2 m"
+ - "0.1 m"
+ - "0.05 m"
+ - "0.02 m"
+ - "0.01 m"
+
+
+ - "0.3"
+ - "0.2"
+ - "0.1"
+ - "0.05"
+ - "0.02"
+ - "0.01"
+
+
+
+ - "500"
+ - "200"
+ - "100"
+ - "50"
+ - "10"
+
+
Restore All Default Settings
diff --git a/app/android/src/com/introlab/rtabmap/RTABMapActivity.java b/app/android/src/com/introlab/rtabmap/RTABMapActivity.java
index 181cb97d..efb6d761 100644
--- a/app/android/src/com/introlab/rtabmap/RTABMapActivity.java
+++ b/app/android/src/com/introlab/rtabmap/RTABMapActivity.java
@@ -283,6 +283,9 @@ public class RTABMapActivity extends Activity implements OnClickListener {
RTABMapLib.setPointSize(Float.parseFloat(sharedPref.getString(getString(R.string.pref_key_point_size), getString(R.string.pref_default_point_size))));
RTABMapLib.setMeshAngleTolerance(Float.parseFloat(sharedPref.getString(getString(R.string.pref_key_angle), getString(R.string.pref_default_angle))));
RTABMapLib.setMeshTriangleSize(Integer.parseInt(sharedPref.getString(getString(R.string.pref_key_triangle), getString(R.string.pref_default_triangle))));
+
+ RTABMapLib.setMinClusterSize(Integer.parseInt(sharedPref.getString(getString(R.string.pref_key_min_cluster_size), getString(R.string.pref_default_min_cluster_size))));
+ RTABMapLib.setMaxGainRadius(Float.parseFloat(sharedPref.getString(getString(R.string.pref_key_gain_max_radius), getString(R.string.pref_default_gain_max_radius))));
if(mItemRenderingPointCloud != null)
{
diff --git a/app/android/src/com/introlab/rtabmap/RTABMapLib.java b/app/android/src/com/introlab/rtabmap/RTABMapLib.java
index 713c0c3e..57b15ff6 100644
--- a/app/android/src/com/introlab/rtabmap/RTABMapLib.java
+++ b/app/android/src/com/introlab/rtabmap/RTABMapLib.java
@@ -77,6 +77,8 @@ public class RTABMapLib
public static native void setMeshDecimation(int value);
public static native void setMeshAngleTolerance(float value);
public static native void setMeshTriangleSize(int value);
+ public static native void setMinClusterSize(int value);
+ public static native void setMaxGainRadius(float value);
public static native int setMappingParameter(String key, String value);
public static native void resetMapping();
diff --git a/app/android/src/com/introlab/rtabmap/SettingsActivity.java b/app/android/src/com/introlab/rtabmap/SettingsActivity.java
index 7fed6f6e..b12686d5 100644
--- a/app/android/src/com/introlab/rtabmap/SettingsActivity.java
+++ b/app/android/src/com/introlab/rtabmap/SettingsActivity.java
@@ -48,6 +48,8 @@ public class SettingsActivity extends PreferenceActivity implements OnSharedPref
((Preference)findPreference(getString(R.string.pref_key_opt_decimation_factor))).setSummary("("+((ListPreference)findPreference(getString(R.string.pref_key_opt_decimation_factor))).getValue() + "%%) "+getString(R.string.pref_summary_opt_decimation_factor));
((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_min_cluster_size))).setSummary("("+((ListPreference)findPreference(getString(R.string.pref_key_min_cluster_size))).getEntry() + ") "+getString(R.string.pref_summary_min_cluster_size));
+ ((Preference)findPreference(getString(R.string.pref_key_gain_max_radius))).setSummary("("+((ListPreference)findPreference(getString(R.string.pref_key_gain_max_radius))).getEntry() + ") "+getString(R.string.pref_summary_gain_max_radius));
}
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
@@ -73,6 +75,9 @@ public class SettingsActivity extends PreferenceActivity implements OnSharedPref
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_decimation_factor))==0) pref.setSummary("("+((ListPreference)pref).getValue() + "%%) "+getString(R.string.pref_summary_opt_decimation_factor));
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_min_cluster_size))==0) pref.setSummary("("+((ListPreference)pref).getEntry() + ") "+getString(R.string.pref_summary_min_cluster_size));
+ if(key.compareTo(getString(R.string.pref_key_gain_max_radius))==0) pref.setSummary("("+((ListPreference)pref).getEntry() + ") "+getString(R.string.pref_summary_gain_max_radius));
}
}