图像插值-双三次插值(bicubic)

本文介绍了一种图像放大算法——双三次插值,通过基于BiCubic基函数的加权计算,对图像进行放大处理。算法实现了对周边16个像素点的加权平均,以获得目标像素点的值,适用于Matlab环境。

双三次插值
本文将未做插值的原始图像称作源图像,源图像插值缩放K倍后的图像称作目标图像。
以下标识符的意义:
在这里插入图片描述

  1. 算法
    如下图,双三次插值就是通过对周边16个点(A,B,C,…N,O,P)进行加权计算得到目标像素点的值,在这里插入图片描述
    (dstX/K,dstY/K)归一化后为(dstX/K,dstY/K),可推得:
    srcX=floor(dstX/K);
    srcY=floor(dstY/K);
    v=dstX/K-srcX;
    u=dstY/K-srcY;

    这样,就能得到16个点的位置。
    加权系数的计算方法有很多种,我采用基于BiCubic基函数的方法,该函数形式如下:
    在这里插入图片描述
    其中,x,y为周围16个源像素点到(dstX/K,dstY/K)的行列方向的距离,
    那么,目标像素点的值应为:
    在这里插入图片描述
  2. 实现
    本程序是matlab写的一个my_bicubic函数,与matlab自有的imresize的bicubic型函数相对应。可以实现任意倍数的放大。
    matlab代码:
function [output]=my_bicubic(src,K)
%
%输入:源图像src,放大倍数K
%输出:目标图像矩阵dst
 
[srcM,srcN,srcC]=size(src);%源图像元素点的行列数及色板数
dstM=round(K*srcM);%该处仍要确保当放大倍数K非整数时目标图像大小为整数
dstN=round(K*srcN);
 
%使用class将数据类型统一,目标图像初始化
dst=ones(dstM,dstN,srcC,class(src));
 
%逐像素点赋值
for dstX=1:dstM
    for dstY=1:dstN
            X=dstX/K;
            Y=dstY/K;
            if X<2||X>srcM-2||Y<2||Y>srcN-2 %在边界采用最近邻插值
                for dstC=1:srcC
            srcX=round(dstX/K);
            srcY=round(dstY
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值