summaryrefslogtreecommitdiff
path: root/src/Persistence_representations/include/gudhi/Persistence_image.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/Persistence_representations/include/gudhi/Persistence_image.h')
-rw-r--r--src/Persistence_representations/include/gudhi/Persistence_image.h41
1 files changed, 25 insertions, 16 deletions
diff --git a/src/Persistence_representations/include/gudhi/Persistence_image.h b/src/Persistence_representations/include/gudhi/Persistence_image.h
index 6c9f75b7..76b34d8d 100644
--- a/src/Persistence_representations/include/gudhi/Persistence_image.h
+++ b/src/Persistence_representations/include/gudhi/Persistence_image.h
@@ -26,8 +26,8 @@
// gudhi include
#include <gudhi/read_persistence_from_file.h>
#include <gudhi/common_persistence_representations.h>
+#include <gudhi/Weight_functions.h>
#include <gudhi/Debug_utils.h>
-#include <gudhi/Persistence_weighted_gaussian.h>
// standard include
#include <cmath>
@@ -41,39 +41,49 @@
#include <utility>
#include <functional>
-using PD = std::vector<std::pair<double,double> >;
-using Weight = std::function<double (std::pair<double,double>) >;
-
namespace Gudhi {
namespace Persistence_representations {
/**
* \class Persistence_image gudhi/Persistence_image.h
- * \brief A class implementing the Persistence Images.
+ * \brief A class implementing the persistence images.
*
* \ingroup Persistence_representations
*
* \details
*
+ * Persistence images are a way to build images from persistence diagrams. Roughly, the idea is to center Gaussians on each diagram point, with a weight that usually depends on
+ * the distance to the diagonal, so that the diagram is turned into a function, and then to discretize the plane into pixels, and integrate this function on each pixel.
+ * See \cite Persistence_Images_2017 for more details.
+ *
**/
class Persistence_image {
protected:
- PD diagram;
- int res_x, res_y;
- double min_x, max_x, min_y, max_y;
- Weight weight;
- double sigma;
+ Persistence_diagram diagram;
+ int res_x, res_y;
+ double min_x, max_x, min_y, max_y;
+ Weight weight;
+ double sigma;
public:
/** \brief Persistence Image constructor.
* \ingroup Persistence_image
*
+ * @param[in] _diagram persistence diagram.
+ * @param[in] _min_x minimum value of pixel abscissa.
+ * @param[in] _max_x maximum value of pixel abscissa.
+ * @param[in] _res_x number of pixels for the x-direction.
+ * @param[in] _min_y minimum value of pixel ordinate.
+ * @param[in] _max_y maximum value of pixel ordinate.
+ * @param[in] _res_y number of pixels for the y-direction.
+ * @param[in] _weight weight function for the Gaussians.
+ * @param[in] _sigma bandwidth parameter for the Gaussians.
+ *
*/
- Persistence_image(PD _diagram, double _min_x = 0.0, double _max_x = 1.0, int _res_x = 10, double _min_y = 0.0, double _max_y = 1.0, int _res_y = 10,
- Weight _weight = Gudhi::Persistence_representations::Persistence_weighted_gaussian::arctan_weight(1,1), double _sigma = 1.0){
+ Persistence_image(const Persistence_diagram & _diagram, double _min_x = 0.0, double _max_x = 1.0, int _res_x = 10, double _min_y = 0.0, double _max_y = 1.0, int _res_y = 10, const Weight & _weight = arctan_weight(1,1), double _sigma = 1.0){
diagram = _diagram; min_x = _min_x; max_x = _max_x; res_x = _res_x; min_y = _min_y; max_y = _max_y; res_y = _res_y, weight = _weight; sigma = _sigma;
}
@@ -81,7 +91,7 @@ class Persistence_image {
* \ingroup Persistence_image
*
*/
- std::vector<std::vector<double> > vectorize() {
+ std::vector<std::vector<double> > vectorize() const {
std::vector<std::vector<double> > im; for(int i = 0; i < res_y; i++) im.emplace_back();
double step_x = (max_x - min_x)/res_x; double step_y = (max_y - min_y)/res_y;
@@ -109,9 +119,8 @@ class Persistence_image {
-};
-
-} // namespace Persistence_image
+}; // class Persistence_image
+} // namespace Persistence_representations
} // namespace Gudhi
#endif // PERSISTENCE_IMAGE_H_