数字图像处理隔行采样缩小图像,最近邻插值与双线性插值放大图像(MATLAB实现)

1.隔行(列)采样缩小图像1/4的实验,两层for循环遍历,每隔一行,一列采集一个像素,这样在行和列上都缩小1/2,图像缩小了1/4。

function pt=zoom1_4(p1)
    [m,n]=size(p1);
    for i=1:m
        if(mod(i,2)==0)
            for j=1:n
                if(mod(j,2)==0)
                    pt(i/2,j/2)=p1(i,j);
                end
            end
        end
    end
end
>> I=imread('cameraman.tif');
>> pt=zoom1_4(I);
>> imshow(pt)

 

2.采用最近邻插值将图像放大1.5倍


放大1.5倍涉及到了一些像素坐标取整的问题,包括像素个数等,实验中都选择了向下取整的办法,由于1.5倍取在四个像素中间,最近邻点可以选择多个节点,这里也统一采用向下取整的节点,以免边界溢出。

function pt=amp_neighbor(p1)
    [m1,n1]=size(p1);
    mt=floor(m1*1.5);
    nt=floor(n1*1.5);
    for i=1:mt
        for j=1:nt
            pt(i,j)=p1(ceil(i/1.5),ceil(j/1.5));
        end
    end
end
>> I=imread('cameraman.tif');
>> pt=amp_neighbor(I);
>> imshow(pt)

 

3.采用双线性插值将图像放大1.5倍

像素个数操作同上,对于中间像素点的插值采用周围四个点,经过算术运算取均值的方法进行插值,按照PPT的ABCD四个点来编写函数。

function pt=amp_doublelinear(p1)
    [m1,n1]=size(p1);
    mt=floor(m1*1.5);
    nt=floor(n1*1.5);
    pt(1,1)=p1(1,1);
    pt(1,2)=p1(1,2);
    pt(2,1)=p1(2,1);
    for i=2:mt
        for j=2:nt
            gf=(ceil(i/1.5)-(i/1.5))*(p1(floor(i/1.5),ceil(j/1.5))-p1(floor(i/1.5),floor(j/1.5)))+p1(floor(i/1.5),floor(j/1.5));
            ge=(ceil(i/1.5)-(i/1.5))*(p1(ceil(i/1.5),ceil(j/1.5))-p1(ceil(i/1.5),floor(j/1.5)))+p1(ceil(i/1.5),floor(j/1.5));
            pt(i,j)=(ceil(j/1.5)-j/1.5)*(gf-ge)+ge;
        end
    end
end
>> I=imread('cameraman.tif');
>> pt=amp_doublelinear(I);
>> imshow(pt)
  • 4
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值