Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

Porównywanie kolorów - zagadka matematyczna?

Moderatorzy: Jacek Bogusz, Moderatorzy

petersz
-
-
Posty: 579
Rejestracja: 2 gru 2005, o 18:26
Lokalizacja: ---

Porównywanie kolorów - zagadka matematyczna?

Postautor: petersz » 12 mar 2006, o 16:47

Spotkałem się ostatnio z takim oto problemem: jak znaleść 'najpodobniejszy' kolor do danego spośród innych. Każdy kto miał troszeczkę do czynienia z komputerem wie, że kolor można zapisać w postaci natężenia trzech liczb (tzw. RGB; czerwony, zielony, niebieski). Mam np. taki kolor: 90 180 30, i np. który z tych jest najbardziej podobny: 78 100 50, 100 178 20, 45 200 50? :idea: Jak to matematycznie obliczyć? :D Wymyśliłem sposob przez porównywanie sumy wartości absolutnych różnic R, G i B. Np: (specjalnie kolorowałem liczby danego koloru w jeden sposób (nie sugerujcie się kolorami ;)) i odejmowałem je tak, by wychodziła liczba dodatnia)

(90 - 78) + (180 - 100) + (50 - 30) = 112
(100 - 90) + (180 - 178) + (30 - 20) = 22 // ten kolor niby jest 'podobniejszy'; czasem faktycznie tak jest, a czasem nie... ;)
...

Zrobiłem więc prosty programik stosujący ten algorytm, ale to niezupełnie działa jak należy ;). Macie jakieś inne pomysły na znajdywanie najpodobniejszego koloru? 8)

Pozdr.

P.S.
Nie wiem, czy wszystko wytłumaczyłem jasno (nie leży to w mojej naturze ;)), ale jakby co - pytajcie ;)

Awatar użytkownika
Press
-
-
Posty: 389
Rejestracja: 10 mar 2004, o 16:21
Lokalizacja: Wrocław
Kontaktowanie:

Postautor: Press » 12 mar 2006, o 19:50

hmm, a gdyby liczyc bład odchylenia koloru na zasadzie obliczenia pierwiastka z sumy kwadratów poszczególnych błedów na kolorach podstawowych :>
zamieszalem, wiem ;)
ale chodzi o to ze mamy kolor K1 składajacy sie z R1,G1,B1 i koloro K2 = R2,G2,B2
i liczymy delta(K1 wzgledem K2) = sqrt(sqr(R1-R2)+sqr(G1-G2)+sqr(B1-B2))

petersz
-
-
Posty: 579
Rejestracja: 2 gru 2005, o 18:26
Lokalizacja: ---

Postautor: petersz » 13 mar 2006, o 09:49

hmm, a gdyby liczyc bład odchylenia koloru na zasadzie obliczenia pierwiastka z sumy kwadratów poszczególnych błedów na kolorach podstawowych :>
zamieszalem, wiem ;)
Rozumiem :). Tylko dlaczego ten sposób miałby działać? (oczywiscie nie mam nic przeciwko, tylko jakbym coś juz zrobił, to chciałbym wiedzieć jak to działa :))

Pozdr.

P.S.
Zaraz spróbuję zastosować ten wzór, to zobaczymy... ;)

Awatar użytkownika
Press
-
-
Posty: 389
Rejestracja: 10 mar 2004, o 16:21
Lokalizacja: Wrocław
Kontaktowanie:

Postautor: Press » 13 mar 2006, o 10:18

Panie kolego...
nie mam pojecia dlaczego mialoby to działac :)
Ale pamietam, ze tak sie liczyło sredni bład kwadratowy na miernictwie elektrycznym,wiec skoro działało przy liczeniu odchyłek pomiaru, to czemu przy kolorach miałoby nie zadzialac ;)

TRistan
-
-
Posty: 28
Rejestracja: 22 lis 2005, o 17:59
Lokalizacja: Polska

Postautor: TRistan » 13 mar 2006, o 16:38

A probowales przejscie do ukladu HSV? Pamietam ze w ksiazce wydanej przez MIKOM "Karty graficzne VGA i SVGA" byla mowa o reprezentacji kolorow i zdaje sie ze HSV jest naturalnym ukladem. Szczegolow teraz nie pamietam, wiec moge to sprawdzic w tej ksiazce ale najwczesniej w piatek. Jeszcze jest ksiazka "Grafika PC bez tajemnic". Tez cos tam napisali.

petersz
-
-
Posty: 579
Rejestracja: 2 gru 2005, o 18:26
Lokalizacja: ---

Postautor: petersz » 14 mar 2006, o 15:01

Hmmm... chyba już sobię poradziłem :). Zastosowałem mój nieco zmodyfikowany algorytm i wyniki są zadowalające. Może jakiś "spec" jeszcze coś doradzi... ;)

Pozdr.

a_antoniak
-
-
Posty: 645
Rejestracja: 13 sty 2005, o 18:38
Lokalizacja: Krasnystaw
Kontaktowanie:

Postautor: a_antoniak » 14 mar 2006, o 15:24

Panie kolego...
nie mam pojecia dlaczego mialoby to działac :)
Pewnie dlatego, ze jest to zwykle obliczenie odleglosci dwoch punktow o danych wspolrzednych w 3-wymiarowej przestrzeni euklidesowej, w tym przypadku - przestrzeni barw RGB. Zamiast minimalizowac odleglosc, wystarczy minimalizowac jej kwadrat - odpada liczenie 1 pierwiastka.

petersz - sposob podany przez press-a na 100% sie sprawdzi. lepiej zastosuj go niz kombinuj z "wlasnymi algorytmami" o (zapewne) watlych podstawach ;)

Ogolnie, kolory sa "podobniejsze" (raczej: "bardziej podobne"), gdy odleglosci pomiedzy reprezentujacymi je punktami sa mniejsze, niezaleznie od tego jaka przestrzen barw przyjmiemy. Jednak w przestrzeni HSV faktycznie latwiej bedzie zwrocic uwage na te aspekty koloru, ktore sa przez oko ludzkie bardziej postrzegane (Hue, Saturation lub Value).

http://www.algorytm.org/index.php?optio ... &Itemid=28

Awatar użytkownika
Press
-
-
Posty: 389
Rejestracja: 10 mar 2004, o 16:21
Lokalizacja: Wrocław
Kontaktowanie:

Postautor: Press » 14 mar 2006, o 15:47

no i wszystko jasne <lol
nie na darmo a_antoniak ma einsteina w avatarku :)[/b]

a_antoniak
-
-
Posty: 645
Rejestracja: 13 sty 2005, o 18:38
Lokalizacja: Krasnystaw
Kontaktowanie:

Postautor: a_antoniak » 14 mar 2006, o 16:06

Ten Einstein jest tylko przejsciowo... zastapil żółtka (takiego kurczaka z kreskówek), a jak sie znudzi, to przyjdzie cos nowego :D

petersz
-
-
Posty: 579
Rejestracja: 2 gru 2005, o 18:26
Lokalizacja: ---

Postautor: petersz » 14 mar 2006, o 16:35

Hmmm...
Pewnie dlatego, ze jest to zwykle obliczenie odleglosci dwoch punktow o danych wspolrzednych w 3-wymiarowej przestrzeni euklidesowej, w tym przypadku - przestrzeni barw RGB. Zamiast minimalizowac odleglosc, wystarczy minimalizowac jej kwadrat - odpada liczenie 1 pierwiastka.
A być może... :)
sposob podany przez press-a na 100% sie sprawdzi. lepiej zastosuj go niz kombinuj z "wlasnymi algorytmami" o (zapewne) watlych podstawach
No dzięki... :twisted:
Po pierwsze: czemu sugerujesz, żebym nie kombinował (w pozytywnym tego słowa znaczeniu)? ;) To leży w mojej naturze... 8)
Po sekundo: czemu mam kożystać ze sposobu obliczania błedu w miernictwie elektrycznym, gdy stworzyłem własny, dobry algorytm?
Po trzecio: im prostszy algorytm, tym lepiej - mój wygrywa :) Załóżmy, że mam porównać kolory z obrazka 320 x 240 = 76800 wykonań algorytmu...
Po czwarte: IMHO pomysł z HSV to lekka przesada i komplikowanie kodu... no i czas, czas wykonywania! :D

Postanawiam załączyć 2 dema, abyście "ocenili" to to... demo "paleta" ładuje paletę z pliku *.pal, a demo "losowanie" losuje wszystkie kolory. Oczywiście w przypadku ładowania palety, kolor podstawowy (do którego mamy znaleść najpodobniejszy) jest losowany :).

