digiKam
Loading...
Searching...
No Matches
kd_nodebase.h
Go to the documentation of this file.
1/* ============================================================
2 *
3 * This file is a part of digiKam
4 *
5 * Date : 2019-06-08
6 * Description : Node of KD-Tree for vector space partitioning.
7 *
8 * SPDX-FileCopyrightText: 2020 by Nghia Duong <minhnghiaduong997 at gmail dot com>
9 * SPDX-FileCopyrightText: 2024 by Michael Miller <michael underscore miller at msn dot com>
10 *
11 * SPDX-License-Identifier: GPL-2.0-or-later
12 *
13 * ============================================================ */
14
15#pragma once
16
17// C++ includes
18
19#include <vector>
20
21// Qt includes
22
23#include <QVector>
24#include <QMap>
25
26// Local include
27
28#include "digikam_opencv.h"
29
30namespace Digikam
31{
32
34{
35public:
36
37 KDNodeBase(const cv::Mat& nodePos,
38 const int identity,
39 int splitAxis,
40 int dimension);
41
42 virtual ~KDNodeBase();
43
44public:
45
46 static float sqrDistance(const float* const pos1, const float* const pos2, int dimension);
47 static float cosDistance(const float* const pos1, const float* const pos2, int dimension);
48
49public:
50
54 KDNodeBase* insert(const cv::Mat& nodePos, const int identity);
55
59 cv::Mat getPosition() const;
60
64 double getClosestNeighbors(QMap<double, QVector<int> >& neighborList,
65 const cv::Mat& position,
66 float sqRange,
67 float cosThreshold,
68 int maxNbNeighbors) const;
72 int getIdentity();
73
74 int getDimension();
75
79 void setNodeId(int id);
80
82 {
83 bool result;
84 double distance1;
85 double distance2;
86 };
87
89 const cv::Mat& queryPosition,
90 const cv::Mat& currentPosition,
91 float sqRange,
92 float cosThreshold,
93 int nbDimension
94 ) const = 0;
95
96protected:
97
101 virtual KDNodeBase* createNode(const cv::Mat& nodePos,
102 const int identity,
103 int splitAxis,
104 int dimension) = 0;
105
106private:
107
108 void updateRange(const cv::Mat&);
109
110 KDNodeBase* findParent(const cv::Mat& nodePos);
111
112private:
113
114 // Disable
115 KDNodeBase(const KDNodeBase&) = delete;
116 KDNodeBase& operator=(const KDNodeBase&) = delete;
117
118private:
119
120 class Private;
121 Private* const d = nullptr;
122};
123
124} // namespace Digikam
Definition kd_nodebase.h:34
virtual NodeCompareResult nodeCompare(const cv::Mat &queryPosition, const cv::Mat &currentPosition, float sqRange, float cosThreshold, int nbDimension) const =0
cv::Mat getPosition() const
Definition kd_nodebase.cpp:174
KDNodeBase * insert(const cv::Mat &nodePos, const int identity)
Definition kd_nodebase.cpp:135
virtual ~KDNodeBase()
Definition kd_nodebase.cpp:130
int getDimension()
Definition kd_nodebase.cpp:184
int getIdentity()
Definition kd_nodebase.cpp:179
virtual KDNodeBase * createNode(const cv::Mat &nodePos, const int identity, int splitAxis, int dimension)=0
double getClosestNeighbors(QMap< double, QVector< int > > &neighborList, const cv::Mat &position, float sqRange, float cosThreshold, int maxNbNeighbors) const
Definition kd_nodebase.cpp:194
void setNodeId(int id)
Definition kd_nodebase.cpp:189
static float sqrDistance(const float *const pos1, const float *const pos2, int dimension)
Definition kd_nodebase.cpp:75
static float cosDistance(const float *const pos1, const float *const pos2, int dimension)
Definition kd_nodebase.cpp:92
Definition datefolderview.cpp:34
Definition kd_nodebase.h:82
double distance2
Definition kd_nodebase.h:85
double distance1
Definition kd_nodebase.h:84
bool result
Definition kd_nodebase.h:83