[Alle] Kleuren mengen als verf

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Anoniem: 117981

Topicstarter
Ik wil een algorithm maken om 2 kleuren te mengen. Mijn eerste idee was om de rood, groen en blauw waarden elk bij elkaar op te tellen en te delen door twee, maar dat geeft een additive kleurenmenging. De kleur die ik wil bereiken als resultaat, moet gemengd zijn zoals verf op papier. Voorbeeld:

Bij additive mengen wordt geel (0xFF FF 00) met blauw (0x00 00 FF) grijs (0x77 77 77). Dat klopt voor een beeldscherm of voor andere licht uitstralende kleurenbron, maar niet op verf.

Verf straalt geen kleur uit, maar absorbeert allle andere kleuren. Rode verf absorbeert als er wit licht op valt het groene en blauwe deel van het spectrum. Maar er is een extra effect. De kleuren die geabsorbeerd worden zijn nooit puur, maar een mix van verschillende frequenties die in meer of mindere maten geabsorbeerd worden. Stel dat je nu geel met blauw mengt, dan zullen de frequenties van die twee voor het grootste deel geabsorbeerd worden door elkaars verf, maar daar waar de twee verven overlappen qua freqenties die wel weerkaatst worden zullen ze dus wel reflecteren. Daardoor wordt geel met blauw dus groen (wat in het midden ligt). Een plaatje verduidelijkt de situatie:

Afbeeldingslocatie: http://www.yorku.ca/eye/blue-yel.gif

De tint van het groen zal heel erg afhankelijk zijn van de mate van overlap tussen de twee frequentie gebieden, en dus van de soort gele en soort blauwe verf die gebruikt wordt (los van de kleur die ervaren wordt) maar dit wil ik verder buiten beschouwing laten (ga uit van een soort standaard basiskleuren oid met een redelijk breed spectrum). ZOu er geen overlap zijn zou je dus wel weer een soort grijs als resultaat krijgen, hoe meer overlap hoe groener het wordt.

Wat ik tot nu toe heb kunnen vinden is dat het Kubelka Munk model zoiets doet, maar ik kan hier geen implementatie van vinden. Ook vraag ik me af of er niet een eenvoudiger model mogelijk is.

Is er iemand die ideeen of suggesties heeft?

Acties:
  • 0 Henk 'm!

  • Herko_ter_Horst
  • Registratie: November 2002
  • Niet online
Je moet de RGB waardes binair bij elkaar "optellen" (boolean OR operatie) i.p.v. decimaal.

Oops, niet dus.

[ Voor 14% gewijzigd door Herko_ter_Horst op 17-02-2010 21:49 ]

"Any sufficiently advanced technology is indistinguishable from magic."


Acties:
  • 0 Henk 'm!

  • Reptile209
  • Registratie: Juni 2001
  • Nu online

Reptile209

- gers -

Ben je niet 'gewoon' op zoek naar het Wikipedia: CMYK color model? Dat zijn de mengregels voor verf.
Kijk eens naar deze pagina, de eerste reactie geeft je wat tips om mee te starten.

[ Voor 43% gewijzigd door Reptile209 op 17-02-2010 21:50 ]

Zo scherp als een voetbal!


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Als je gaat [google=paint mixer rgb] krijg je: dit voorbeeld en dit voorbeeld waarvan ook de source beschikbaar is? Of bedoel je toch gewoon het CMYK-model waarmee printers werken (misschien werkt die code ook wel zo, niet gekeken)? :p

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • Twarp
  • Registratie: Oktober 2000
  • Laatst online: 22-04 17:53

Twarp

just grin...

Heb je ook nagedacht dat het op papier niet als RGB maar als rood geel en blauw kan reageren?

Dit zijn namelijk de primaire kleuren voor ons mensen ;)

Meh ...


Acties:
  • 0 Henk 'm!

Anoniem: 117981

Topicstarter
Reptile, de pagina die je noemt had ik al gelezen. Hij is behoorlijk goed, maar geeft als oplossing eigenlijk alleen het Kubelka Munk model dat ik noemde. En een simpele implementatie daarvan lijkt niet direct mogelijk.

Pedorus: de eerste link die je geeft kende ik, maar het java example gaat alleen in op mixing light beams. De tweede link kende ik niet, maar die werkt alleen voor de 6 genoemde primaire en secundaire kleuren. Dan kan ik net zo goed uit een lijst werken, ik wil juist een functie waar ik twee willekeurige waarden in kan stoppen en een resultaat er uit krijgt. CMY(K) geeft hetzelfde probleem als RGB bij mengen. De RGB kleur kan je omzetten naar CMY, maar dan hou je nog steeds geen rekening met het overlappen van de gebieden zoals in het plaatje dat ik laat zien. Als je het dus weer terug vertaald daarna naar RGB krijg je dus hetzelfde als wanneer je RGB mengt.

