Python - záhada Euklidovské vzdálenosti pixelů

Boris

Python - záhada Euklidovské vzdálenosti pixelů
« kdy: 07. 01. 2019, 19:57:39 »
Počítám v pythonu vzájemnou euklidovskou vzdálenost RGBA dvou pixelů pomocí takové primitivní funkce (pro nepythonysty - ty dvě hvězdičky s dvojkou, to je nadruhou):
Kód: [Vybrat]
dist=math.sqrt(((r2-r1)**2)+((g2-g1)**2)+((b2-b1)**2)+((a2-a1)**2))

Je to stejné, jako když se měří vzdálenost, akorát že s barvičkama  :)

Barvy pixelu jsou v rozmezí 0-255, takže maximální hodnota té funkce je sqrt(65025 * 4) = 510
Když tedy tu svoji funkci budu dělit těma 510, tak dostanu normalizovanou hodnotu v rozmezí 0.0 až 1.0.
No, a já si počítám z normalizované hodnoty novou barvičku tak, že tou normalizovanou hodnotou násobím 255.0, takže hodnota barvy by měla být v rozmezí 0 až 255. Upravená funkce tedy vypadá takto

Kód: [Vybrat]
dist=( ( math.sqrt(((r2-r1)**2)+((g2-g1)**2)+((b2-b1)**2)+((a2-a1)**2)) )/510.0) ) * 255.0

Dává Vám to smysl? Tak teď pozor:

Ten kód většinou funguje, až  narazí na situaci, kdy jeden pixel je (0,0,0,86) a druhý (0,0,0,89). Bude to tedy zjednodušeně
Kód: [Vybrat]
(Math.sqrt(3**2)/510.0)*255.0

(3/510.0)*255.0
a to se rovná 1.49999999999
A to je divné! Jak to může být víc než jedna?! Teda, já vím, že /510 * 255 je skoro to samý jako *0.5,
aritmeticky to samozřejmě může být jen dobře, ptám se, kde je díra v mém postupu, protože mě to připadá naprosto košer.
« Poslední změna: 08. 01. 2019, 08:19:42 od Petr Krčmář »


zvol

Re:python - záhada Euklidovské vzdálenosti pixelů
« Odpověď #1 kdy: 07. 01. 2019, 20:09:10 »
Proč vám přpadá divně, že je to víc než 1?

Kit

Re:python - záhada Euklidovské vzdálenosti pixelů
« Odpověď #2 kdy: 07. 01. 2019, 20:14:53 »
Kód: [Vybrat]
(Math.sqrt(3**2)/510.0)*255.0
(3/510.0)*255.0
3*255.0/510.0
765.0/510.0
1.5

Výsledek je správně. Doporučuji nejprve násobit a teprve pak dělit.

janda

Re:python - záhada Euklidovské vzdálenosti pixelů
« Odpověď #3 kdy: 07. 01. 2019, 20:27:25 »
Vždyť to máte v pořádku, výsledek 1.5 je v požadovaném intervalu 0-255...
asi nechlastat tolik, anebo chlastat víc... 8)

Boris

Re:python - záhada Euklidovské vzdálenosti pixelů
« Odpověď #4 kdy: 07. 01. 2019, 20:50:15 »
Máte pravdu, je to dobře  ;D už s tím pro dnešek raději skončím.

Díky moc


?

Re:python - záhada Euklidovské vzdálenosti pixelů
« Odpověď #5 kdy: 07. 01. 2019, 20:59:38 »
už s tím pro dnešek raději skončím.
S chlastem?

lopata

Re:python - záhada Euklidovské vzdálenosti pixelů
« Odpověď #6 kdy: 07. 01. 2019, 21:28:18 »
Takhle to dopadá, když se netrefí Ballmer Peak.


Juro

Re:python - záhada Euklidovské vzdálenosti pixelů
« Odpověď #7 kdy: 08. 01. 2019, 21:53:49 »
Vždyť to máte v pořádku, výsledek 1.5 je v požadovaném intervalu 0-255...
asi nechlastat tolik, anebo chlastat víc... 8)
0-255 = -255. To nie je ziadny interval a 1,5 je uplne inde.

kadakos

Re:Python - záhada Euklidovské vzdálenosti pixelů
« Odpověď #8 kdy: 09. 01. 2019, 01:04:20 »
0-255 = -255. To nie je ziadny interval a 1,5 je uplne inde.
Tak určitě...