RGB-algoritmi?

tietääx ketään sellaista algoritmia, jolla syntyy kartta eli suuret arvot vastaa kaikki kanavat täysillä ja pienet arvot vastaa kaikki kanavat pienellä ja siinä välissä sininen vastaisi nollaa eli merenpinnantasoa? Täs ei tarvitse välittää numeroarvoista sinänsä, vaan tavoite on liukuva väri sen arvon mukaan riippumatta siitä, mikä se lähtö on ja mihin se päättyy. Mä mappaan ne kyllä sitten.
9758
Äänestä

Muut lukivat myös

Vastaukset 9

Vanhimmat

sama suomeksi kiitos?

Äänestä
  • skaalassa miinus miljoona, plus miljoona eli visualisoitava ARVO kuuluu väliin [-1e6,1e6] ja mä ajattelin, että miinus miljoonaa vastaisi musta ja plus miljoonaa valkoinen väri ja siinä välissä väri muuttuisi ARVON mukana liukuen mustasta valkoiseen käyden läpi spektrin eri värejä jollain järkevällä logiikalla, jonka se algoritmi, joka laskee punaiselle ja siniselle sekä vihreälle värille määriä siinä ARVON tarkoittamassa pisteessä, ettei hyvästä datasta syntyisi kelvotonta kuvaajaa

    Äänestä

  • mullakin on ARVOJA kirjoitti:

    skaalassa miinus miljoona, plus miljoona eli visualisoitava ARVO kuuluu väliin [-1e6,1e6] ja mä ajattelin, että miinus miljoonaa vastaisi musta ja plus miljoonaa valkoinen väri ja siinä välissä väri muuttuisi ARVON mukana liukuen mustasta valkoiseen käyden läpi spektrin eri värejä jollain järkevällä logiikalla, jonka se algoritmi, joka laskee punaiselle ja siniselle sekä vihreälle värille määriä siinä ARVON tarkoittamassa pisteessä, ettei hyvästä datasta syntyisi kelvotonta kuvaajaa

    Oletan että käytät 16 miljoonan palettia. Tällöin punainen(R), vihreä(G) ja sininen(B) voivat kaikki olla nollasta 255:een.

    Jokaista dataarvoa kohti tee seuraava:
    1) Normalisoi arvo väliin [0,2e6]
    2) Laske sininen B=mod(arvo,255)
    3) Laske punainen R=mod(arvo/255,255)
    4) Laske vihreä R=mod(arvo/255^2,255)

    Äänestä

  • Johnnie83 kirjoitti:

    Oletan että käytät 16 miljoonan palettia. Tällöin punainen(R), vihreä(G) ja sininen(B) voivat kaikki olla nollasta 255:een.

    Jokaista dataarvoa kohti tee seuraava:
    1) Normalisoi arvo väliin [0,2e6]
    2) Laske sininen B=mod(arvo,255)
    3) Laske punainen R=mod(arvo/255,255)
    4) Laske vihreä R=mod(arvo/255^2,255)

    täysille ja muut hävis kokonaan

    Äänestä

  • Sininen kanava kirjoitti:

    täysille ja muut hävis kokonaan

    Tuo algoritmi kyllä toimii joten se taitaa olla implementaatiosta kiinni, jos liittäisit koodisi mukaan niin tietäisi paremmin...

    Äänestä

  • Johnnie83 kirjoitti:

    Tuo algoritmi kyllä toimii joten se taitaa olla implementaatiosta kiinni, jos liittäisit koodisi mukaan niin tietäisi paremmin...

    sinisen kanavan suhteellinen osuus koko skaalan alueella järjestyksessäsi punaiseen nähden nähden 255-kertaiseksi ja vihreään nähden (255*255)-kertaiseksi, joten ne häviävät eli niitten osuutta ei voi silmäilemällä nähdä siitä sinisestä.

    mulla on ARVOJA välillä minimiARVO,maksimiARVO ja mä skaalaan sen koko kanavan leveyteen eli maxKanava=255, niin silloinhan siitä saadaan siniselle eli B(ARVO) = maxKanava / ( maxARVO - minARVO ) * (ARVO - minARVO), joka todellakin kauniisti palauttaa sinistä välillä 0,255, mutta punainenpa palauttaakin 1/255 ja vihreä 1/(255*255) ==> pelkkää sinistä näkyy. Se on aivan sama, pelaillaanko siinä jakojäännöksillä vaiko millä ==> yksi väri vallitsee. Mut jos sulla on jotain dokumentaatiota tuohon algoritmiin liittyen, niin mä voisin sinne laittamastasi linkistä mennä kahtoon, mitä mä en ymmärtänny siinä niin.

    Äänestä

  • ärgeebeetä kirjoitti:

    sinisen kanavan suhteellinen osuus koko skaalan alueella järjestyksessäsi punaiseen nähden nähden 255-kertaiseksi ja vihreään nähden (255*255)-kertaiseksi, joten ne häviävät eli niitten osuutta ei voi silmäilemällä nähdä siitä sinisestä.

    mulla on ARVOJA välillä minimiARVO,maksimiARVO ja mä skaalaan sen koko kanavan leveyteen eli maxKanava=255, niin silloinhan siitä saadaan siniselle eli B(ARVO) = maxKanava / ( maxARVO - minARVO ) * (ARVO - minARVO), joka todellakin kauniisti palauttaa sinistä välillä 0,255, mutta punainenpa palauttaakin 1/255 ja vihreä 1/(255*255) ==> pelkkää sinistä näkyy. Se on aivan sama, pelaillaanko siinä jakojäännöksillä vaiko millä ==> yksi väri vallitsee. Mut jos sulla on jotain dokumentaatiota tuohon algoritmiin liittyen, niin mä voisin sinne laittamastasi linkistä mennä kahtoon, mitä mä en ymmärtänny siinä niin.

    En nyt tiedä mikä on niin vaikeaa siinä koodin postaamisessa mutta epäilen että et ymmärtänyt sitä arvon normalisoinnin kohtaa.

    Postaan nyt kaksi esimerkkifunktiota jotka tekevät sen, Ensimmäinen on se helpompi niistä mutta siinä on se haittapuoli että se menee ensin tummansinisestä valkoseen, sitten tumman punaisesta valkoiseen jne. Toinen funktio tekee sen ns. oikeasti mutta on myös vaikeampi ymmärtää (ja vielä vaikeampi selittää ilman koodia).

    int RGB(int minArvo, int maxArvo, int arvo, int *R, int *G, int *B)
    {
    /* Tarkistetaan että arvo on mahdollinen */
    if(arvo > maxArvo || arvo < minArvo) return -1;

    /* Normalisoidaan skaala [0, maxArvo] */
    maxArvo += -minArvo;
    arvo += -minArvo;
    minArvo += -minArvo; /* =0 */

    /* Normalisoidaan arvo RGB väreihin nähden */
    arvo = int((arvo*16e6)/maxArvo);

    /* Luodaan RGB komponentit */
    *B = arvo % 255;
    arvo /= 256;
    *R = arvo % 255;
    arvo /= 256;
    *G = arvo % 255;

    return 0;
    }

    int RGB2(int minArvo, int maxArvo, int arvo, int *R, int *G, int *B)
    {
    /* Tarkistetaan että arvo on mahdollinen */
    if(arvo > maxArvo || arvo < minArvo) return -1;

    /* Normalisoidaan skaala [0, maxArvo] */
    maxArvo += -minArvo;
    arvo += -minArvo;
    minArvo += -minArvo; /* =0 */

    /* Normalisoidaan arvo RGB väreihin nähden */
    arvo = int((arvo*1530)/maxArvo);

    /* Muodostetaan värikomponentit aloitetaan sinisestä*/
    *R = 0;
    *G = 0;
    *B = 255;

    if(arvo > 255){ arvo -= 255; *R=255; }
    else{ *R = arvo; return 0; }

    if(arvo > 255){ arvo -= 255; *B=0; }
    else{ *B -= arvo; return 0; }

    if(arvo > 255){ arvo -= 255; *G=255; }
    else{ *G = arvo; return 0; }

    if(arvo > 255){ arvo -= 255; *R=0; }
    else{ *R -=arvo; return 0; }

    if(arvo > 255){ arvo -= 255; *B=255; }
    else{ *B = arvo; return 0; }

    if(arvo == 255) *G=0;
    else *G -= arvo;

    return 0;
    }

    Äänestä

  • Johnnie83 kirjoitti:

    En nyt tiedä mikä on niin vaikeaa siinä koodin postaamisessa mutta epäilen että et ymmärtänyt sitä arvon normalisoinnin kohtaa.

    Postaan nyt kaksi esimerkkifunktiota jotka tekevät sen, Ensimmäinen on se helpompi niistä mutta siinä on se haittapuoli että se menee ensin tummansinisestä valkoseen, sitten tumman punaisesta valkoiseen jne. Toinen funktio tekee sen ns. oikeasti mutta on myös vaikeampi ymmärtää (ja vielä vaikeampi selittää ilman koodia).

    int RGB(int minArvo, int maxArvo, int arvo, int *R, int *G, int *B)
    {
    /* Tarkistetaan että arvo on mahdollinen */
    if(arvo > maxArvo || arvo < minArvo) return -1;

    /* Normalisoidaan skaala [0, maxArvo] */
    maxArvo += -minArvo;
    arvo += -minArvo;
    minArvo += -minArvo; /* =0 */

    /* Normalisoidaan arvo RGB väreihin nähden */
    arvo = int((arvo*16e6)/maxArvo);

    /* Luodaan RGB komponentit */
    *B = arvo % 255;
    arvo /= 256;
    *R = arvo % 255;
    arvo /= 256;
    *G = arvo % 255;

    return 0;
    }

    int RGB2(int minArvo, int maxArvo, int arvo, int *R, int *G, int *B)
    {
    /* Tarkistetaan että arvo on mahdollinen */
    if(arvo > maxArvo || arvo < minArvo) return -1;

    /* Normalisoidaan skaala [0, maxArvo] */
    maxArvo += -minArvo;
    arvo += -minArvo;
    minArvo += -minArvo; /* =0 */

    /* Normalisoidaan arvo RGB väreihin nähden */
    arvo = int((arvo*1530)/maxArvo);

    /* Muodostetaan värikomponentit aloitetaan sinisestä*/
    *R = 0;
    *G = 0;
    *B = 255;

    if(arvo > 255){ arvo -= 255; *R=255; }
    else{ *R = arvo; return 0; }

    if(arvo > 255){ arvo -= 255; *B=0; }
    else{ *B -= arvo; return 0; }

    if(arvo > 255){ arvo -= 255; *G=255; }
    else{ *G = arvo; return 0; }

    if(arvo > 255){ arvo -= 255; *R=0; }
    else{ *R -=arvo; return 0; }

    if(arvo > 255){ arvo -= 255; *B=255; }
    else{ *B = arvo; return 0; }

    if(arvo == 255) *G=0;
    else *G -= arvo;

    return 0;
    }

    avaruusvektoriaanisen kolmiulotteisvärin patenttihakemuksenne suosiolla ja ajoissa pois eli suosittelisin, että jätätte sen suosiolla ja tällä puheella jättämättä: olen kiistatta ja riidatta dokumentoinut esittämäni menetelmän, jolla edellisen kirjoittajan julkituomasta rautalangasta itseni tahi kenenkä vaan toimesta väännellyn 3d-katiskan reikiin saadaan järkevää väriä, myös muualla. Eikö ylläpidon tulisi sääntöjenne mukaisesti esiintyä tunnistettavasti ylläpitona, mikäli katsoo aiheelliseksi ottaa osaa keskusteluihin?

    Äänestä

  • ärgeebeetteri kirjoitti:

    avaruusvektoriaanisen kolmiulotteisvärin patenttihakemuksenne suosiolla ja ajoissa pois eli suosittelisin, että jätätte sen suosiolla ja tällä puheella jättämättä: olen kiistatta ja riidatta dokumentoinut esittämäni menetelmän, jolla edellisen kirjoittajan julkituomasta rautalangasta itseni tahi kenenkä vaan toimesta väännellyn 3d-katiskan reikiin saadaan järkevää väriä, myös muualla. Eikö ylläpidon tulisi sääntöjenne mukaisesti esiintyä tunnistettavasti ylläpitona, mikäli katsoo aiheelliseksi ottaa osaa keskusteluihin?

    että tuolla tavalla katiskalangoistansa kouhottavan tahon annetaan täällä huseerata romuttamassa kaikki vähänkään järjelliset aateekookeskustelut: kyllähän näissä keskusteluissa täytyy voida keskustella muistakin lähtökohdista kuin niistä, että hänen tahi hänelle pitaa saada postailluksi vindovsin ja kaiken muunkin sorsat ja alkoritmit, että hän sitten voi katiskalangoillaan ne harsia yhteen, miten taitaa. Hey comoon dudes, lets make a program not war!

    Äänestä

Ketjusta on poistettu 9 sääntöjenvastaista viestiä.

Kommentoi aloitusta


ei paletti-indexeille kirjoitti:

tietääx ketään sellaista algoritmia, jolla syntyy kartta eli suuret arvot vastaa kaikki kanavat täysillä ja pienet arvot vastaa kaikki kanavat pienellä ja siinä välissä sininen vastaisi nollaa eli merenpinnantasoa? Täs ei tarvitse välittää numeroarvoista sinänsä, vaan tavoite on liukuva väri sen arvon mukaan riippumatta siitä, mikä se lähtö on ja mihin se päättyy. Mä mappaan ne kyllä sitten.

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu