pondělí, února 13, 2006

Mozek rotuje mozek

Dnes si můj mozek vzal dovolenou. Prostě se ráno nasnídal a šel na procházku. Vrátil se až před chvílí. Půl dne jsem se totiž pokoušel vyřešit 'zahřívací' úlohu za zpracování obrazů...

Jako první krok mě čekalo převedení obrázku do polárních souřadnic. Pro chytrého člověka je to záležitost na pár minut. Zabil jsem tím hodinu a půl. Minimálně. Proč převádím obrázek do polárních souřadnic? V dalším kroku budu totiž obrázek srovnávat s jiným (pootočeným obrázkem) a to pěkně po jednom úhlovém stupni. To máme 359 otočení, což je výpočetně poměrně náročné. Chápu, že ve Photoshopu je to hned, ale my to holt musíme naprogramovat.

A tady se právě uplatní polární souřadnice: v nich totiž stačí pouze posunout souřadnice a obrázek je otočený ;). Převod do polárních souřadnic : hodina a půl práce. Cyklická rotace matice : 30 vteřin hledání v nápovědě Matlabu. Převod zpět z polárních souřadnic? Celý zbytek dne... až doteď.

Já vlastně ani nevím, co jsem dělal spatně, zdá se totiž, že úplně vše. Ale asi ve čtyři ráno jsem se konečně zamyslel (mozek se vrátil) a povedlo se! Juchal bych radostí, ale spolubydlící spí. Tak jsem aspoň vesele zamrkal.

Vtipné je, že vstupní obrázek je řez mozkem, jak sami vidíte. Když se mi konečne podařilo mozek otočit, pootočil jsem si i Nera ;). A víte, co je nejsmutnější? Celá funkce má 14 řádek, což dělá téměr 40 minut sezení u počítače na jednu řádku.


Fotky:
1. původní obrázek
2. mozek v polárních souřadnicích
3. pootočený mozek (posun matice a převod zpět do kartézkých souřadnic)
4. Nero v polárních souřadnicích
5. pootočený a zpět tranformovaný Nero (s Čertem v růžku)


A tady je ona zatracená funkce pro zpětný převod:

function [out]=p2c(im);

im=double(im);
[xm ym]=size(im);
R=linspace(0,xm,xm);
TH=linspace(-pi,pi,xm);
xx=linspace(xm,-xm,xm);
[x,y] = meshgrid(xx,xx);
[th,r] = cart2pol(x,y);
%interpolace
out = interp2(TH,R,im, th, r ,'*cubic');
imshow(uint8(out));

end




2 Comments:

Anonymní said...

kdyz jsi mi vcera rikal,jak jsi rotoval posunutim v polarnich souradnicich, vubec jsem nevedel co a jak. jednak jsem mel hlavu plnou Farenheita a taky jsem premyslel o SRI.

dnes cestou do prace jsem si rekl, ano, je to krasne jednoduche :) myslim princip...

naprogramovat to mozna bude tezsi :)

Anonymní said...

Nerozumím, nechápu, zkus něco jednoduššího a pro děti z vesnice:)
Paa
Ivanka