最邻近插值法(The nearest interpolation)实现图像缩放

也称零阶插值。它输出的像素灰度值就等于距离它映射到的位置最近的输入像素的灰度值。但当图像中包含像素之间灰度级有变化的细微结构时,最邻近算法会在图像中产生人为加工的痕迹。
具体计算方法:对于一个目的坐标,设为 M(x,y),通过向后映射法得到其在原始图像的对应的浮点坐标,设为 m(i+u,j+v),其中 i,j 为正整数,u,v 为大于零小于1的小数(下同),则待求象素灰度的值 f(m)。利用浮点 m 相邻的四个像素求f(m)的值。
function re_im = nearest(im, p, q)
%最邻近插值法,输入目标图像和行缩放、纵缩放倍数
%ziheng 2016.3.27
[m,n] = size(im);
im_R = im(:,:,1);
im_G = im(:,:,2);
im_B = im(:,:,3);
l = round(m*p);
h = round(n*q)/3;
re_R = uint8(zeros(l,h));
re_G = uint8(zeros(l,h));
re_B = uint8(zeros(l,h));
for dstx = 1:l
    for dsty = 1:h
         srcx = max(1,min(m,round(dstx/p)));
         srcy = max(1,min(n/3,round(dsty/q)));
         re_R(dstx,dsty) = im_R(srcx,srcy);
         re_G(dstx,dsty) = im_G(srcx,srcy);
         re_B(dstx,dsty) = im_B(srcx,srcy);
    end
end
re_im = cat(3,re_R,re_G,re_B);
figure,imshow(re_im);

你可能感兴趣的:(学习笔记)