Wenn Sie HSV verwenden, müssen Sie erkennen, dass HSV keine Punkte in einem dreidimensionalen Raum sind, sondern eher der Winkel, die Größe und die Entfernung von oben von einem Kegel. Um den Abstand eines HSV-Wertes zu berechnen, müssen Sie entweder Ihre Punkte im 3D-Raum durch Transformieren bestimmen.
X = Cos (H) * S * V
Y = Sin (H) * S * V
Z = V
für beide Punkte und dann die euklidische Entfernung zwischen ihnen unter :
Sqrt((X0 - X1)*(X0 - X1) + (Y0 - Y1)*(Y0 - Y1) + (Z0 - Z1)*(Z0 - Z1))
Zu einem Preis von 2 Cos, 2 Sin und einer Quadratwurzel.
Alternativ können Sie die Entfernung auch etwas einfacher berechnen, wenn Sie so geneigt sind, wenn Sie in 2D-Raum abgeflacht sind, haben Sie einfach zwei Vektoren vom Ursprung und wenden das Cosinus-Gesetz an, um den Abstand im XY-Raum zu finden :
C² = A² + B² + 2*A*B*Cos(Theta)
wobei A = S * V des ersten Werts und B = S * V des zweiten und Cosinus ist der Unterschied Theta oder H0-H1
Dann man in Z-Faktor, zu erweitern der 2D-Raum in den 3D-Raum.
A = S0*V0
B = S1*V1
dTheta = H1-H0
dZ = V0-V1
distance = sqrt(dZ*dZ + A*A + B*B + 2*A*B*Cos(dTheta);
Beachten Sie, dass, weil das Gesetz von cosigns uns gibt C² wir gerade stecken Sie es direkt dort mit der Änderung in Z. Welche 1 Cos und 1 Sqrt kostet. HSV ist sehr nützlich, Sie müssen nur wissen, welche Art von Farbraum es beschreibt. Sie können sie nicht einfach in eine euklidische Funktion bringen und etwas kohärentes daraus ziehen.
ich glaube, Sie haben die^2 nach (b2-b1 weggelassen); trotzdem, +1, weil ich im Begriff war, das gleiche zu posten –
Ist das wirklich, wie Sie die Entfernung im 3D-Raum messen? Ich hätte gedacht, dass es irgendwo eine Quadratwurzel einbeziehen würde? Wenn das funktioniert, könnte es im 2. Raum verwendet werden, und Sie haben gerade Pythagoras überlistet. – Breton
Er nimmt die Kubikwurzel, was falsch ist; es sollte die Quadratwurzel sein. Aber es ist unnötig, die Wurzel zu nehmen, da man Quadrate von Entfernungen genauso leicht vergleichen kann wie die Abstände selbst und die Zeit sparen, die Wurzel zu nehmen. –