数字图像处理实验1.2:matlab双线性插值缩放、缩小图像

2.Zooming and Shrinking Images by Bilinear Interpolation

通过双线性插值来缩放和缩小图像
(a)编写一个能够通过双线性插值来缩放和缩小图像的计算机程序。程序的输入是水平和垂直方向的所需大小。您可以忽略混叠效果。
(b)下载图。2.19,并使用您的程序将此图像从1024x1024缩小到256x256像素。
(c)使用程序将图像放大(b)回到1024x1024。解释一下造成他们存在差异的原因。

代码:

function ex_2(k)
%双线性插值缩放图像 内核为矩阵操作
%此处参数详细说明
%k 为放大缩小的比例
%filep 为输入图像文件名
%Image为原图
%IT为原图矩阵
%TransImage为缩放后的矩阵
clc;
%%
%确定图片路径
[filename,filepath] = uigetfile('*.*');
if isequal(filename,0)
   disp('User selected Cancel');
else
   disp(['User selected ', fullfile(filepath,filename)]);
end
filep=strcat(filepath,filename);
%%
%step1:准备工作——将图片读入,并检查一下缩放比是否小于等于0
if ischar(filep)
    [Image,M]=imread(filep);%将图读入Image,颜色读入M
end
if k<=0
    error('k不能为0')
end

%%
%step2:将目标图像矩阵建立为0矩阵
[H,W,D]=size(Image);%分别返回 Image 的查询维度的长度。
TransH=round(H*k);
TransW=round(W*k);
TransImage=zeros(TransH,TransW,D);%缩放之后新的矩阵大小
%%
%step3:将输入图像上下左右各加一列(行),这一步为了后面边缘像素的插值操作
IT=zeros(H+2,W+2,D);
IT(2:H+1,2:W+1,:)=Image;
IT(1,2:W+1,:)=Image(1,:,:);IT(H+2,2:W+1,:)=Image(H,:,:);
IT(2:H+1,1,:)=Image(:,1,:);IT(2:H+1,W+2,:)=Image(:,W,:);
IT(1,1,:)=Image(1,1,:);IT(1,W+2,:)=Image(1,W,:);
IT(H+2,1,:)=Image(H,1,:);IT(H+2,W+2,:)=Image(H,W,:);

%%
%step4 新图的某个像素(i j)映射到原图(ox oy)上,并双线性插值算出新图该矩阵的灰度
for j=1:TransH
    for i=1:TransW
        ox=(i-1)/k;oy=(j-1)/k;%用新的大图映射到小图的位置上
        %向下取整得到整数x,y
        x=floor(ox);y=floor(oy);
        %接下来带入公式即可
        u=ox-x;%gapx
        v=oy-y;%gapy
        x=x+1;y=y+1;%因为IT中多加了一行一列
        TransImage(i,j,:)=u*v*IT(x+1,y+1,:)+v*(1-u)*IT(x,y+1,:)+(1-v)*u*IT(x+1,y,:)+(1-v)*(1-u)*IT(x,y,:);
    end
end
%%
%同时输出原图和更改后的图
figure
subplot(1,2,1);
imshow(Image,M);
title('原图')
subplot(1,2,2)
imshow(TransImage,M);
title(['缩放后 缩放比为',num2str(k)]);
%%
imwrite([uint8(TransImage),M],'zoom.jpg');
end

这个代码有点长,要好好品一品啊uu们。步骤之间我都分段了,先复制到matlab里就能看到分段。

对于该代码的几点说明:

1.创建:该代码是一个函数:应在matlab中 新建——>函数,然后写在这个里面

 

 2.运行:在命令行窗口输入函数名+函数的参数

参考书:

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Karon_NeverAlone

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值