双三次插值
本文将未做插值的原始图像称作源图像,源图像插值缩放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:dstMfor dstY=1:dstNX=dstX/K;Y=dstY/K;if X<2||X>srcM-2||Y<2||Y>srcN-2 %在边界采用最近邻插值for dstC=1:srcCsrcX=round(dstX/K);srcY=round(dstY/K);srcX(srcX>srcN)=srcN; %防止索引源图像界外位置,该函数很耗时但简洁srcX(srcX<1)=1;srcY(srcY>srcM)=srcM ;srcY(srcY<1)=1;dst(dstX,dstY,dstC)=src(srcX,srcY,dstC);endelse            %非边界位置采用双三次插值srcX=floor(X);%最近邻左上方像素点位置srcY=floor(Y);v=X-srcX;u=Y-srcY;X1=zeros(4,4);  X2=zeros(4,4);  %距离矩阵W1=ones(4,4); W2=ones(4,4);    %系数矩阵for i=1:4for j=1:4X1(i,j)=abs(v-i+2);X2(i,j)=abs(u-j+2);if X1(i,j)<=1W1(i,j)=1.5*(X1(i,j))^3-2.5*(X1(i,j))^2+1;elseif  X1(i,j)<2W1(i,j)=(-0.5)*(X1(i,j))^3+2.5*(X1(i,j))^2-4*X1(i,j)+2;elseW1(i,j)=0;endendif X2(i,j)<=1W2(i,j)=1.5*(X2(i,j))^3-2.5*(X2(i,j))^2+1;elseif  X2(i,j)<2W2(i,j)=(-0.5)*(X2(i,j))^3+2.5*(X2(i,j))^2-4*X2(i,j)+2;elseW2(i,j)=0;endendendendW=W1.*W2;Z=ones(4,4);  %16个源像素点矩阵O=ones(4,4);  %16个加权后的源像素点矩阵for dstC=1:srcCfor i=1:4for j=1:4Z(i,j)=src(srcX-1+i-1,srcY-1+j-1,dstC);O(i,j)=W(i,j).*Z(i,j);endendO1=sum(sum(O));dst(dstX,dstY,dstC)=O1;endendend
end
output=dst;
end
  1. 评估
    分别使用本文函数my_bicubic函数和matlab的imresize函数中的bicubic型对lena图进行2倍放大,并计时。

    test代码:

close all
figure
A=imread('D:\Files\Downloads\DIP\picture\Lena.jpg');
imshow(A);
figure
tic
imshow(my_bicubic(A,2));
toc
figure
tic
imshow(imresize(A,2,'bicubic'));
toc

结果:

右下角边界细节:

由于该算法在边界邻域会越界,所以我采用最近邻法来补充边界,matlab的imresize函数处理得完美,还不知道它是如何处理的,知道了我就更新。
2021.3.18更新:imresize函数应该是以边界为对称轴,对边界像素块做对称拓展,从而使得边界点也能取得周围16个点进行加权计算。

耗时:

综上,处理效果越来越好,但耗时也越来越长。
附:
最近邻插值
双线性插值

图像插值-双三次插值(bicubic)相关推荐

  1. 传统图片超分算法——双三次插值 (Bicubic)、附C++源码

    呼,花了一个下午,终于是写完加调试完了所有的代码. 双三次插值介绍 之前我写的这篇博客中讲了什么是超分,并实现了单线性插值算法和双线性插值算法.在这里将再介绍一种插值算法--双三次插值算法. 首先,双 ...

  2. 【数字图像处理】图像内插“双三次内插法 双三次插值 Bicubic interpolation”(cv2.resize、cv.INTER_CUBIC)

    文章目录 基本原理 代码 引用自:<数字图像处理> 基本原理 引用自:https://baike.baidu.com/item/%E5%8F%8C%E4%B8%89%E6%AC%A1%E6 ...

  3. 【图像处理】双三次插值(Bicubic interpolation)原理及matlab简易版代码

    先简单写下. 双线性插值:缩放后图像矩阵(简称TI)像素坐标映射到原图像矩阵(简称OI)中得坐标点P(x,y),P点临近四个坐标点像素值的线性加权求和即P点像素值. "双"指的图像 ...

  4. OpenCV图像缩放插值之BiCubic双三次插值

    图像缩放算法简介 在图像的仿射变换中,很多地方需要用到插值运算,常见的插值运算包括最邻近插值,双线性插值,双三次插值(立体插值),兰索思插值等方法,OpenCV提供了很多方法,其中,双线性插值由于折中 ...

  5. 图像常用的插值算法:最近邻插值、双线性插值和双三次插值算法

    图像常用的插值算法 最近邻插值算法 双线性插值算法 双三次插值(bicubic)算法 三种插值算法的优缺点 插值算法是图像缩放中的一项基本且重要的算法:在图像缩放中,输出图像像素点坐标可能对应输入图像 ...

  6. 基于matlab的脑瘤mr图像处理_基于Matlab GUI的医学图像处理课程虚拟实验平台设计...

    论文写作指导:请加QQ229366758 摘 要:针对医学生工程技术缺乏的状况,分析医学生学习医学图像处理存在的困难,提出利用Matlab图像处理工具和简单的GUI界面,设计和构建包含医学图像处理教学 ...

  7. HRNet论文笔记及代码详解

    <Deep High-Resolution Representation Learning for Visual Recognition> 0. 前置知识 1)图像语义信息理解 2)特征金 ...

  8. 100年前的北京Vlog火了!大神利用AI修复古董纪录片,还原1920年的京城生活

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 十三 发自 凹非寺 来源:量子位(QbitAI) 百年前的北京是什么 ...

  9. python的窗口处理模块_python的图像处理模块

    除了opencv专门用来进行图像处理,可以进行像素级.特征级.语义级.应用级的图像处理外,python中还有其他库用来进行简单的图像处理,比如图像的读入和保存.滤波.直方图均衡等简单的操作,下面对这些 ...

  10. 深度学习之双线性插值(Bilinear interpolation)

    1. 什么是插值 Interpolation is a method of constructing new data points within the range of a discrete se ...

最新文章

  1. 【6月活动】投稿换T恤!只要你愿意分享!这件酷炫的T恤就是你的~!!
  2. Android View篇之自定义验证码输入框
  3. hihoCoder-1830 2018亚洲区预选赛北京赛站网络赛 C.Cheat 模拟
  4. idea中的version control界面的git history不显示提交文件明细
  5. pytorch--nn.Sequential学习
  6. fgets和scanf的区别
  7. mysql自带查询优化_MySQL之select in 子查询优化的实现
  8. knot in ship
  9. 数学建模清风第二次直播:模拟退火算法
  10. 10个精选的颜色选择器Javascript脚本及其jQuery插件
  11. ax在c语言中意思啊,【数论】整理关于ax+by=c
  12. Android 应用内微信 H5 支付
  13. Maven之自定义pom类型的基础项目
  14. net对XML增删改查
  15. 5 个用于在 Linux 终端中查找域名 IP 地址的命令
  16. linux安全策略加固文档_系统加固之Linux安全加固
  17. labview支持python免费_ni labview 2018
  18. 稻盛和夫自传读书笔记
  19. 让你心动的20句励志文案
  20. 英文 程序员编程技能描述_程序员最重要的非编程技能

热门文章

  1. linux安装Python 以及Python包
  2. 黑马程序员---初学java建议(亲身经历)
  3. 公司为什么需要自己的SAP内部顾问
  4. Java 实现 POS 打印机无驱打印
  5. 第4章 项目整体管理 与 第16章 项目变更管理
  6. 谷歌浏览器如何安装crx插件
  7. 棋牌搭建,APP新手搭建教程
  8. 反射机制,类的加载机制,和注解的配置参数的结合使用详解
  9. 万能五笔输入法下载|万能五笔输入法电脑版下载
  10. docker进阶(1):使用cAdvisor监控容器