matlab双线性插值&双三次插值对CUFED5进行处理

本文介绍了如何在MATLAB中实现自定义的双线性插值函数用于图像缩放,并对比了双线性和双三次插值的效果。作者通过调用`imresize()`函数,展示了双三次插值在图像质量上的优势。最后,强调了`imresize()`函数的不同用法及其参数选择。

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

本文是摘抄与总结,仅供自己学习和日后查阅使用。

可以自己写一个双线性插值函数,

-------------------------------------------------------------------

function outputimg = my_imresize(A,n)
%  A 是图像矩阵,n是放缩的倍数
% 返回值outputimg是一个放缩后的图像矩阵

if n <= 0
    error('缩放倍数n的值应该大于0!');
end

%四舍五入计算放大后图像矩阵
[H,W,CH] = size(A);
DH = round(H * n);
DW = round(W * n);
outputimg = zeros(DH,DW,CH);

%利用双线性插值公式,从新矩阵映射回原图像
for di = 1:DH
    for dj = 1:DW
        ii = di / n;jj = dj / n;
        i = floor(ii);j = floor(jj);
        u = ii - i;v = jj - j;
        i = i + 1;j = j + 1;
        %边界处理
        if (i < 1)
            i = 1;
        end
        if (j < 1)
            j = 1;
        end
        if((i + 1) > H)
            i = H - 1;
        end
        if((j + 1) > W)
            j = W -1;
        end
        %线性插值公式
        outputimg(di,dj,:) = (1 - u) * (1 - v) * A(i,j,:) + (1 - u) * v * A(i,j + 1,:); 
        + u * (1 - v) * A(i + 1,j,:) + u * v * A(i + 1,j + 1,:);
    end
end

 %转化成uint8才能正常显示
outputimg = uint8(outputimg); 

-------------------------------------------------

对其进行调用,也可以直接使用imresize()函数(文章最后有简单介绍),处理CUFED5

---------------------------------------------------

clc;close all;clear all;

for num = 0:125
    c1 = '00';
    if num>=10
        c1='0'
    end
    c2 = num2str(num);
    c3 = '_0.png';
    img_name = [c1,c2,c3]
    if num>=100 
        img_name = [c2,c3]
    end
    A = imread(img_name);
    B = my_imresize(A,0.25);

    imwrite(B,['CUFED5_LR\' , img_name]);
%     figure,imshow(A),title('原图');
%     figure,imshow(B),title('缩小1/4后的图像');
end

----------------------------------------------

之后发现双线性插值效果并不理想

从这两张图片就可以看出差别

双线性:

双三次:

 

于是打算使用双三次插值。这次直接调用函数,

只改变这一行即可


 B = imresize(A, 0.25, 'bicubic');

最后是imresize()函数。

matlab中imresize()函数的功能是改变图像的大小。

其用法有多种:*

1、B = imresize(A,m) 将图片A放大m倍

2、B = imresize(A,m,method) 将图片A由参数method指定的插值运算方法来改变图像的大小到m倍,

method的几种可选值:

'nearest’最近邻插值(默认)

'bilinear’双线性插值

'bicubic’双三次插值
在数值分析这个数学分支中,双三次插值(英语:Bicubic interpolation)是二维空间中最常用的插值方法。在这种方法中,函数f在点 (x,y) 的值可以通过矩形网格中最近的十六个采样点的加权平均得到。

3、B = imresize(A,[mrows ncols],method) 将图片A由参数method指定的插值运算方法,来改变图像的大小到长宽为[mrows ncols]

4、B = imresize(…,method,n)

5、B = imresize(…,method,h)

其中的h可以是任意一个FIR滤波器(h通常由函数ftrans2、fwind1、fwind2、或fsamp2等生成的二维FIR滤波器)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值