Názory k článku
Programujeme JPEG: diskrétní kosinová transformace (DCT)
jx0 (neregistrovaný)
4. 1. 2007 0:54
Nový
vzorec pro 2D DCT II
celé vlákno
Jenom drobnost, formalita, jak jsou sumy ve vzorci pro 2D DCT, tak jedna suma je od 1 a druha od 0.
Pavel Tišnovský (neregistrovaný)
4. 1. 2007 9:00
Nový
Re: vzorec pro 2D DCT II
celé vlákno
Diky za upozorneni, ten vzorec ma byt "ortogonalni", tj. obe sumy se stejnymi indexy (od nuly).
vm (neregistrovaný)
4. 1. 2007 6:22
Nový
vlnkova transformace?
celé vlákno
Tou vlnkovou transformaci myslite transformaci waveletovou?
vm (neregistrovaný)
4. 1. 2007 6:23
Nový
Re: vlnkova transformace?
celé vlákno
Omlouvam se, uz jsem to nasel o odstavec dal...
Culibrk (neregistrovaný)
4. 1. 2007 8:17
Nový
Pochvala
celé vlákno
Dost dobre vysvetleno, diky za clanek.
4. 1. 2007 8:46
Nový
zig zag?
celé vlákno
V clankoch o JPEG som este stale nevidel obrazok cik-cak snimania jedneho bloku 8x8, prehliadol som to alebo to tu este nebolo? Alebo nas v skole zase ucili nejake bludy?
Pavel Tišnovský (neregistrovaný)
4. 1. 2007 8:56
Nový
Re: zig zag?
celé vlákno
Ten obrazek bude uveden priste, ten cik-cak scan se provadi az po DCT.
Autor (neregistrovaný)
4. 1. 2007 9:45
Nový
Omluva
celé vlákno
Omlouvam se vsem ctenarum, ale v nadpisu je chyba spravne mel znit "Programujeme JPEG: diskretni Kozinova transformace (dKt)".
Dekuji za pozitivni ohlasy a jeste jednou se omlouvam.
Dekuji za pozitivni ohlasy a jeste jednou se omlouvam.
uživatel si přál zůstat v anonymitě
4. 1. 2007 11:13
Nový
Re: Omluva
celé vlákno
Logaritme Logaritme, do roka a do dne tě zvu na boží sud? : )
P_V (neregistrovaný)
4. 1. 2007 11:58
Nový
16x8
celé vlákno
Digitální fotoaparáty mnohdy produkují bloky 16x8 pixelů. Umožňuje standard JPEG libovolné, nebo jen tyto rozměry bloků?
4. 1. 2007 22:01
Nový
Re: 16x8
celé vlákno
Děje se tak kvůli podvzorkování barvonosných složek v horizontálním směru, jak je popsané v předchozím díle. Na zmínku o tom, že by mohl mít DCT blok po převzorkování (decimaci) jinou velikost než 8x8 jsem nenarazil. Zrovna tak jsem se moc spolehlivě nedočetl o tom, že je možné podzorkování jen ve vertikálním směru, což by ale vyloučilo možnost fotky bezztrátově otáčet (ještě zbývá změnit orientaci v EXIFu pro prohlížeče, které podporují automatické otáčení). Při podvzorkování na 1/4 by velikost bloku měla být pro barvonosné složky 32x32.
Posílám aspoň jeden odkaz:
http://www.impulseadventure.com/photo/chroma-subsampling.html
Posílám aspoň jeden odkaz:
http://www.impulseadventure.com/photo/chroma-subsampling.html
P_V (neregistrovaný)
5. 1. 2007 11:50
Nový
Re: 16x8
celé vlákno
Asi to bude Vámi zmiňovaný případ, ale nemám tu jak zjistit způsob podvzorkování. Vyříznul jsem pomocí jpegcrop z jedné fotky ukázku a ještě ji bezeztrátově otočil, otáčení tedy je možné.
Pavel Tisnovsky (neregistrovaný)
5. 1. 2007 14:41
Nový
Re: 16x8
celé vlákno
Barvonosne slozky je opravdu mozne zredukovat bud v pomeru 2:1:1 nebo 2:2:1, takze barevne bloky o velikosti 16x8 pixelu je mozne videt. Slozka Y (luminance) je vsak vzdy velikosti 8x8 hodnot a i barvove slozky ve vysledku davaji matice o stejne velikosti. Takze DCT i IDCT vzdy bezi nad bloky 8x8, i kdyz vstupem mohou byl pixely v bloku 8x8, 8x16, 16x16.
anonymus (neregistrovaný)
5. 1. 2007 18:46
Nový
proc
celé vlákno
Je pekne, ze je v clanku popsana zrovna kosinova transformace. Ale uvital bych alespon jednu, ci dve vety, proc se uziva zrovna tato. Je snad vypocetne jednodussi, nez fourier, ci jine transformace?
6. 1. 2007 1:41
Nový
Re: proc
celé vlákno
Ano je rychlejsi z toho prosteho duvodu, ze sinova a kosinova transformace jsou specialni pripad transformace fourierovy.
Bazove funkce (spojite) Fourierovy transformace jsou e^(-iwt). Po jednoduchem rozepsani dostaneme 2 vzorce s bazovymi funkcemi cos(wt) a i*sin(wt). V pripade, ze je funkce suda, vyjde integral se sinem jako bazovou funkci nulovy. Zbyde tedy jen integral s cosinem, pricemz 'to, co se integruje' je funkce suda (ve smyslu parametru t). To umoznuje integrovat jen os 0 do +INF. No..a funkci mame definovanou jen na intervalu (nemame nekonecny obrazek), takze od 0 do {alfa}. Pak uz staci jen spojity integral prevest na diskretni sumy a voila ... cosinova transformace :)
Btw. to, ze predpokladame, ze funkce je suda, si muzeme dovolit. Fourierovy transformace probihaji po celem intervalu (-INF, +INF). Mame-li data pro (0, {alfa}), musime si 'zbytek' funkce dodefinovat. A nic nam nebrani dodefinovat si ji jako sudou (preklopeni pres osu Y) a zbytek mimo interval (-{alfa}, {alfa}) jako nulovou. Pri zpetnem prevodu si vezmeme (prevedeme) opet jen 'nas' interval (0, {alfa}).
Stejne tak dobre by se mohla pouzit transformace sinova (funkci si dodefinujem jako lichou). Uz si nepamatuji, jestli byl jeste jiny duvod nez ten, 'ze se proste pouziva kosinova' ;)
Bazove funkce (spojite) Fourierovy transformace jsou e^(-iwt). Po jednoduchem rozepsani dostaneme 2 vzorce s bazovymi funkcemi cos(wt) a i*sin(wt). V pripade, ze je funkce suda, vyjde integral se sinem jako bazovou funkci nulovy. Zbyde tedy jen integral s cosinem, pricemz 'to, co se integruje' je funkce suda (ve smyslu parametru t). To umoznuje integrovat jen os 0 do +INF. No..a funkci mame definovanou jen na intervalu (nemame nekonecny obrazek), takze od 0 do {alfa}. Pak uz staci jen spojity integral prevest na diskretni sumy a voila ... cosinova transformace :)
Btw. to, ze predpokladame, ze funkce je suda, si muzeme dovolit. Fourierovy transformace probihaji po celem intervalu (-INF, +INF). Mame-li data pro (0, {alfa}), musime si 'zbytek' funkce dodefinovat. A nic nam nebrani dodefinovat si ji jako sudou (preklopeni pres osu Y) a zbytek mimo interval (-{alfa}, {alfa}) jako nulovou. Pri zpetnem prevodu si vezmeme (prevedeme) opet jen 'nas' interval (0, {alfa}).
Stejne tak dobre by se mohla pouzit transformace sinova (funkci si dodefinujem jako lichou). Uz si nepamatuji, jestli byl jeste jiny duvod nez ten, 'ze se proste pouziva kosinova' ;)
6. 1. 2007 13:55
Nový
Re: proc
celé vlákno
Když neuvažuji rychlou variantu (FFT,FDCT) pak jsou rychlé stejně, protože obě vyžadují výpočty stejného množství korelací se sinusoidami o různých frekvencích a počátečních fázích.
Rychlá fourierova transformace využívá pro délku signálu 2N toho, že se v rovnicích pro různé koeficienty vyskytují stejné výrazy, které lze počítat pro několik koefiecintů společně. Rychlá kosinová transformace většinou využívá k výpočtu FFT s tím, že se nějak poupraví vstup a výsledek. Pro 8 prvků bude asi použit přímo nějaký dobře optimalizovaný výpočet FDCT, ale náročnost by měla být podobná.
Rychlá fourierova transformace využívá pro délku signálu 2N toho, že se v rovnicích pro různé koeficienty vyskytují stejné výrazy, které lze počítat pro několik koefiecintů společně. Rychlá kosinová transformace většinou využívá k výpočtu FFT s tím, že se nějak poupraví vstup a výsledek. Pro 8 prvků bude asi použit přímo nějaký dobře optimalizovaný výpočet FDCT, ale náročnost by měla být podobná.
8. 1. 2007 10:31
Nový
Re: proc
celé vlákno
Už jsem se o tom trošku zmiňoval v některé předchozí části. Za prvé se DCT dá spočítat dost rychle, ale to FFT taky (ale KLT už ne). Za druhé se u DCT mnohem více energie dostává do několika málo složek, takže výsledkem je matice s mnoha malými hodnotami (ideálně nulovými), které se dobře komprimují. Za třetí - a to je pravděpodobně nejdůležitější důvod - se díky výběru bázových funkcí dají s malou chybou transformovat (a poté zpětně transformovat) typické průběhy v obrázcích, například plynulé přechody barev. To u FFT nejde, protože ta předpokládá, že signál se periodicky opakuje a tak se na jeho konec snaží funkci "otočit" směrem nahoru nebo dolů (pokus je nejlepší dělat na pilovém signálu, kde je v případě FFT patrné zaoblení původně ostrého vrcholu).
fritzek (neregistrovaný)
8. 1. 2007 15:07
Nový
Re: proc
celé vlákno
Diky za odpoved. Asi si to vyzkousim v Matlabu.
Karel Barel (neregistrovaný)
9. 1. 2007 21:40
Nový
Re: proc
celé vlákno
Nedele machry, ze umis v matlalu, ty patlale :)))

