| |
clc;
clear;
close all;
warning off;
addpath 'func\'
%计算物体的深度距离
%===============================
%计算左边图像的目标位置
%===============================
PL=imread('p1.jpg');
subplot(241),imshow(PL),title('左侧拍摄图像');
PL=rgb2gray(PL);
PL=255-PL;
PL1=im2bw(PL,0.8);
subplot(242),imshow(PL1),title('阈值分割图像');
se1=strel('rectangle',[5 5]);
PL2=imclose(PL1,se1); %闭运算
se2=strel('rectangle',[5 5]);
PL3=imopen(PL2,se2); %开运算
subplot(243),imshow(PL2),title('形态学处理');
imwrite(PL3,'PL3.bmp','bmp')
k=1;sum1=0;
for j=1:518 %计算目标一的像素突变点
for i=1:388
sum1=sum1+PL3(i,j);
end
k=k+1;
P(k)=sum1/318;
sum1=0;
end
x=1:518;
y=P(x);
subplot(244),plot(x,y),title('灰度变化图');
plot(x,y);
for i=2:518 %计算目标二的像素突变点
if ((P(i-1)<0.01)&(P(i)>0.01)&(P(i)<0.16))
Z(1)=i;
continue
end
if ((P(i-1)<0.1)&(P(i)>0.16))
Z(2)=i;
continue
end
end
%===============================
%计算右边图像的目标位置
%===============================
PR=imread('p2.jpg');
subplot(245),imshow(PR);title('右侧拍摄图像');
PR=rgb2gray(PR);
PR=255-PR;
PR1=im2bw(PR,0.8);
subplot(246),imshow(PR1);title('阈值分割图像');
se1=strel('rectangle',[5 5]);
PR2=imclose(PR1,se1);
se2=strel('rectangle',[5 5]);
PR3=imopen(PR2,se2);
subplot(247),imshow(PR3),title('形态学处理');
k=1;sum2=0;
for j=1:518
for i=1:388
sum2=sum2+PR3(i,j);
end
k=k+1;
Q(k)=sum2/318;
sum2=0;
end
x=1:518;
y=Q(x);
subplot(248),plot(x,y),title('灰度变化图');
imwrite(y,'y2.bmp','bmp')
for i=2:518
if ((Q(i-1)<0.01)&(Q(i)>0.05)&(Q(i)<0.16))
S(1)=i;
continue
end
if ((Q(i-1)<0.1)&(Q(i)>0.16))
S(2)=i;
continue
end
end
disp('像素突变点:');D=Z-S %z为目标一的像素突变点,s为目标二的像素突变点
disp('光轴间距离(单位mm):');B=41.5 %光轴间距离,单位mm
disp('相机焦距(单位mm):');f=6.3 %相机焦距,单位mm
disp('单位像素对应的实际长度(单位mm):');dx=0.013%单位像素对应的实际长度,单位mm
disp('目标一测得距离(单位mm):');D1=(f*B)/(dx*D(1)*5)%Z(1)为目标一测得距离,因为图像缩小了五倍,所以应除以5
disp('目标二测得距离(单位mm):');D2=(f*B)/(dx*D(2)*5)%Z(2)为目标二测得距离,因为图像缩小了五倍,所以应除以5
————————————————