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
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? Jak to matematycznie obliczyć? 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?
Pozdr.
P.S.
Nie wiem, czy wszystko wytłumaczyłem jasno (nie leży to w mojej naturze ), ale jakby co - pytajcie
(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?
Pozdr.
P.S.
Nie wiem, czy wszystko wytłumaczyłem jasno (nie leży to w mojej naturze ), ale jakby co - pytajcie
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))
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))
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 )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
Pozdr.
P.S.
Zaraz spróbuję zastosować ten wzór, to zobaczymy...
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.
-
- -
- Posty:651
- Rejestracja:13 sty 2005, o 18:38
- Lokalizacja:Krasnystaw
- Kontaktowanie:
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.Panie kolego...
nie mam pojecia dlaczego mialoby to działac
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
-
- -
- Posty:651
- Rejestracja:13 sty 2005, o 18:38
- Lokalizacja:Krasnystaw
- Kontaktowanie:
Hmmm...
Po pierwsze: czemu sugerujesz, żebym nie kombinował (w pozytywnym tego słowa znaczeniu)? To leży w mojej naturze...
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!
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...
A być może...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.
No dzięki...sposob podany przez press-a na 100% sie sprawdzi. lepiej zastosuj go niz kombinuj z "wlasnymi algorytmami" o (zapewne) watlych podstawach
Po pierwsze: czemu sugerujesz, żebym nie kombinował (w pozytywnym tego słowa znaczeniu)? To leży w mojej naturze...
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!
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.42KiB)Pobrany 371 razy
To nie jest wzor czyto elektryczny.Po sekundo: czemu mam kożystać ze sposobu obliczania błedu w miernictwie elektrycznym, gdy stworzyłem własny, dobry algorytm?
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
To już nie moja wina .To nie jest wzor czyto elektryczny.
Hmmm... A kto tak powiedział? Ja tak np. nie robię...Barwy to przestrzen i tak nalezy je liczyc.
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 . 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 .
Pozdr.
-
- -
- Posty:651
- Rejestracja:13 sty 2005, o 18:38
- Lokalizacja:Krasnystaw
- Kontaktowanie:
Echhh młodość musi sie wyszumiec . Ale to dobrze . 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.
A gdzie ja tu szumiałem?Echhh młodość musi sie wyszumiec .
Możnaby powiedzieć, że to jest moje motto .Ale to dobrze . Petersz - kombinuj i probuj, w ten sposob czlowiek tez sie uczy.
Staram się o tym pamiętać, więc nie wymyślałem od nowa C++ .Ale sprawdzaj takze to, co wymyslili ludzie zyjacy wczesniej, zeby nie wywaac otwartych drzwi .
Ehh... Ale nadal nie dowiedziałem się, jak oceniacie mój algorytm! Czy myślicie, że inne (np. press'a) mogłyby lepiej działać?! I czy macie jakieś zastrzeżenia?
Pozdr.
-
- -
- Posty:651
- Rejestracja:13 sty 2005, o 18:38
- Lokalizacja:Krasnystaw
- Kontaktowanie:
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?
Czy w danym zastosowaniu wystarczy jakosc zapewniana przez gorszy, ale za to szybszy algorytm?
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
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
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
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
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 .Czy w danym zastosowaniu wystarczy jakosc zapewniana przez gorszy, ale za to szybszy algorytm?
[ Dodano: 14-03-2006, 17:18 ]
Cholera, Panowie! Zmieniacie ciągle te posy i żeśnie nakombinowali... zaraz dopisze resztę odpowiedzi...
-
- -
- Posty:651
- Rejestracja:13 sty 2005, o 18:38
- Lokalizacja:Krasnystaw
- Kontaktowanie:
-
- -
- Posty:651
- Rejestracja:13 sty 2005, o 18:38
- Lokalizacja:Krasnystaw
- Kontaktowanie:
to:Zależy, co rozumieć przez pojęcie gorszy.
... podobieństwo znalezionego koloru.
No wlasnie o to chodzi. Dla malo plynnej palety - nie. Ale dla palety zawierajacej bardzo duzo kolorow - bardzo mozliwe ze beda roznice.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 .
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.
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 39 gości