好几天没有回来写了,最近事情多的够呛。感觉收获一般吧。贴出今天亲手编写的图像处理代码程序: (code by matlab)
bilinear interpolation :
I=imread('a.jpg');
img=rgb2gray(I);
imshow(img);
[h,w]=size(img);
out=zeros(floor(h*m),floor(w*n));
rot_mat=[m 0 0;0 n 0;0 0 1];
% rotation matrix
for i=1:h*m
for j=1:w*n
pix=[i j 1]/rot_mat;
float_Y=pix(1)-floor(pix(1));
float_X=pix(2)-floor(pix(2));
% boundary processing
if pix(1)<1
pix(1)=1;
end
if pix(1)>h
pix(1)=h;
end
if pix(2)<1
pix(2)=1;
end
if pix(2)>w
pix(2)=w;
end
% four points
p11=[floor(pix(1)) floor(pix(2))];
p12=[floor(pix(1)) ceil(pix(2))];
p21=[ceil(pix(1)) floor(pix(2))];
p22=[ceil(pix(1)) ceil(pix(2))];
% computing the weights of four points
pw11=(1-float_X)*(1-float_Y);
pw12=float_X*(1-float_Y);
pw21=(1-float_X)*float_Y;
pw22=float_X*float_Y;
% bilinear interpolation based on weights
out(i,j)=pw11*img(p11(1),p11(2))+pw12*img(p12(1),p12(2))+...
pw21*img(p21(1),p21(2))+pw22*img(p22(1),p22(2));
end
end
figure,imshow(uint8(out));title('output image');
bicubic interpolation:
for i=1:K*m2
u=rem(i,K)/K;i1=floor(i/K)+2;
A=[S_fun(1+u) S_fun(u) S_fun(1-u) S_fun(2-u)];
for j=1:K*n2
v=rem(j,K)/K;j1=floor(j/K)+2;
C=[S_fun(1+v) S_fun(v) S_fun(1-v) S_fun(2-v)]';
B=[f3(i1-1,j1-1) f3(i1-1,j1) f3(i1-1,j1+1) f3(i1-1,j1+2)
f3(i1,j1-1) f3(i1,j1) f3(i1,j1+1) f3(i1,j1+2)
f3(i1+1,j1-1) f3(i1+1,j1) f3(i1+1,j1+1) f3(i1+1,j1+2)
f3(i1+2,j1-1) f3(i1+2,j1) f3(i1+2,j1+1) f3(i1+2,j1+2)];
g(i,j)=(A*B*C);
end
end
psnr and mse: