clc
clear f1 f_edge f_zaw f_jc f1_8lt f1_qxj f_xoz vl xc yc zc yg y_cha z;
%% 读取文件
L=imread('cranf6209-L.bmp'); % load the left image
R=imread('cranf6209-R.bmp'); % load the right image
L_ROIs_xoz=L; % xoz投影后ROIs
L_ROIs_xoy=L; % xoz投影后ROIs
L_ROIs=L;
disparity=load('disparity_iteration_4.txt');
%% 参数初始化
[Height,Width]=size(L);
H=1; % 摄像机的高度
theta=1; % 摄像机与水平方向的角度
f=0.01; % 摄像机的焦距
b=0.17; % 摄像机之间的水平距离
u0=Width/2;
v0=Height/2;
dx=3.6e-3/Width; % 摄像机水平像素之间的距离
dy=2.7e-3/Height; % 摄像机竖直像素之间的距离
w_stereomatching_row=3; % 立体匹配窗口:行
w_stereomatching_col=5; % 立体匹配窗口:列
w_nihe_row=1; % 视差拟合窗口:行
w_nihe_col=3; % 视差拟合窗口:列
w_smoothdisparity_row=5; % 视差平滑窗口:行
w_smoothdisparity_col=5; % 视差平滑窗口:列
xc_resolution=0.03; % 投影平面x轴的分辨率
yc_resolution=0.03; % 投影平面y轴的分辨率
zc_resolution=0.3; % 投影平面z轴的分辨率
xc_threshold_juli=0.6; % 感兴趣区域分割时,xc的距离阈值。
yc_threshold_juli=0.6; % 感兴趣区域分割时,yc的距离阈值。
zc_threshold_juli=3.0; % 感兴趣区域分割时,zc的距离阈值。
disparity_threshold=4.8; % 近处点的视差阈值
threshold=5; % 平滑坐标时,窗口中距离范围内像素点个数的阈值。
average=1; % 是否需要做均值平滑
juli_threshold=b*f/(dx*disparity_threshold); % 近处的点的距离阈值
xoz_maxcol=round(juli_threshold/zc_resolution)+2; % xoz投影图转化为图像时,最大行数。
xc_threshold_pix=xc_threshold_juli/xc_resolution; % 感兴趣区域分割时,xc的像素阈值。
yc_threshold_pix=yc_threshold_juli/yc_resolution; % 感兴趣区域分割时,yc的像素阈值。
zc_threshold_pix=zc_threshold_juli/zc_resolution; % 感兴趣区域分割时,zc的像素阈值。
abi=zeros(2,2); % xoz投影图转化为图像后,存储连通域像素最大最小行和列,第一行是最小和最大行数,第二行是最小和最大列数,并进行扩展。
abj=zeros(2,2); % xoz投影图转化为图像后,存储连通域像素最大最小行和列,第一行是最小和最大行数,第二行是最小和最大列数,并进行扩展。
%% 变量初始化
xl =zeros(Height,Width); % xl
yl =zeros(Height,Width); % yl
xc =zeros(Height,Width); % xc
yc =zeros(Height,Width); % yc
zc =zeros(Height,Width); % zc
f_edge=zeros(Height,Width); % 左图的边缘点
f_zaw =zeros(Height,Width); % 障碍物上的点
f_jc =zeros(Height,Width); % 近处的点
f1_8lt=zeros(Height,Width); % f1的8连通区域标记图
f1_qxj=zeros(Height,Width); % f1中去除虚假物体边缘点后的图像,阈值大小为10
f_xoz =zeros(Height,Width); % f1_qxj投影到xoz平面
f1 =zeros(Height,Width); % 近处的、障碍物上的 边缘点
f2 =zeros(Height,Width); % 近处的、障碍物上的 边缘点
%% 由视差计算xc yc zc
for row=1+w_stereomatching_row+w_nihe_row+w_smoothdisparity_row:Height-(w_stereomatching_row+w_nihe_row+w_smoothdisparity_row) % 图像处理的范围
for col=1+w_stereomatching_col+w_nihe_col+w_smoothdisparity_col:Width-(w_stereomatching_col+w_nihe_col+w_smoothdisparity_col) % 图像处理的范围
u_left=col; % 图像像素坐标系到二维坐标系的转化
v_left=Height-row+1; % 图像像素坐标系到二维坐标系的转化
xl(row,col)=dx*(u_left-u0);
yl(row,col)=dy*(v_left-v0);
zc(row,col)=((b/(dx*disparity(row,col)))-1)*f;
xc(row,col)=zc(row,col)*xl(row,col)/f;
yc(row,col)=zc(row,col)*yl(row,col)/f;
end
end
iteration=1;
for i=1:iteration
i
xc=smoothzc(xc,Height,Width,w_stereomatching_row,w_stereomatching_col,w_nihe_row,w_nihe_col,w_smoothdisparity_row,w_smoothdisparity_col,threshold,average,i);
yc=smoothzc(yc,Height,Width,w_stereomatching_row,w_stereomatching_col,w_nihe_row,w_nihe_col,w_smoothdisparity_row,w_smoothdisparity_col,threshold,average,i);
zc=smoothzc(zc,Height,Width,w_stereomatching_row,w_stereomatching_col,w_nihe_row,w_nihe_col,w_smoothdisparity_row,w_smoothdisparity_col,threshold,average,i);
end
%% 1、滤波、边缘检测
w_filter=fspecial('gaussian');
L=imfilter(L,w_filter,'replicate');
R=imfilter(R,w_filter,'replicate');
f_edge=edge(L,'sobel',0.01);
% figure(1),imshow(f_edge);
for i=1:Height
for j=1:Width
if f_edge(i,j)==1 L(i,j)=0;end
end
end
%% 2、识别障碍物上的点
yg=(zc*sin(theta*pi/180)-H)/cos(theta*pi/180);
y_cha=yc-yg;
f_zaw(find(y_cha>0))=1;
% figure(2),imshow(f_zaw);
%% 3、识别近处的点
f_jc(find(disparity>disparity_threshold))=1;
% figure(3),imshow(f_jc);
%% 识别近处的、障碍物上的 边缘点
for i=1+w_stereomatching_row+w_nihe_row+w_smoothdisparity_row:Height-(w_stereomatching_row+w_nihe_row+w_smoothdisparity_row) % 图像处理的范围
for j=1+w_stereomatching_col+w_nihe_col+w_smoothdisparity_col:Width-(w_stereomatching_col+w_nihe_col+w_smoothdisparity_col) % 图像处理的范围
if f_edge(i,j)==1&&f_zaw(i,j)==1&&f_jc(i,j)==1 f1(i,j)=1;end
% if f_zaw(i,j)==1&&f_jc(i,j)==1 f1(i,j)=1;end
end
end
% figure(4),imshow(f1);
% figure(10),imshow(f1);
%% 在f1中标记8连通区域,去除虚假物体的边缘点
[f1_8lt num]=bwlabel(f1,8);
for i=1:num
if length(find(f1_8lt==i))>10 f1_qxj(find(f1_8lt==i))=1; end
end
% figure(5),imshow(f1_qxj);
xc=xc+abs(min(min(xc(find(f1_qxj==1)))));
yc=yc+abs(min(min(yc(find(f1_qxj==1)))));
%% xoz投影
coordinate_pix_xoz=cell(1,1); % 存储xoz投影图像所对应的左图像素坐标
row_max_xoz=xoz_maxcol; % xoz平面内投影的最大行数
col_max_xoz=round(max(xc(find(f1_qxj==1)))/xc_resolution)+1; % xoz平面内投影的最大行数
for i=1:row_max_xoz
for j=1:col_max_xoz
coordinate_pix_xoz{i,j}=[];
end
end
xoz =zeros(row_max_xoz,col_max_xoz); % xoz投影
xoz_qxj =zeros(row_max_xoz,col_max_xoz); % xoz投影,去除虚假物
for i=1+w_stereomatching_row+w_nihe_row+w_smoothdisparity_row:Height-(w_stereomatching_row+w_nihe_row+w_smoothdisparity_row) % 图像处理的范围
for j=1+w_stereomatching_col+w_nihe_col+w_smoothdisparity_col:Width-(w_stereomatching_col+w_nihe_col+w_smoothdisparity_col) % 图像处理的范围
if f1_qxj(i,j)==1
col=round(xc(i,j)/xc_resolution)+1;
row=round(zc(i,j)/zc_resolution);
xoz(xoz_maxcol-row+1,col)=1; % 二维坐标系到图像坐标系:行转换
coordinate_pix_xoz{xoz_maxcol-row+1,col}=[coordinate_pix_xoz{xoz_maxcol-row+1,col};[i,j]];
end
end
end
xoz=imfill(xoz,'holes');
% figure(6),imshow(xoz);
[xoz_8lt num]=bwlabel(xoz,8);
for i=1:num
if length(find(xoz_8lt==i))>4 xoz_qxj(find(xoz_8lt==i))=1; end
end
% figure(7),imshow(xoz_qxj);
%% xoz平面内ROIs
[coordinate_ROIs_pix_xoz_left summit_rectangle_xoz summit_rectangle_xoz_left amount_ROIs_xoz]=ROIs(xoz_qxj,xc_threshold_pix,zc_threshold_pix,L_ROIs_xoz,coordinate_pix_xoz,1);
%% xoy平面内投影
coordinate_ROIs_pix_xoy_left=cell(1,1); % xoy平面,经过ROIs后,每个感兴趣区域左图像素点坐标
summit_rectangle_xoy=cell(1,1); % xoy平面,经过ROIs后,每个感兴趣区域矩形框顶点坐标(在xoy平面)
summit_rectangle_xoy_left=cell(1,1); % xoy平面,经过ROIs后,每个感兴趣区域矩形框顶点坐
没有合适的资源?快使用搜索试试~ 我知道了~
基于 matlab蛇形算法,把车辆从图中检测出来
共4个文件
m:4个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 44 浏览量
2024-05-27
10:27:20
上传
评论
收藏 8KB ZIP 举报
温馨提示
【作品名称】:基于 matlab蛇形算法,把车辆从图中检测出来 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:基于 matlab蛇形算法,把车辆从图中检测出来
资源推荐
资源详情
资源评论
收起资源包目录
根据蛇形算法,把车辆从图中检测出来.zip (4个子文件)
根据蛇形算法,把车辆从图中检测出来
smoothzc.m 2KB
obstacledetection.m 10KB
cheliang_jiance.m 1KB
ROIs.m 6KB
共 4 条
- 1
资源评论
MarcoPage
- 粉丝: 4298
- 资源: 8839
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功