Rotace obrazku se zvetsenim rozliseni

Miroslav Maiksnar ml na mixi.cz
Neděle Březen 13 00:20:42 CET 2005


On Saturday 12 March 2005 21:38, Jan Kasprzak wrote:
> Miroslav Maiksnar wrote:
> : On Friday 11 March 2005 21:27, Jan Kasprzak wrote:
> : >  Rotaci obrazku lze udelat bezztratove (to jest ze existuje
> : > 1:1 mapovani puvodnich pixelu na zrotovane). Zadna ztrata detailu.
> :
> : Tak to mi neni uplne jasne. Znamena to, ze kdyz otocim obrazek o 45
> : stupnu doprava a pote doleva, tak dostanu identicky obraz? Dodnes jsem si
> : myslel, ze neco takoveho neni mozne a nejak si to neumim predstavit,
> : nemate nejake odkazy kde se o tom algoritmu da docist? Vygooglit se mi
> : nic nepodarilo...
>
>  Jak rikam. Je to mozne. Algoritmus funguje jako tri zkoseni
> - nejprve ve smeru osy X o polovinu pozadovane velikosti, pak ve smeru
> osy Y podle pozadovane velikosti, a pak opet ve smeru osy X. Detaily
> si nepamatuju, ale kdysi jsem to programoval jako zapoctak do grafiky.
> Predpokladam ze kazdy student informatiky by to byl schopen dohledat
> a/nebo naimplementovat.

Hmmm. Na jednu stranu vam (jako byvaly student informatiky a fanda pocitacove 
grafiky dosove ery ;) musim dat za pravdu, ze timto zpusobem lze udelat 
rotaci tak, aby z binarniho pohledu byla bezeztratova (tj. inverzni operaci 
dosahnout puvodniho obrazu), ale _pouze_ v pripade, ze budu posouvat radky o 
cele pixely a tam kde potrebuji posunout radek o nejaky zlomek pixelu (tj. 
kdykoliv nebudu rotovat o 90 stupnu), tak musim zaokrouhlovat. To ale 
samozrejme vede k vyrazne ztrate kvality obrazu, coz opravdu nepotrebuji.

Ve chvili kdy nebudu zaokrouhlovat, tak diky nekolikanasobne interpolaci dojde 
ke ztrate informace. Takze jsme tam kde jsme byli. 

>
>  Nasel jsem citaci: Alan Paeth "A Fast Algorithm for General Raster
> Rotation," Graphics Interface '86, pp. 77-81, May 1986. Taky jsem nasel
> nejaky textovy popis i s ascii-artem s nazornou ukazkou toho jak
> to funguje:
>
> http://www.gamespp.com/graphicsprogramming/rotatingBitmaps.html

Ano, je to opravdu nazorne. Ale asi ne dostatecne, proto doporucuji 
naprogramovat a aplikovat na nejakou "hodne aliasovaci" bitmapu a uvidite 
nazorny vysledek ;o)

>
> : Navic zbezny test rotace o 45 stupnu a zpet v gimpu (verze 2.2.3)
> : prokazal, ze se nejedna o bezeztratovy algoritmus.
>
>  OK. Tak pouzijte pnmrotate (i kdyz to asi taky neumi 16-bitovou
> hloubku, nevim) nebo imagemagick.

Ja ten obrazek umim orotovat, ted mi jde opravdu jenom o tu minimalizaci 
ztraty obrazove informace (tj. rotace spojena se zvetsenim rozliseni).

Mixi


Další informace o konferenci Linux