Wednesday, June 11, 2008

Assignment 10 aniston




function [ outpic ] = unswirl( inpic,gamma,rad )
cx = size(inpic,1)/2;
cy = size(inpic,2)/2;
outpic(:,:,1)=zeros(size(inpic,1),size(inpic,2));
outpic(:,:,2)=zeros(size(inpic,1),size(inpic,2));
outpic(:,:,3)=zeros(size(inpic,1),size(inpic,2));
for x =1:size(inpic,1)
for y=1:size(inpic,2)
d= sqrt((x-cx)^2+(y-cy)^2);
if ((d gt rad) or (d lt 1))
outpic(x,y,:) = inpic(x,y,:);
else if (y lt cy)
theta = acos((x-cx)/d);
else
theta = -acos((x-cx)/d);
end
fr =((d/rad)^2)*(1-d/rad)^2*16;
newx = d*cos(theta+gamma*fr)+cx;
newy = d*sin(theta+gamma*fr)+cy;
a=newx;
b=newy;
r=floor(newx);
s=floor(newy);
for k=1:3
outpic(x,y,k)= [1-a+r a-r]*[inpic(r,s,k) inpic(r,s+1,k);inpic(r+1,s,k) inpic(r+1,s+1,k)]*[1-b+s; b-s];
end
end
end
end






No comments: