-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBhattacharyyaDistance.hpp
69 lines (60 loc) · 3 KB
/
BhattacharyyaDistance.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#pragma once
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <vector>
#include <math.h>
using namespace cv;
using namespace std;
/*! \brief Classe que contém os parâmetros necessários para transformar matrizes de vizinhanças
de pontos em histogramas para permitir o cálculo da distância de Bhattacharyya entre elas
\param channels Dimensões dos pontos a serem consideradas (somente leitura)
\param histSize Vetor de tamanho do histograma para cada dimensão (somente leitura)
\param ranges Vetor com os limites inferiores e superiores dos valores para cada dimensão (somente leitura)
*/
class BhattaDist {
public:
/*! \brief Construtor
\param channels Dimensões dos pontos a serem consideradas
\param histSize Vetor de tamanho do histograma para cada dimensão
\param ranges Vetor com os limites inferiores e superiores dos valores para cada dimensão
*/
BhattaDist(vector<int> channels, vector<int> histSize, vector<float> ranges);
BhattaDist();
virtual ~BhattaDist();
// getters (need to be updated)
vector<int> channels();
vector<int> histSize();
vector<float> ranges();
/*! \brief Calcula a distância de Bhattacharyya entre dois conjuntos de pontos
\param points1 Uma matriz que contém conjunto de pontos, onde cada linha é um ponto e cada
coluna é uma dimensão
\param points2 Uma matriz que contém conjunto de pontos, onde cada linha é um ponto e cada
coluna é uma dimensão
\return O valor da distância de Bhattacharyya entre os dois conjuntos de pontos
*/
double calcBetweenPoints(Mat& points1, Mat& points2);
/*! \brief Calcula a distância de Bhattacharyya entre duas imagens
\param image1 Uma imagem
\param image2 Uma imagem
\param mask1 Máscara a ser aplicada na primeira imagem a fim de filtrar quais pontos
serão escolhidos para construir o histograma
\param mask2 Máscara a ser aplicada na segunda imagem a fim de filtrar quais pontos
serão escolhidos para construir o histograma
\return O valor da distância de Bhattacharyya entre as duas imagens
*/
double calcBetweenImg(const Mat& image1, const Mat& image2, const Mat& mask1 = Mat(), const Mat& mask2 = Mat());
/*! \brief Calcula a distância de Bhattacharyya entre dois histogramas
\param hist1 Um histograma
\param hist2 Um histograma
\return O valor da distância de Bhattacharyya entre os dois histogramas
*/
static double calcBetweenHist(const Mat &hist1, const Mat &hist2);
private:
vector<int> _channels;
vector<int> _histSize;
vector<float> _ranges;
template <typename T> Mat linearizeImage(Mat& image);
template <typename T> Mat delinearizeImage(Mat& linearized, int rows, int cols);
};