Go to the documentation of this file.00001 #ifndef SLIC_H
00002 #define SLIC_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include <stdio.h>
00017 #include <math.h>
00018 #include <vector>
00019 #include <float.h>
00020 using namespace std;
00021
00022 #include <opencv2/opencv.hpp>
00023
00024
00025
00026 #define NR_ITERATIONS 10
00027
00028 typedef cv::Vec<double, 5> Vec5d;
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 class Slic {
00039 private:
00040
00041
00042
00043 int step, nc, ns;
00044
00045
00046 double compute_dist(int ci, cv::Point pixel, cv::Vec3b colour);
00047
00048 cv::Point find_local_minimum(const cv::Mat_<cv::Vec3b> &image, cv::Point center);
00049
00050
00051 void clear_data();
00052 void init_data(const cv::Mat &image);
00053
00054 public:
00055
00056 Slic();
00057 ~Slic();
00058
00059
00060 void generate_superpixels(const cv::Mat &image, int step, int nc);
00061
00062 void create_connectivity(const cv::Mat &image);
00063
00064
00065 void display_center_grid(cv::Mat &image, cv::Scalar colour);
00066 void display_contours(cv::Mat &image, cv::Vec3b colour);
00067 void colour_with_cluster_means(cv::Mat &image);
00068
00069 cv::Mat_<int> clusters;
00070 cv::Mat_<double> distances;
00071
00072
00073 cv::Mat_<Vec5d> centers;
00074
00075 vector<int> center_counts;
00076 };
00077
00078 #endif