Wednesday, June 11, 2008

Assignment 10

The colour picture:

function [ outpic] = swirl( inpic, r, gamma )
inpic=double(inpic);
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 greater than r) or (d less than 1);
outpic(x,y,:)=inpic(x,y,:);
else if (y less than cy);
theta = acos((x-cx)/d);
else theta = -acos((x-cx)/d);
end;
fr = (d/r)^2*(1-(d/r))^2*16;
newx=d*cos(theta + gamma*fr)+cx;
newy=d*sin(theta + gamma*fr)+cy;
t=floor(newx);
u=floor(newy);
for k=1:3;
outpic(x,y,k)=[1-newx+t newx-t]*[inpic(t,u,k) inpic(t,u+1,k);inpic(t+1,u,k) inpic(t+1,u+1,k)]*[1-newy+u; newy-u];
end;
end;
end;
end;













The black & white picture:

function [ outpic] = swirlbw( inpic, r, gamma )
inpic=double(inpic);
cx = size(inpic,1)/2;
cy = size(inpic, 2)/2;
outpic=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 greater than r) or (d less than 1);
outpic(x,y)=inpic(x,y);
else if (y less than cy);
theta = acos((x-cx)/d);
else theta = -acos((x-cx)/d);
end;
fr = (d/r)^2*(1-(d/r))^2*16;
newx=d*cos(theta + gamma*fr)+cx;
newy=d*sin(theta + gamma*fr)+cy;
t=floor(newx);
u=floor(newy);
outpic(x,y)=[1-newx+t newx-t]*[inpic(t,u) inpic(t,u+1);inpic(t+1,u) inpic(t+1,u+1)]*[1-newy+u; newy-u];
end;
end;
end;


No comments: