双线性插值(Matlab实现)(一处修改)

本文介绍了一种使用双线性插值法实现图像缩放的算法,该算法可以处理任意倍数的图像缩放,适用于图像处理和计算机视觉领域。文章详细解释了算法的步骤,包括数据预处理、确定新图像尺寸、边缘扩展和插值计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

function [ ZI ] = imblizoom( I,zmf )

%----------------------双线性插值法缩放矩阵或图像---------------------------

% Input:

%       I:图像文件名或矩阵(整数值(0~255))

%       zmf:缩放因子,即缩放的倍数

% Output:

%       缩放后的图像矩阵 ZI

% Usage:

%       ZI = SSELMHSIC('ImageFileName',zmf)

%       对图像I进行zmf倍的缩放并显示

%    Or:

%       ZI = SSELMHSIC(I,zmf)

%       对矩阵I进行zmf倍的缩放并显示

%    ...

%-------------------------------------------------------------------

    %%%%    Authors:   Zhi Liu

    %%%%    XiDian University Student

    %%%%    EMAIL:     zhiliu.mind@gmail.com

    %%%%    DATE:      16-12-2013

%% Step1 对数据进行预处理

if ~exist('I','var') || isempty(I)

    error('输入图像 I未定义或为空!');

end

if ~exist('zmf','var') || isempty(zmf) || numel(zmf) ~= 1

     error('位移矢量 zmf未定义或为空或 zmf中的元素超过2!');

end

if isstr(I)

    [I,M] = imread(I);

end

if zmf <= 0

     error('缩放倍数 zmf的值应该大于0!');

end

%% Step2 通过原始图像和缩放因子得到新图像的大小,并创建新图像。

[IH,IW,ID] = size(I);

ZIH = round(IH*zmf); % 计算缩放后的图像高度,最近取整

ZIW = round(IW*zmf); % 计算缩放后的图像宽度,最近取整

ZI = zeros(ZIH,ZIW,ID); % 创建新图像

%% Step3 扩展矩阵I边缘

IT = zeros(IH+2,IW+2,ID);

IT(2:IH+1,2:IW+1,:) = I;

IT(1,2:IW+1,:)=I(1,:,:);IT(IH+2,2:IW+1,:)=I(IH,:,:);

IT(2:IH+1,1,:)=I(:,1,:);IT(2:IH+1,IW+2,:)=I(:,IW,:);

IT(1,1,:) = I(1,1,:);IT(1,IW+2,:) = I(1,IW,:);

IT(IH+2,1,:) = I(IH,1,:);IT(IH+2,IW+2,:) = I(IH,IW,:);

%% Step4 由新图像的某个像素(zi,zj)映射到原始图像(ii,jj)处,并插值。

for zj = 1:ZIW         % 对图像进行按列逐元素扫描

    for zi = 1:ZIH

        ii = (zi-1)/zmf; jj = (zj-1)/zmf;

        i = floor(ii); j = floor(jj); % 向下取整

        u = ii - i; v = jj - j;

        i = i + 1; j = j + 1;

        ZI(zi,zj,:) = (1-u)*(1-v)*IT(i,j,:) +(1-u)*v*IT(i,j+1,:) + u*(1-v)*IT(i+1,j,:) +u*v*IT(i+1,j+1,:);

    end

end

ZI = uint8(ZI);

%% 以图像的形式显示同现矩阵P

figure;

imshow(I,M);

axis on;

title(['原图像(大小: ',num2str(IH),'*',num2str(IW),'*',num2str(ID),')']);

figure;

imshow(ZI,M);

axis on;

title(['缩放后的图像(大小: ',num2str(ZIH),'*',num2str(ZIW),'*',num2str(ID)',')']);

end  


评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值