double d;
double odlMin = ULONG_MAX;
double odlMax = ULONG_MAX;
for (int i = 0; i < MaxElem; i++) {
d = odleglosc( PunktA, tabPunkt[i]);
if (d < odlMin) {
odlMax = odlMin;
odlMin = d;
sasiad = i;
} else if (d < odlMax)
odlMax = d;
}
if (odlMin < 0.6 * odlMax)
return sasiad;
return -1;
Chodzi mi o ustalenie m.in.:
dlaczego odlMin < 0.6 * odlMax?
i dlaczego w taki a nie inny sposób zmienia się wartości odlMin i odlMax?
B.
funkcja:
int
naiveNearestNeighbor( const float* vec, int laplacian,
const CvSeq* model_keypoints,
const CvSeq* model_descriptors )
Tyle, że ponazywałem te rzeczy które wiem już po polsku.
Bo on nie szuka najbliższego sąsiada, tylko "sąsiada który jest
najbliżej danego, oraz jest dużo bliżej danego niż wszystkie pozostałe".
I to nie jest punkt tylko deskryptor SURF punktu charakterystycznego. Ma
kila wymiarów więcej niż punkt, jeśli już mowa o OpenCV ;)
o, właśnie. Tak coś myślałem, że ten kod robi coś więcej niż tylko
najbliższego sąsiada znajduje, bo na dwa N-elementowe wektory znajdował
mniej niż N par. Czyli, że musi być jakieś kryterium odrzucania
najbliższego. Ale nie bardzo mogłem wyśledzić tego kryterium.
Czyli tak: jeżeli najbliższy sąsiad znajduje się w przedziale od 0 do
60% odległości do najdalszego to OK, w przeciwnym przypadku punkt nie ma
sąsiada. dobrze rozumiem?
> I to nie jest punkt tylko deskryptor SURF punktu charakterystycznego. Ma
> kila wymiarów więcej niż punkt, jeśli już mowa o OpenCV ;)
Oj tam. Takie zoczenie matematyczne. Przecież taki deskryptor można
potraktować jako punkt przestrzeni n-wymiarowej, gdzie n ilość cech w
deskryptorze. :-)
Czyli tak bardziej matematycznie szuka się najbliższe punkty, które są
dużo dalej niż wszystkie pozostałe, w 512-wymiarowej przestrzeni.
B.