Pozdr.

P.S.
Spróbujcie znaleść podobniejszy kolor, od tego, który wybrał mój algorytm... :)
Załączniki
demo.rar
(206.42 KiB) Pobrany 394 razy

Awatar użytkownika
Press
-
-
Posty: 389
Rejestracja: 10 mar 2004, o 16:21
Lokalizacja: Wrocław
Kontaktowanie:

Postautor: Press » 14 mar 2006, o 17:08

Po sekundo: czemu mam kożystać ze sposobu obliczania błedu w miernictwie elektrycznym, gdy stworzyłem własny, dobry algorytm?
To nie jest wzor czyto elektryczny.
Ale nei bede tłumaczyl tego co juz wytłumaczył a_antoniak
Barwy to przestrzen i tak nalezy je liczyc.
A czy mzoemy poznac Twój wzór na obliczanie odchylek?
załoze sie o krate piwa, ze to matematyczna modyfikacja wzoru podanego przezemnie ;)
choc pewnie na pierwszy rzut oka na to nei wyglada ;)

petersz
-
-
Posty: 579
Rejestracja: 2 gru 2005, o 18:26
Lokalizacja: ---

Postautor: petersz » 14 mar 2006, o 17:18

To nie jest wzor czyto elektryczny.
To już nie moja wina :P.
Barwy to przestrzen i tak nalezy je liczyc.
Hmmm... A kto tak powiedział? Ja tak np. nie robię... :idea:

Tak jak już wcześniej napisałem, jest to praktycznie "pierwotny" wzór, z którego kożystałem. Nie ma w nim żadnych potęg, pierwiastków... to nie jest modyfikacja "Twojego" wzoru :D. Jest bardzo prosty, przez co ma ogromną zaletę :), No i całkiem chyba nieźle działa ;)... Właśnie, nie napisałeś, czy wg Ciebie dobrze spełnia swoje zadanie :P.

Pozdr.

a_antoniak
-
-
Posty: 645
Rejestracja: 13 sty 2005, o 18:38
Lokalizacja: Krasnystaw
Kontaktowanie:

Postautor: a_antoniak » 14 mar 2006, o 17:49

Echhh młodość musi sie wyszumiec :). Ale to dobrze :D. Petersz - kombinuj i probuj, w ten sposob czlowiek tez sie uczy. Ale sprawdzaj takze to, co wymyslili ludzie zyjacy wczesniej, zeby nie wywaac otwartych drzwi :).
Ostatnio zmieniony 14 mar 2006, o 18:05 przez a_antoniak, łącznie zmieniany 3 razy.

petersz
-
-
Posty: 579
Rejestracja: 2 gru 2005, o 18:26
Lokalizacja: ---

Postautor: petersz » 14 mar 2006, o 17:55

Echhh młodość musi sie wyszumiec :).
A gdzie ja tu szumiałem? :)
Ale to dobrze :D. Petersz - kombinuj i probuj, w ten sposob czlowiek tez sie uczy.
Możnaby powiedzieć, że to jest moje motto :D.
Ale sprawdzaj takze to, co wymyslili ludzie zyjacy wczesniej, zeby nie wywaac otwartych drzwi :).
Staram się o tym pamiętać, więc nie wymyślałem od nowa C++ ;).

Ehh... Ale nadal nie dowiedziałem się, jak oceniacie mój algorytm! :569: Czy myślicie, że inne (np. press'a) mogłyby lepiej działać?! I czy macie jakieś zastrzeżenia?

Pozdr.

a_antoniak
-
-
Posty: 645
Rejestracja: 13 sty 2005, o 18:38
Lokalizacja: Krasnystaw
Kontaktowanie:

Postautor: a_antoniak » 14 mar 2006, o 18:06

Demo bardzo ladne (w czym pisales?). Wybiera podoby kolor, bo oczywiscie kolory bardziej podobne maja mniejsze roznice wspolrzednych, a na tym opiera sie Twoja metoda. Tyle, ze aby moc ocenic ja na tle innych, trzeba zrobic test porownawczy, i to w trudniejszych warunkach (przy wiekszej liczbie kolorow z palety - przejscia plynne). Wtedy moze okazac sie, ze inny algorytm dziala lepiej, chcoc jest np. wolniejszy (cos za cos). Wowczas trzeba postawic 1 fundamentalne pytanie:

Czy w danym zastosowaniu wystarczy jakosc zapewniana przez gorszy, ale za to szybszy algorytm?

Awatar użytkownika
Press
-
-
Posty: 389
Rejestracja: 10 mar 2004, o 16:21
Lokalizacja: Wrocław
Kontaktowanie:

Postautor: Press » 14 mar 2006, o 18:12

No liczy panie kolego, liczy..
Nie testowałem mocno tego Twojego programu, ale i na wpadke nei natrafilem.

Jesli nei widzisz podobienstwa miedzy Twoim wzorem a moim no cóz :573:

w kazdym razie kwadraty zwalniaja Cie z odejmowania liczby mniejszej od wiekszej, ale zawsze mozna tez zastosowac funkcje ABS().

A co do twojego kombinowania :?
No cóz, ja mam tak samo ;)

