Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Boris 07. 01. 2019, 19:57:39

Název: Python - záhada Euklidovské vzdálenosti pixelů
Přispěvatel: Boris 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.
Název: Re:python - záhada Euklidovské vzdálenosti pixelů
Přispěvatel: zvol 07. 01. 2019, 20:09:10
Proč vám přpadá divně, že je to víc než 1?
Název: Re:python - záhada Euklidovské vzdálenosti pixelů
Přispěvatel: Kit 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.
Název: Re:python - záhada Euklidovské vzdálenosti pixelů
Přispěvatel: janda 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)
Název: Re:python - záhada Euklidovské vzdálenosti pixelů
Přispěvatel: Boris 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
Název: Re:python - záhada Euklidovské vzdálenosti pixelů
Přispěvatel: ? 07. 01. 2019, 20:59:38
už s tím pro dnešek raději skončím.
S chlastem?
Název: Re:python - záhada Euklidovské vzdálenosti pixelů
Přispěvatel: lopata 07. 01. 2019, 21:28:18
Takhle to dopadá, když se netrefí Ballmer Peak.
(https://imgs.xkcd.com/comics/ballmer_peak.png)
Název: Re:python - záhada Euklidovské vzdálenosti pixelů
Přispěvatel: Juro 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.
Název: Re:Python - záhada Euklidovské vzdálenosti pixelů
Přispěvatel: kadakos 09. 01. 2019, 01:04:20
0-255 = -255. To nie je ziadny interval a 1,5 je uplne inde.
Tak určitě...