本文主要是介绍双线性插值法(Bilinear interpolation),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
双线性插值法(Bilinear interpolation)是利用待求象素反变换到原图像对应的浮点坐标,邻近的四个象素在两个方向上作线性内插。四邻近像素值的加权平均即为待测点像素值,计算权重反比于浮点在双线性方向上的映射距离。
双线性插值是利用了需要处理的原始图像浮点坐标周围的四个像素点的相关性,通过双线性算法计算。同上A中所设,目的坐标M(x,y)和浮点坐标m(i+u,j+v),则:
f(M)=(1-u)(1-v)*f(i,j)+(1-u)v*f(i,j+1)+ u(1-v)*f(i+1,j) +uv*f(i+1,j+1)
function re_im = dlinear(im, p, q)
%双线性插值法实现图像缩放,输入目标图像和行缩放、纵缩放倍数
%ziheng 2016.3.29
%imshow(im);
[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:lfor dsty = 1:hx = floor(dstx/p); u = dstx/p - x;y = floor(dsty/q); v = dsty/q - y;xx = max(1,x); xa = min(m,x+1);yy = max(1,y); ya = min(n/3,y+1);re_R(dstx,dsty) = (1-u)*(1-v)*im_R(xx,yy) + u*(1-v)*im_R(xa,yy)+(1-u)*v*im_R(xx,ya) + u*v*im_R(xa,ya);re_G(dstx,dsty) = (1-u)*(1-v)*im_G(xx,yy) + u*(1-v)*im_G(xa,yy)+(1-u)*v*im_G(xx,ya) + u*v*im_G(xa,ya);re_B(dstx,dsty) = (1-u)*(1-v)*im_B(xx,yy) + u*(1-v)*im_B(xa,yy)+(1-u)*v*im_B(xx,ya) + u*v*im_B(xa,ya);end
end
re_im = cat(3,re_R,re_G,re_B);
figure,imshow(re_im);
这篇关于双线性插值法(Bilinear interpolation)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!