petersz
-
-
Posty: 579
Rejestracja: 2 gru 2005, o 18:26
Lokalizacja: ---

Postautor: petersz » 14 mar 2006, o 18:15

Czy w danym zastosowaniu wystarczy jakosc zapewniana przez gorszy, ale za to szybszy algorytm?
Zależy, co rozumieć przez pojęcie gorszy. Gorszy pojęcie względne ;) O ile w ogóle któryś z proponowanych algorytmów może być gorszy (tzn. może, ale nie w ym sensie *)). No i co rozumiesz przez jakość? Rozumiem, że chodzi o podobieństwo znalezionego koloru. Proponuję eksperyment - zrób screena któregoś z dem i wklej chociażby do Painta, potem wypełnij lewy, duży kwadrat kolorem, który uważasz, że jest bardziej zbliżony do koloru prawego kwadratu... Czy znajdziesz taki? Przecież algorytm press'a czy z HSV nie stworzy nowego, podobniejszego koloru. Z pustego i Salomon nie naleje :idea: ;).

[ Dodano: 14-03-2006, 17:18 ]
Cholera, Panowie! :D Zmieniacie ciągle te posy i żeśnie nakombinowali... zaraz dopisze resztę odpowiedzi... 8)

a_antoniak
-
-
Posty: 645
Rejestracja: 13 sty 2005, o 18:38
Lokalizacja: Krasnystaw
Kontaktowanie:

Postautor: a_antoniak » 14 mar 2006, o 18:19

Barwy to przestrzen i tak nalezy je liczyc.
Hmmm... A kto tak powiedział? Ja tak np. nie robię... :idea:
Mozliwe, ze robisz, tylko nie wiesz tego :). Podasz swoj wzor?

Awatar użytkownika
pajaczek
Moderator
Moderator
Posty: 2650
Rejestracja: 24 sty 2005, o 00:39
Lokalizacja: Winny gród

Postautor: pajaczek » 14 mar 2006, o 18:21

No niewiem niewiem.... wycinek zrzutu ekranowego... nalozylem fragment palety, ten centralny jest wg. mnie podobniejszy.... ale moze to tylko subiektywna ocena.

Obrazek

a_antoniak
-
-
Posty: 645
Rejestracja: 13 sty 2005, o 18:38
Lokalizacja: Krasnystaw
Kontaktowanie:

Postautor: a_antoniak » 14 mar 2006, o 18:22

Zależy, co rozumieć przez pojęcie gorszy.
to:
... podobieństwo znalezionego koloru.
Proponuję eksperyment - zrób screena któregoś z dem i wklej chociażby do Painta, potem wypełnij lewy, duży kwadrat kolorem, który uważasz, że jest bardziej zbliżony do koloru prawego kwadratu... Czy znajdziesz taki? Przecież algorytm press'a czy z HSV nie stworzy nowego, podobniejszego koloru. Z pustego i Salomon nie naleje :idea: ;).
No wlasnie o to chodzi. Dla malo plynnej palety - nie. Ale dla palety zawierajacej bardzo duzo kolorow - bardzo mozliwe ze beda roznice.

PS. Zdaje sie, ze pajączek znalazł kolor w odczuciu człowieka (przynajmniej w pajączka i moim) jest bardziej podobny.
Ostatnio zmieniony 14 mar 2006, o 18:31 przez a_antoniak, łącznie zmieniany 1 raz.

Wróć do „Nie(elektroniczny) Hyde Park”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 60 gości