图片缩放 算法 matlab,图像放大算法总结及MATLAB源程序.doc

图像放大算法总结及MATLAB源程序

1,插值算法(3种):

(1)最邻近插值(近邻取样法):  最近插值的的思想很简单就是把这个非整数坐标作一个四舍五入,取最近的整数点坐标处的点的颜色。可见,最邻近插值简单且直观,但得到的图像质量不高最邻近插值 = imread('F:\lena.jpg');%读取图像信息

imshow(A); %显示原图

title('原图128*128');

Row = size(A,1); Col = size(A,2);%图像行数和列数

nn=8;%放大倍数

m = round(nn*Row);%求出变换后的坐标的最大值

n = round(nn*Col);

B = zeros(m,n,3);%定义变换后的图像

for i = 1 : m

for j = 1 : n

x = round(i/nn); y = round(j/nn);%最小临近法对图像进行插值

if x==0 x = 1; end

if y==0 y = 1; end

if x>Row x = Row; end

if y>Col y = Col;end

B(i,j,:) = A(x,y,:);

end

end

B = uint8(B);%将矩阵转换成8位无符号整数

figure;

imshow(B);

title('最邻近插值法放大8倍1024*1024');

运行程序后,原图如图1所示:

图1

用最邻近插值双线性内插:双线性内插对于一个目的像素,设置坐标通过反向变换得到的浮点坐标为(i+u,j+v),其中i、j均为非负整数,u、v为[0,1)区间的浮点数,则这个像素得值 f(i+u,j+v) 可由原图像中坐标为 (i,j)、(i+1,j)、(i,j+1)、(i+1,j+1)所对应的周围四个像素的值决定,即:

f(i+u,j+v) = (1-u)(1-v)f(i,j) + (1-u)vf(i,j+1) + u(1-v)f(i+1,j) + uvf(i+1,j+1)

其中f(i,j)表示源图像(i,j)处的的像素值,以此类推这就是双线性内插值法。双线性内插值法计算量大,但缩放后图像质量高,不会出现像素值不连续的的情况。由于双线性插值具有低通滤波器的性质,使高频分量受损,所以可能会使图像轮廓在一定程度上变得模糊imresize( )来实现双线性内插值算法。

双线性内插值算法的MATLAB源代码为:

A=imread('F:\lena.jpg');

imshow(A);

title('原图128*128');

C=imresize(A,8,'bilinear'); %双线性插值

figure;

imshow(C);

title('双线性内插值法放大8倍1024*1024');

程序运行后,原图如图3所示:

图3

双线性内插值法放大8倍后的图如图4所示:

图4

(3)双三次法法能够克服以上两种算法的不足,计算精度高,但计算大,考虑一个浮点坐标(i+u,j+v)周围的16个邻点目的像素值f(i+u,j+v)可由如下插值公式得到:f(i+u,j+v) = [A] * [B] * [C]

[A]=[ S(u + 1) S(u + 0) S(u - 1) S(u - 2) ][C]=[ S(v + 1) S(+ 0) S( - 1) S( - 2) ]T;

而[B]是周围16个邻点组成的4*4的矩阵;S(x)是对 Sin(x*π)/x 的逼近imresize( )来实现双三次插值算法。MATLAB源代码为:

A=imread('F:\lena.jpg'); %读取原图像

D=imresize(A,8,'bicubic'); %双三次插值放大8倍

figure;

imshow(D);

title('三次卷积法放大8倍1024*1024');

MATLAB自带双三次插值法运行结果如图5所示:

图5

也可以自己编写双三次插值算法MATLAB代码如下:

clc,clear;

ff=imread('F:\lena.jpg'); %读取图像到ff

k=8; %设置放大倍数

[m,n,color]=size(ff);

f=zeros(m,n); %将彩色图像ff转换为黑白图像f

for i=1:m

for j=1:n

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

end

end

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值