matlab图像放大程序,图像放大并进行BiCubic插值 Matlab/C++代码

本文详细介绍了双三次(BiCubic)插值原理,并提供了Matlab和C++两种语言的图像放大实现代码。通过这种方法,可以对图像进行高质量的放大,保持图像细节。文中还展示了原图、放大后的图像以及与双线性插值的对比结果。
摘要由CSDN通过智能技术生成

BiCubic插值原理:

双三次插值又称立方卷积插值。三次卷积插值是一种更加复杂的插值方式。该算法利用待采样点周围16个点的灰度值作三次插值,不仅考虑到4 个直接相邻点的灰度影响,而且考虑到各邻点间灰度值变化率的影响。三次运算可以得到更接近高分辨率图像的放大效果,但也导致了运算量的急剧增加。这种算法需要选取插值基函数来拟合数据,其最常用的插值基函数如图1所示,本次实验采用如图所示函数作为基函数。

构造BiCubic函数:

0818b9ca8b590ca3270a3433284dd417.png

其中,a取-0.5.

BiCubic函数具有如下形状:

0818b9ca8b590ca3270a3433284dd417.png

[source:  R. Keys, (1981). "Cubic convolution interpolation for digital image processing". IEEE Transactions on Signal Processing, Acoustics, Speech, and Signal Processing 29 (6): 1153–1160.]

对待插值的像素点(x,y)(x和y可以为浮点数),取其附近的4x4邻域点(xi,yj), i,j = 0,1,2,3。按如下公式进行插值计算:

0818b9ca8b590ca3270a3433284dd417.png

Matlab实现代码:

%双三次插值具体实现

clc,clear;

fff=imread('E:\Documents\BUPT\DIP\图片\lena.bmp');

ff =rgb2gray(fff);%转化为灰度图像

[mm,nn]=size(ff); %将图像隔行隔列抽取元素,得到缩小的图像f

m=mm/2;

n=nn/2;

f =zeros(m,n);

for i=1:m

for j=1:n

f(i,j)=ff(2*i,2*j);

end

end

k=5; %设置放大倍数

bijiao1 =imresize(f,k,'bilinear');%双线性插值结果比较

bijiao =uint8(bijiao1);

a=f(1,:);

c=f(m,:); %将待插值图像矩阵前后各扩展两行两列,共扩展四行四列

b=[f(1,1),f(1,1),f(:,1)',f(m,1),f(m,1)];

d=[f(1,n),f(1,n),f(:,n)',f(m,n),f(m,n)];

a1=[a;a;f;c;c];

b1=[b;b;a1';d;d];

ffff=b1';

f1=double(ffff);

g1 =zeros(k*m,k*n);

fori=1:k*m %利用双三次插值公式对新图象所有像素赋值

u=rem(i,k)/k;

i1=floor(i/k)+2;

A=[sw(1+u) sw(u) sw(1-u) sw(2-u)];

for j=1:k*n

v=rem(j,k)/k;

j1=floor(j/k)+

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值