金牌会员
- 积分
- 1634
- 威望
- 828
- 贡献
- 432
- 兑换币
- 509
- 注册时间
- 2015-10-20
- 在线时间
- 187 小时
|
其实很多东西真正花点心思,才发现也不是不可琢磨。
function J= TwoLinear( I )
%UNTITLED3 Summary of this function goes here
% 双线性插值 by Benzli
I=imread('tx.png');
I=double(I);
[H,W]=size(I);
%A=43.536*pi/360; %2a代表摄像头垂直视野角;43.536
%B=55.591*pi/360; %2b代表摄像头水平视野角;55.591
A=56*pi/360; %2a代表摄像头垂直视野角;43.536
B=55*pi/180; %2b代表摄像头水平视野角;55.591
R=40*pi/180; %r代表摄像头光轴和水平路面夹角
h=1.25; %摄像头安装高度
H1=800;W1=600; %需要显示图像的高和宽
h1=4;w1=2; %实际路面的高和宽
%由世界坐标变换到图像坐标系
for M=1:H1 %变换之后路面图像H1*W1=400*600个像素,路面宽度为7m,高度为10m
for N=1:W1
Px=N*w1/W1-w1/2; Py=-M*h1/H1+h1/2+h*cot(R); %将(M,N)转换为路面实际坐标(Px,Py),只有在涉及到
%路面坐标系得时候才会有把道路坐标系下的图像放缩的问题,
%乘以一定的象素值
Py1=(Py*H-H*h*tan(R))/(2*Py*tan(R)*tan(A)+2*h*tan(A)); % 垂直方向
Px1=(Px*W)/(sqrt(h*h+Py*Py)*2*tan(B)); % 水平方向
m=H/2-Py1; %对原图拍摄的图像进行坐标变换
n=Px1+W/2;
i=floor(m);
j=floor(n);
a=m-i;b=n-j; %小数部分
%下面是插值算法,利用双线性插值法
if(((i+1)>H)||((j+1)>W)||(i<1)||(j<1))
Imn=0;
else
Imn=(1-a)*(1-b)*I(i,j)+a*(1-b)*I(i+1,j)+b*(1-a)*I(i,j+1)+a*b*I(i+1,j+1);
end
%{
if((m1>H)||(n1>W)||(m1<1)||(n1<1))
Imn=0;
else
Imn=I(m1,n1);
end
%}
J(M,N)=uint8(Imn);
end
end
figure,imshow(J);
end
|
|