» »

Obdelava slike - orodje Resize - Filtri

Obdelava slike - orodje Resize - Filtri

G@c ::

ZIVJO :P !

Rad bi zvedel kaj vec o fitrih, ki nastopajo pri spreminjanju locljivosti slike.
Npr. zelim spremeniti locljivost iz 1024x768 na 800x600, vendar so potem se na voljo neki filtri: Box, Triangle, Bicubic, Bell, B-spline, Lanczos, Mitchell.

Zanimajo me PRAV VSE (kaj se dogaja v ozadju, kako delujejo algoritmi,...) v vezi s temi filtri. Ce ima kdo znanje oziroma me lahko napoti na kaksno "pametno" (po moznosti slovensko) internetno stran - Prosim Pomagajte.

Ze vnaprej se Vam zahvaljujem - upam, da Vam nisem tratil dragocenega casa - in Vas lepo pozdravljam.

Senitel ::

Vse o filtrih kaj? ;)
Vsak filter generira novo sliko na podlagi prejšnje. Za vsako piko v novi sliki se pogleda nekaj pik v originalu (kernel filtra) ter se jih vstavi v neko matematično formulo.
Box filter je enostaven, njegovo jedro pa takole
**
**

Torej za piko v novi sliki, algoritem pogleda kje v originalni sliki se nahaja ta koordinata (primer: ko spreminjaš ločljivost iz 1024x768 na 800x600 in filter riše piko na 400x300 se ta nahaja na 512x384 v originalni sliki) in prebere štiri sosednje pike. Ker pa se pike iz originala ne preslikajo nujno direktno v novo sliko (nadaljevanje primera od prej: koordinata (1,1) v novi sliki se preslika v (1.28,1.28) iz originala) se naredi linearna interpolacija med tistimi štirimi pikami (nadaljevanje primera - kXY je pika iz jedra: (k11 * 0.72 + k21 * 0.28) * 0.72 + (k12 * 0.72 + k22 * 0.28) * 0.28 za konkreten primer :D).
Triangle je še bolj enostaven saj ima jedro samo tri točke (jasno se ga lahko tudi obrne):
*
**

Interpolacija je še vedno linearna.
Bicubic jedro je:
****
****
****
****

Interpolacija je tudi linearna, samo imaš več koeficientov in drugačne uteži, kot pri box filtriranju (da dobiš gausovo krivuljo, če se ne motim).
B-spline se mi pa zdi da jedro stane isto 4x4...
****
****
****
****

razlika je pa v tem, da čez 4 horizontalne točke v jedru potegneš krivuljo (to narediš 4x) in tako dobiš 4 nove točke vertikalno, čez katere zopet potegneš krivuljo.
Za Bell, Lanczos in Mitchell se mi ne da iskat po internetu... :8)
Seveda je pa tukaj še fora, da monitorji izrišejo pike popravljene z gama funkcijo. Torej če imaš na sliki barvo RGB (0.5, 0.5, 0.5), boš na zaslonu dejansko videl (0.5, 0.5, 0.5)^2.2 torej (0.217, 0.217, 0.217)... Če hočeš biti res natančen, potem moraš v filtru najprej jedro popraviti z gama funkcijo, narediti aritmetiko in dobljeno vrednost spravit nazaj na linearno skalo (torej ^(1/2.2)).
Upam da kaj pomaga... :D

G@c ::

:D

Najlepsa hvala, vsekakor pomaga !!!
Kje na spletu si pa vse to nasel ?
Bi mi mogoce lahko podal povezavo ... da se sam malo pobrskam naokoli.
Lp!

Senitel ::

V bistvu je bilo tole tako iz glave... :D Bom ppoizkusil malo poiskat še kaj po internetu, ko staknem malo časa...

G@c ::

Trenutno me zanima le nekaj:
- ko omenjas jedro,

npr. Box ima jedro enako
**
**

ali mislis z jedrom na kernel filtra
(jedro = kernel) ?
L@@King 4 knowledge !

