Thursday, June 5, 2008

Assignment 8

1. Scaling in the x and y directions by different factors.
The Matlab M-file:
function [ smim ] = shrink2dir( picture, fu,fv)
picture = double(picture);
Mp=floor(size(picture,1)*fu);
Np=floor(size(picture,2)*fv);
smim(:,:,1)=zeros(Mp,Np);
smim(:,:,2)=zeros(Mp,Np);
smim(:,:,3)=zeros(Mp,Np);
for i=0:(Mp-1);
for j=0:(Np-1);
for x=(floor(i/fu):ceil((i+1)/fu)-1);
for y=(floor(j/fv):ceil((j+1)/fv)-1);
ival=picture(x+1,y+1,:);
if (x<(i/fu));
ival=ival*(1-(i/fu)+x);
end;
if ((x+1)>(i+1)/fu);
ival=ival*(1-(x+1)+((i+1)/fu));
end;
if (y<(j/fv));
ival=ival*(1-(j/fv)+y);
end;
if ((y+1)>(j+1)/fv);
ival=ival*(1-(y+1)+((j+1)/fv));
end;
smim(i+1,j+1,:)=smim(i+1,j+1,:)+ival;
end;
end;
end;
end;
smim=smim*fu*fv;
imshow(double(smim)/255);
end
Sample command:
A = imread('grasshopper.jpg');
B = shrink2dir(A, 1, 0.5)














a) f_x = 1, f_y =0.5



















b) f_x = 0.5, f_y = 1









c) f_x = 0.2, f_y = 0.8






2. Enlarge using nearest neighbour approximation.

function [largeimage] = enlargenn( picture, f )
picture=double(picture);
Mp = floor(size(picture,1));
Np = floor(size(picture,2));
largeimage(:,:,1)=zeros(f*Mp,f*Np);
largeimage(:,:,3)=zeros(f*Mp,f*Np);
largeimage(:,:,2)=zeros(f*Mp,f*Np);
for i = 0:(f*Mp-1);
for j = 0:(f*Np-1);
largeimage(i+1,j+1,:)=picture(round((i+1)/f),round((j+1)/f),:);
end;
end;
largeimage=largeimage/255;

Example of Matlab commands:
rainbow=imread('rainbow.jpg');
A=shrink2(rainbow,0.75); %this is M-file from A7
B=enlargenn(A,4/3);
image(B*255)








































































































































5. Shrinking an image 4x over (this one was fun!)














I used the nearest neighbour method from assignment 7:

function [ smim2 ] = shrink2( picture, f )
Mp = floor(size(picture,1)*f);
Np = floor(size(picture,2)*f);
smim2(:,:,1)=zeros(Mp,Np);
smim2(:,:,2)=zeros(Mp,Np);
smim2(:,:,3)=zeros(Mp,Np);
for i = 0:(Mp-1);
for j = 0:(Np-1);
a=round(i/f);
b=round(j/f);
smim2(i+1,j+1,:)=picture(a+1,b+1,:);
end;
end;
smim2= (smim2)/255;

and then the commands:
pic=imread('blueyellow.jpg');
pic20=shrink2(pic,0.2);
pic40=shrink2(pic,0.4);
pic60=shrink2(pic,0.6);
pic80=shrink2(pic,0.8);
pic(52:(52+409-1),77:(77+614-1),:)=pic80*255;
pic(103:(103+307-1),154:(154+460-1),:)=pic60*255;
pic(154:(154+204-1),231:(231+307-1),:)=pic40*255;
pic(205:(205+102-1),308:(308+153-1),:)=pic20*255;
imshow(pic)

No comments: