资源简介
单目测距是利用一个摄像头进行视频拍摄,在图像中找到待测物体。这一系列动作,涉及到了物体的识别,相机的结构,坐标变换的一些知识,距离的获取是一个很广泛的课题,用摄像头来测距是其中一个方向,包括单目测距、双目测距、结构光测距等方法。
代码片段和文件信息
clear;clc;close all
%处理第一张图片(对应距离为D)
I=imread(‘20180409-204942-278.jpg‘); %读入图片
figure
subplot(231);
imshow(I);
title(‘原图‘);
I=rgb2gray(I); %将RGB图转换成灰度图
subplot(232);
imshow(I);
title(‘灰度图‘);
[mn]=size(I);
for K=1:10
I2=wiener2(I[3 3]); %滤波10次,把多余的点滤去。
end
I=edge(I‘sobel‘); %集中边缘检测算子sobel、canny、log、roberts、prewitt。在此处sobel算子效果最好
subplot(233);
imshow(I);
title(‘边缘提取图‘);
for i=1:m %y
for j=1:n %x
if i<280 || i>340|| j<430|| j>490
I(ij)=0;
end
end
end
subplot(234);
imshow(I);
title(‘目标物提取图‘);
%形态学处理,填充轮廓内像素
SE=strel(‘diamond‘2); % strel在操作结构元素应用,用于膨胀腐蚀及开闭运算等操作的结构元素对象
%具体用法:SE = strel(shapeparameters)
%创建由指定形状shape对应的结构元素。%参数parameters一般控制SE的大小。
I2=imdilate(ISE); %imdilate对图像实现膨胀操作。
%IM2 = imdilate(IMSE)膨胀灰度,二值,压缩二值图像IM,返回IM2。
%参数SE为由strel函数返回的结构元素或者结构元素对象组。
I2=imfill(I2‘holes‘); %该函数用于填充二值图像中的空洞区域。 如, 黑色的背景上有个白色的圆圈。 则这个圆圈内区域将被填充。
subplot(235);
imshow(I2);
title(‘填充图‘);
sum1=0;
for i=1:m %计算白像素的个数,即为图形面积
for j=1:n
if I(ij)==1;
sum1=sum1+1;
end
end
end
fprintf(‘在距离为D时目标物的图形面积(像素点个数)s1=%f\n‘sum1);
%处理第二张图片(对应距离为D+d)
I=imread(‘20180409-205011-792.jpg‘); %读入图片
figure
subplot(231);
imshow(I);
title(‘原图‘);
I=rgb2gray(I);
- 上一篇:matlab计算图像锐度
- 下一篇:5点3次加权滤波的程序和数据
评论
共有 条评论