Twarp: Hoe bedoel je 'niet als RGB reageert'? Ik wil bijvoorbeeld wanneer ik 0xFFFF00 en 0x0000FF invoer 0x008000 terugkrijgen. Van alle formuloes die ik vind doet geen enkele dat. Sommige beweren zelfs dat het mengen van geel met blauw geen groen op zou leveren, maar dat alleen cyaan met geel groen op levert. Cyaaan (0x00FFFF, absorbeert dus rood) met geel (0xFFFF00, absorbeert dus rood en groen) resulteert bij een vermenigvuldiging van iedere waarde wel in groen, maar niet om de reden dat blauw en geel in werkelijkheid groen opleveren. Ook is het dus niet de groen zoals wij de typische kleur groen waar het om gaat ervaren (0x008000, een lagere intensiteit door de meging die typisch wordt gebruikt om 'groen' te maken)

Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Maar als je een mathematisch model gaat opstellen zoals je met een tekening schetst moet het toch wel te doen zijn?

Je hebt twee kleuren, elk te definieren met een "kleur" (µ) en "zuiverheid" (σ). Dan kan je beide gebieden als een Gauss modeleren (of anders, als dat beter uitkomt). Beide oppervlaktes binair filteren zodat je het overlappende gedeelte krijgt. Vervolgens is je gemiddelde, je spreiding en je maximum een index voor je mengkleur.

Je hebt hiermee het probleem "versimpeld" naar twee nieuwe problemen: hoe bepaal je de vorm van de curve (ga ws in eerste instantie van een Gauss uit, is makkelijkste). En ten tweede hoe bepaal je van de gemiddelde waarde, spreiding en maximum een nieuwe kleur? Mij lijkt dat je met een beetje proberen al een eind komt.

Acties:
  • 0 Henk 'm!

  • Fish
  • Registratie: Juli 2002
  • Niet online

Fish

How much is the fish

mithras schreef op woensdag 17 februari 2010 @ 23:35:
Maar als je een mathematisch model gaat opstellen zoals je met een tekening schetst moet het toch wel te doen zijn?

Je hebt twee kleuren, elk te definieren met een "kleur" (µ) en "zuiverheid" (σ). Dan kan je beide gebieden als een Gauss modeleren (of anders, als dat beter uitkomt). Beide oppervlaktes binair filteren zodat je het overlappende gedeelte krijgt. Vervolgens is je gemiddelde, je spreiding en je maximum een index voor je mengkleur.

Je hebt hiermee het probleem "versimpeld" naar twee nieuwe problemen: hoe bepaal je de vorm van de curve (ga ws in eerste instantie van een Gauss uit, is makkelijkste). En ten tweede hoe bepaal je van de gemiddelde waarde, spreiding en maximum een nieuwe kleur? Mij lijkt dat je met een beetje proberen al een eind komt.
We hebben het dus als verf, net zoals op papier

Dan heb je nog te maken met transparantie. van de verf (denk aan waterverf)
hoe dik we het aanbrengen
en welke volumes je de verf mengt e.g. 1 deel bordaux rood en 6 delen oker
en dan ben ik vast wel iets vergeten


we nemen ook nog wit papier aan maar dat is niet gesteld (wel aannemelijk)

Iperf


Acties:
  • 0 Henk 'm!

  • Twarp
  • Registratie: Oktober 2000
  • Laatst online: 22-04 17:53

Twarp

just grin...

Ik bedoelde dat wanneer je verf gaat mengen dan heb je te maken met gereflecteerd licht. RGB van een monitor is de oplossing voor het probleem om geel en bruin te krijgen. De precieze reden kan ik je nu even iet leveren ;)

Meh ...


  • burne
  • Registratie: Maart 2000
  • Niet online

burne

Mine! Waah!

Twarp schreef op woensdag 17 februari 2010 @ 21:52:
Dit zijn namelijk de primaire kleuren voor ons mensen ;)
Nee.

Primaire kleuren zijn de kleuren waar je ogen gevoelig voor zijn. Je hebt kegeltjes die reageren op rood, groen en blauw. De combinatie van kleuren bepaalt wat je waarneemt, en daarom heet het additieve menging.

Mengen op papier heet anders, subtractieve mening, en dat doe je met de secundaire kleuren. Dat zijn magenta, cyaan en geel (yellow). De kleuren die je ziet is wat er overblijft nadat de kleuren op het papier een deel van het spectrum opgenomen hebben, en iedere secundaire kleur filtert een deel van het spectrum. Omdat drukinkten niet precies de juiste kleur en kleurzuiverheid hebben gebruiken drukkers ook nog zwart, en daarmee heb je gelijk de namen van het additieve en subtractieve model:

RGB en CYMK.

Rood en groen licht samen geven geel. Gele en cyaan-blauwe inkt laten van het opvallend witte licht alleen groen reflecteren.

Afbeeldingslocatie: http://home.sharpdots.com/resources/images/rgb_model.gif

Laat je niet door google misleiden. 100.000.000 mensen hebben het helemaal verkeerdom:

onzin als Afbeeldingslocatie: http://www.designedlykristi.com/tutorials/color_intro/images/fig1.jpg vind je overal en het klopt niet.

I don't like facts. They have a liberal bias.


  • - peter -
  • Registratie: September 2002
  • Laatst online: 07-05 12:59
Krita heeft tijdens de summer of code een student gehad die werkte aan simuleren van verf. Is denk ik wel al een paar jaar geleden, maar daar zal zeker wel code van beschikbaar zijn.
Pagina: 1