Matlab实现双线性内插(畸变点处理)

Matlab实现双线性内插(畸变点处理)

%计算畸变点和地面点之前的系数ai,bi(线性关系)
%双线性内插计算灰度值
clc;clear;
x=input('输入全部地面点x坐标:','s');
x=str2num(x);                              %将输入的字符串转换成数字型
y=input('输入全部地面点y坐标:','s');
y=str2num(y);
B=zeros(length(x),3);
for i=1:length(x)
    B(i,1:3)=[1,x(i),y(i)];                 %计算Bx-l=0中的系数矩阵B
end
xx=input('输入全部畸变点x"坐标:','s');
xx=str2num(xx);
yy=input('输入全部畸变点y"坐标:','s');
yy=str2num(yy);
L1=xx';
L2=yy';
delta_x=(inv(B'*B))*B'*L1;                     %计算Bx-l=0中的x
delta_y=(inv(B'*B))*B'*L2;
fprintf('a0=%f a1=%f a2=%f\n',delta_x)
fprintf('a0=%f a1=%f a2=%f\n',delta_x)
a=delta_x;                                      %a,b即为改正系数 
b=delta_y;
number=input('输入待求点个数:');
x1_1=zeros(number,1);
y1_1=zeros(number,1);
x1=zeros(number,2);
for j=1:number
x1(j,1:2)=str2num(input('输入待求地面点(x,y)坐标:','s'));
x1_1(j)=a(1)+a(2)*x1(j,1)+a(3)*x1(j,2);          %计算畸变点坐标
y1_1(j)=b(1)+b(2)*x1(j,1)+b(3)*x1(j,2);
end
disp('畸变点坐标(第一列x,第二列y)')
disp([x1_1,y1_1])
gray=input('输入灰度值(从左下角开始,按照顺时针输入):','s');
gray=str2num(gray);
for n=1:length(x1_1)                              %根据双线性内插计算灰度值
   format long
   u(n)=(x1_1(n)-min(xx))/(max(xx)-min(xx));
   v(n)=(y1_1(n)-min(yy))/(max(yy)-min(yy));
   f(n)=(1-u(n))*(1-v(n))*gray(1)+(1-u(n))*v(n)*gray(2)+u(n)*v(n)*gray(3)+u(n)*(1-v(n))*gray(4);
end
disp('按输入坐标点顺序输出')
fprintf('%f\n ',f);
disp('最终求得灰度值(按输入坐标点顺序输出)')
fprintf('%f\n ',round(f));

小白练手,敬请斧正。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值