Senitel ::

Jup, jedro = kernel...

cirecire ::

Jaz imam tud eno podobno vprašanje.

Imam en Divx resolicije 512x384. Rad bi zmanjšal resolucijo na 512x288 z VirtualDub-om.

Samo nisem čisto prepričan, kateri filter naj uporabim.

Na netu sem zasledil, da je za povečanje slike najbolje uporabiti filtre Bicubic ali Lanczos.

Za pomanšanje pa naj bi se uporabil filter Bilinear.

Zanima me, če je to točno? Ali naj za pomanjšanje resolucije uporabim filter Bilinear?

Zgodovina sprememb…

  • spremenil: cirecire ()

G@c ::

Senitel hvala (saj se mi je zdelo, da je jedro = kernel, ampak ziher je ziher).

Cirecire upam da ti bo tole v pomoc:
(direkt bistvo dobis, ce si ogledas stran, do katere te vodi spodnji link ... ni ti treba brati tega mojega kvasenja 8-O ).

Osebno sicer ne filtriram filmov, le slike, ampak :)) naj bi se
pri pomanjsavi uporabljal bilinear,
pri povecavi pa bicubic filter.
V bistvu je to sveto pravilo in se ga ne bi krsilo (seveda so izjeme in gre tudi za stvar okusa).

Omenil si se Lanczos filter - povem ti lahko, da je kernel (jedro) :D tega filtra 6x6, medtem ko je jedro bicubic filtra 4x4 (torej mislim, da je lanczos bolj natancen, a zato tudi casovno bolj potraten). Primeren je za pomanjsavo in tudi za povecavo (pri filtriranju slik naj bi tu vstopil v "sceno" Mitchell filter). Skratka osebno mislim, da je boljsi od bicubic filtra (doma sem sprobal na slikah in ugotovil, da bicubic pomotni sliko, medtem ko je slika po filtriranju z lancoz filtrom bolj ostra).

-----------------------------------------------------------------
POVZETEK:
Kar si ti napisal drzi (imas prav) :))
Ce imas cas, poskusi pomanjsati z Lancoz filtrom.
(bolj za salo kot zares ... in sporoci rezultate :\ )

SNOC CRPAL IZ:
Bilinear VS Bicubic
-----------------------------------------------------------------

Ce sem napisal kaksno neumnost, me popravite.
L@@King 4 knowledge !

G@c ::

Nekoc sem ze nacel temo o barvnih modelih, a jo sedaj ne najdem - zato bom kar tu na hitro napisal: ve kdo kaksne barvne globine so na voljo v barvnem modelu HSV in HSL (za druge vem, sem nasel na googlu, za ta 2 ne najdem :O ) ?

Npr.
RGB: 1,4,8,15,24 mozne, 32 ni mozna.
L@@King 4 knowledge !

CaqKa ::

par rezultatov


in zakaj 32 bitna globina nebi bila možna?
verjetno si hotel vrašat katere so dovolj razširjene da se jih uporablja.

--------------
sam tist dolg link sem ti skrajšal - P

Zgodovina sprememb…

  • spremenil: Predator ()

Senitel ::

Mah barvne globine imaš lahko kakršne ti paše (oziroma kakršne ti hardrware podpira). 1 bitni način jaz nebi kvalificiral kot RGB >:D. 4 in 8 bitna sta paletizirana (kar pomeni, da imaš 16 ali 256 barv 24bitnih barv v paleti in potem uporabljaš samo še indekse v to paleto). 15 bitni je v bistvu 16 bitni, kjer je en bit neuporabljen. 16 bitni ima 5 bitov za rdečo in modro ter 6 za zeleno. 24 bitni je jasno 8 bitov za vsako od treh barv. 32 bitni je pa RGBA način (24bpp + 8 za alpha kanal).

G@c ::

Ma od kje vi tok veste 8-O ? Hvala.

