kyrsjo Skrevet 10. februar 2012 Del Skrevet 10. februar 2012 Så vidt jeg skjønner den matte-linken, så har du *en* gitt matrise M for å konvertere et RGB fargerom til et "XYZ" generellt rom. Dermed blir konvertering fra RGB-rom 1 til rom 2 ganske enkelt å bruke matrisen M_2^{-1}*M_1 på en kolonnevektor [R G B]. Dersom man skal konvertere et helt bilde, må man bruke konvereringsmatrisen på en Nx3-matrise [R1 R2 R3 ... \\\ G1 G2 G3 \\ B1 B2 B3]. Så vidt jeg skjønner da... Men hvordan LAB funker står ikke på lenkene - bare at man kan bruke "deltaE". Kanskje man kan få skrevet en funksjon som tar *et helt bilde* i slengen - burde ikke være umulig? Lenke til kommentar
Djn Skrevet 14. februar 2012 Del Skrevet 14. februar 2012 (endret) Så vidt jeg skjønner den matte-linken, så har du *en* gitt matrise M for å konvertere et RGB fargerom til et "XYZ" generellt rom. Dermed blir konvertering fra RGB-rom 1 til rom 2 ganske enkelt å bruke matrisen M_2^{-1}*M_1 på en kolonnevektor [R G B]. Dersom man skal konvertere et helt bilde, må man bruke konvereringsmatrisen på en Nx3-matrise [R1 R2 R3 ... \\\ G1 G2 G3 \\ B1 B2 B3]. Så vidt jeg skjønner da... Men hvordan LAB funker står ikke på lenkene - bare at man kan bruke "deltaE". Kanskje man kan få skrevet en funksjon som tar *et helt bilde* i slengen - burde ikke være umulig? Det er absolutt mulig. Jeg antar det greieste er å demontere den metoden han bruker på enkelt-punkter, se hva den gjør, og bruke numpy til å gjøre det samme med hele bildet. (Jeg er heller ikke sikker på hvordan man konverterer XYZ til Lab, men har fått med meg at det bruker konstanter som er avhengig av fargebalansen i lyset man skal observere resultatet i - det finnes en eller annen standard som er vanligst, men ikke strengt talt riktigere enn de andre.) Spørsmålet er om det lønner seg: Hvis man vanligvis finner treff tidlig sparer man antageligvis tid på å bare konvertere noen pixler; hvis man vanligvis finner treff sent sparer man antageligvis tid på å konvertere hele i ett jafs. Endret 14. februar 2012 av Djn Lenke til kommentar
kyrsjo Skrevet 21. juni 2012 Del Skrevet 21. juni 2012 Det fine med å konvertere alt i ett jafs, er at det er en "single-instruction/multiple-data" (SIMD) ting => skulle ikke overraske meg om dette kan gjøres på grafikkort, og da går det unna Irriterende at Python er så dårlig til å paralellisere... Lenke til kommentar
Terrasque Skrevet 22. juni 2012 Del Skrevet 22. juni 2012 (endret) Irriterende at Python er så dårlig til å paralellisere... Vel, multiprocessing modulen fungerer ganske bra, egentlig. I et program som hadde en cpu-heavy funksjon var det bare disse endringene som trengtes: from multiprocessing import Pool p = Pool(threadnum) result_list = p.map(heavyFunc, input_list, 512) # ---------------------- normal equivalent -------------- result_list = [] for x in input_list: result_list.append(heavyFunc(x)) Gikk fra 11 sekunder original til 3.5 sekunder på 4 threads (4 core system, 1 mill entries). Endret 22. juni 2012 av Terrasque Lenke til kommentar
kyrsjo Skrevet 23. juni 2012 Del Skrevet 23. juni 2012 Ja, det funker greit om du har en "self-contained" funksjon, men dersom du skal kalle på en haug med funksjoner i et objekt-tre*, som *jeg* vet ikke tråkker i beina på hverandre, så funker det ikke - shared memory og threads som kjører samtidig er ikke mulig. *) F.eks. om mange av objekt A henger på objekt B, og jeg ønsker å be alle A'ene om å regne ut noe, som kanskje krever lesetilgang til noe hos B (eller C, som man kan finne ved å følge en peker fra B) Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå