双线性插值算法推导及代码实现
2016-05-16 14:10
543 查看
双线性插值,是一种比较重要的插值方法,尤其在数字图像处理领域。本篇博文分为三个部分:一是双线性插值的算法推导,二是双线性插值的算法实现,三是算法的运行结果。
一 双线性插值的算法推导
二 代码实现(matlab)
三 双线性插值运行结果
>>I = imread('lena.jpg');
>> figure,imshow(I)
>> S = bilinearInterpolation(I,[1000,1000]);
>> figure,imshow(S)
一 双线性插值的算法推导
二 代码实现(matlab)
function [out] = bilinearInterpolation(im, out_dims) in_rows = size(im,1); in_cols = size(im,2); out_rows = out_dims(1); out_cols = out_dims(2); S_R = in_rows / out_rows; S_C = in_cols / out_cols; [cf, rf] = meshgrid(1 : out_cols, 1 : out_rows); rf = rf * S_R; cf = cf * S_C; r = floor(rf); c = floor(cf); r(r < 1) = 1; c(c < 1) = 1; r(r > in_rows - 1) = in_rows - 1; c(c > in_cols - 1) = in_cols - 1; delta_R = rf - r; delta_C = cf - c; in1_ind = sub2ind([in_rows, in_cols], r, c); in2_ind = sub2ind([in_rows, in_cols], r+1,c); in3_ind = sub2ind([in_rows, in_cols], r, c+1); in4_ind = sub2ind([in_rows, in_cols], r+1, c+1); out = zeros(out_rows, out_cols, size(im, 3)); out = cast(out, class(im)); for idx = 1 : size(im, 3) chan = double(im(:,:,idx)); %// Get i'th channel %// Interpolate the channel tmp = chan(in1_ind).*(1 - delta_R).*(1 - delta_C) + ... chan(in2_ind).*(delta_R).*(1 - delta_C) + ... chan(in3_ind).*(1 - delta_R).*(delta_C) + ... chan(in4_ind).*(delta_R).*(delta_C); out(:,:,idx) = cast(tmp, class(im)); end
三 双线性插值运行结果
>>I = imread('lena.jpg');
>> figure,imshow(I)
>> S = bilinearInterpolation(I,[1000,1000]);
>> figure,imshow(S)
相关文章推荐
- [疯狂Java]NIO.2:walkFileTree、FileVisitor(遍历文件/目录)
- Spring注意事项(各部分理解)
- Java 多线程 编程 教程 线程的运行与控制
- java鼠标各按键单击和左键击双击
- What is SIGTRAN? SS7? SCTP?
- 01 Struts2简介
- 【JAVA】JVM
- [关键字]C/C++中static关键字详解
- python字典的常用操作方法
- Spring中的事务控制
- C++ 默认析构函数
- 被问到spring是如何控制事务的?你是怎么回答的?
- jdk8 安装及环境配置
- Java语言的优点
- Google深度学习笔记 逻辑回归 实践篇
- 为Eclipse安装Java web插件
- PHP 日期的加减
- python3下载百度图片
- SpringMVC源码分析系列
- C语言ODBC操作MySQL数据库