image bilinear and bicubic interpolation algorithm

 好几天没有回来写了,最近事情多的够呛。感觉收获一般吧。贴出今天亲手编写的图像处理代码程序: (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:


 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值