Neki morm se prasat (upam da bo sploh smiselno):
a so vse te globine, o katerih si pisal, na voljo pri HSV, HSL - npr. a lahko uporabim 1,4,8,15,24,32 bitno globino pri HSV,HSL (sklepam da lahko, ko pravis "Mah barvne globine imaš lahko kakršne ti paše") ?

Tnx!
L@@King 4 knowledge !

CaqKa ::

kolko bitov boš imel na barvno komponento je glih vseeno. lahko si jih zmisliš tolko da ti ram nebo folgal.
vprašanje je samo katere od teh globin podpirajo programi/hardverskezadeve, kot so recimo video kamera ali pa nevem.. igre..
lahko si napišeš program ki bo delal z 128 biti po komponenti. photoshop menda gre do 48 bitov na barvo v rgbju

sem ga vklopil zdaj.. na izbiro imaš 8 ali pa 16 bitov NA KANAL.
torej 48 v RGB


torej teoretično lahko maš glih kolk hočeš.. verjetno pa so kje zapisani kaki standardi za katere sisteme.
to bo moral senitel povedat ali pa poiskat kake linke.

Senitel ::

Glej... Monitorji prikazujejo barve v RGB-ju. Recimo BMP format tudi shranjuje slike v RGB-ju. TIFF jih lahko tudi v RGBA. JPG pa po drugi strani uporablja čist ekstra model "YCbCr", ki nima glih velik veze z barvami. HSV in HSL nista modela, ki bi se uporabljala za shranjevanje ali prikazovanje slik. Uporabljata se bolj za izbiro barve ali pa pri kakšnih algoritmih med slikami, ki so bolj prikladni za HSV/HSL kot RGBA. Dobri CRT monitorji lahko prikazujejo posamezno barvo tudi z 10 biti, kar da 1024 odtenkov rdeče, zelene in modre. LCD-ji so trenutno omejeni na 8 bitov ali manj. Ampak to je vse kar se prikaza ali shranjevanja tiče...
Ko ti obdeluješ sliko v Photoshopu ali kje drugje nanašaš nove slike na staro sliko. Novo sliko recimo prišteješ stari (po RGB vrednostih). Če boš to naredil pri 32 bitni globini (8 bitov na kanal) potem bo to lahko "dovolj vredu". Če boš naredil to pri 16 bitih se bodo začele dogajati čudne stvari bistveno prej. Tega pa sploh ne moreš naredit v 4 ali 8 bitnih paletiziranih načinih, ker ne moreš indeksov v paleto kar seštevat (na končnem indeksu, če je v tabeli, je barva, ki nima nikakršne veze z originalnima barvama). Zato potrebuješ za računanje - aritmetiko večjo natančnost. Saj tudi sodobni procesorji ne znajo seštevati 5, 6 ali 8 birnih števil, seštevajo 32 bitna (in po potrebi odrežeš odvečne bite). Grafične kartice že tudi delajo račune med barvami z več kot 16 biti na kanal. Vendar je to že tisti programerski nivo, tukaj ni več standardov. Če oceniš, da bo 32 bitov za pixel premalo jih uporabiš 128, če si lahko privoščiš toliko več pomnilnika in počasnejše delovanje.

Matev ::

Efekt ki nastane zaradi premajhne bitne globine se imenuje posterizacija.
Nastopi pa pri barvnih prehodih.
16 bitov je cca 64kilo barv kar zgleda zadosti, vendar se pri prehodu iz svetlomodrosive v svetlosivomodro opazi nezveznost in stopničastost.

24 bitov = 16,6 miljonov barv
32 bitov je 4 milijarde barv

človeško oko baje lahko loči maksimalno cca 10 milijonov barv
monitor jih pa lahko prikaže še celo monogo manj

tako da več kot 32 bitov ni potrebno

CaqKa ::

ja samo to kar senitel pravi je to, da ko računaš moreš z končnim rezultatom prit na teh 10 milijonov barv. tako da izjava:
>>> tako da več kot 32 bitov ni potrebno


drži ko stvar gledaš od zunaj. ko pa se moreš poglobit v to kako zadevo rešit pa potrebuješ večjo barvno globino.

Senitel ::

32 bitov dejansko ni 4 milijarde barv, ker je 8 od teh bitov namenjenih alpha kanalu (razen, če imaš kakšno bizarno razporeditev na RGB). Kot sem že omenil tudi dobri CRT monitorji lahko prikažejo 10 bitov na kanal, torej skupaj 30 bitov oziroma dobro milijardo barv.
Računalniki računajo z določeno natančnostjo, če množiš 2 in 2 dobiš 4, kar lahko zapišeš šele s tremi biti in ne z dvema. Tako da še kako rabiš več kot 32 bitov.
P.S.: Še posebej zabavne reči se pa začnejo dogajat, ko ugotoviš, da je oko bistveno bolj kot na barve občutljivo na osvetlitev. >:D

Zgodovina sprememb…

  • spremenil: Senitel ()

Matev ::

Določeni skenerji skenirajo z 48 bitno globino, 16 bitov za vsako izmed treh osnovnih barv RDEČA, MODRA, ZELENA.
To nato pretvorijo v 32 bitov ali manj ker ni v navadi da bi programi podpirali slike z več kot 32 bitno barvno globino.


Kje je že tista fora ko ima računalnik en bit več za zeleno?

G@c ::

Vidim, da je tema zazivela. Ko takole prebiram mi je vse bolj jasno, ampak tale alfa kanalcek.
Ce sem prov razumu je pri 32 bitni globini zadnjih 8 bitov namenjenih za alfa kanal (RGBA je RGB + Alfa kanal). Takoj sm na net skocu in prebral, da se 8bitni prosojnosti rece tut alfa kanal.

Bo to drzal ..." cemo se eno debato o prosojnosti oz. alfa kanalu udart? " :)
Prosojnost pr GIFu je "bitna" sej sta mozni le 2 stopni prosojnosti - piksel prosojen ali neprosojen. Kako je torej pri 8bitn prosojnosti : 256 stopenj prosojnosti, pikslel prosojen, neprosojen, hmmm deloma prosojen ... ?

Tnx!
L@@King 4 knowledge !

Senitel ::

Alpha kanal se lahko uporablja še za kaj drugega, kot samo za prosojnost (v bistvu se lahko tudi barve porabijo še za kaj drugega).
Če rabiš polprosojnost, potem se nova slika (ki ima alpha kanal v katerem je zapisana prosojnost) prepiše čez staro takole:
Barva=Barva*(1-Alpha)+Slika*Alpha
Alpho spraviš iz [0,255] na [0,1] seveda. Če je alpha 0, potem je pika povsem prosojna, če je alpha 1 potem pika sploh ni prosojna. Seveda se da to uporabiti tudi drugače.

G@c ::

Zivjo, ponovno jaz :D

Tule smo debatirali o filtrih in barvnih modelih. Kaj ko bi jaz prasal se nekaj o filtrih. Lahko ? Lahko. Tnx :)

Senitel je omenjal kernel - jedro filtra. Vem, da imajo npr. kubicni filtri jedro velikosti 4x4, potem Lanczos 6 x 6,... ne najdem pa velikosti jedra za filter Bell in filter Mitchell.

Se kermu kaj sanja ?
L@@King 4 knowledge !


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Photoshop gradient problem

Oddelek: Programska oprema
201689 (1533) jizzer
»

Photoshop cs3 problem (save for web gumb ni obarvan)

Oddelek: Programska oprema
5949 (949) Limit-sky
»

Barvni modeli - nagradim najboljsi odgovor

Oddelek: Zvok in slika
212546 (1967) G@c
»

R300 prvi z 128-bitnimi barvami

Oddelek: Novice / Grafične kartice
172242 (2242) coderock
»

Photoshop

Oddelek: Zvok in slika
71570 (1425) ferjan

Več podobnih tem