interp_2D函数:实现双线性插值
摘要:该MATLAB函数interp_2D实现了二维双线性插值算法。函数接受两个点的坐标及其对应的查找表点,通过fund_updowm辅助函数确定相邻点位置后,先在x方向进行线性插值生成中间值,再在y方向进行插值计算最终结果。算法能正确处理边界情况(当点位于查找表节点时直接取值),适用于二维网格数据的插值计算。
matlab
function out = interp_2D(point1,lut_ponit1,point2,lut_ponit2,lut)
%双线性插值计算公式
% point1 | 注:ripple
% point2 _ 注:Gray
[x_down,x_up]=fund_updowm(point1,lut_ponit1);
[y_down,y_up]=fund_updowm(point2,lut_ponit2);
[V,H]=size(lut_ponit1);
num_point1=max(H,V);
[v,h]=size(lut_ponit2);
num_point2=max(h,v);
new_lut=zeros(num_point2,1,'double');
if x_down~=x_up
for i=1:num_point1
new_lut(i,1)=lut(i,x_down)+(point1-x_down)*(lut(i,x_up)-lut(i,x_down))/(x_up-x_down);
end
else
new_lut(:,1)=lut(:,x_down);
end
if y_down~=y_up
out=double(new_lut(y_down)+(point2-lut_ponit2(y_down))*(new_lut(y_up)-new_lut(y_down))/(lut_ponit2(y_up)-lut_ponit2(y_down)));
else
out=double(new_lut(y_down));
end
end