图片区域帧差法识别物体_matlab
PS:今天上午,非常郁闷,有很多简略基础的问题搞得我有些迷茫,哎,代码几天不写就忘。目前又不当COO,还是得用心记代码哦!
当初又到了本科生结业的时候,很多学同都在写毕设了。想想客岁帮我的女神做了
个物体别识,虽然没用上,不过我得觉挺有意思的,放在硬盘里睡觉也无啥代价,就发
表在这里给学弟学妹们做做考参。
女神的毕设是市城交通管理,说白了就是计设一个交通灯,我得觉这有点凌辱我们
本科生智商,就自以为聪慧的想做个途径车辆别识,通过摄像头到得前当途径的车辆数
量,然后再做别的处置。说白了就是数字图像处置。好正事先我们刚上完数字图像处置
这门课。就查点资料做做。
看看资料,要别识途径上的车辆,最简略的方法就是用帧差法, 拿有物体的图片减
去无物体的图片,断判有个变更就知道了。想想实确易容。先拟模下,用相机拍了两张
图片,一个有物体,一个无物体,由于是帧差法,背景就无所谓了。
先是拍的两张图,注意拍的度角要致一。
无物体的图片。
有物体的图片
程序的的目就是别识出旁边的百雀羚。
当然,首先转为灰度图片,在做差,取绝对值,舍掉差值小的区域,再膨胀腐蚀处置。以可就
到得只包括物体的图了,到得它的长宽,记标处置,OK!
代码如下,其实很短,更多的是表现上了。
clear % 清空工作空间 % clc % 清屏 tic; % 开始计时 wuc=imread('dscf0400.jpg'); % 取读无物彩体色图片 wu=rgb2gray(wuc); % 转换为灰度图片 youc=imread('dscf0401.jpg');% 取读有物彩体色图片 you=rgb2gray(youc); % 转换为灰度图片 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 类型转换,求差值 wu=double(wu)/255; you=double(you)/255; d(:,:)=abs(you(:,:)-wu(:,:)); % d=imabsdiff(you,wu); % d=double(d); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 二值化处置 bw1=im2bw(d,0.2); % 膨胀腐蚀算子,相当于闭操纵 se = strel('disk',3); bw=imerode(bw1,se); bw=imdilate(bw,se); % `找寻联通区域 [bwl,ln]=bwlabel(bw,4); % disp(ln); % 表现联通区域个数 % 找寻最大联通区域 bwl_index=0; bwl_big=0; for m=1:ln tmp=sum(sum(bwl==m)); if(tmp>bwl_big) bwl_big=tmp; bwl_index=m; end end % 取最大联通区域 obj=(bwl==bwl_index); [c,r]=find(obj==1); xbegin=min(r); ybegin=min(c); xlength=max(r)-xbegin; ylength=max(c)-ybegin; % 绘图 im1=wuc; lab1='原图'; im2=youc; lab2='放入物品'; % 对比度强增后表现 im3=imadjust(d,[0,0.2],[0,1]); lab3='图片差'; im4=bw1; lab4='阈值处置'; im5=bw; lab5='闭操纵'; im6=obj; lab6='别识'; subplot(231);imshow(im1);title(lab1); subplot(232);imshow(im2);title(lab2); subplot(233);imshow(im3);title(lab3); subplot(234);imshow(im4);title(lab4); subplot(235);imshow(im5);title(lab5); subplot(236);imshow(im6);title(lab6); % 记标物品 subplot(232); hold on plot(xbegin+xlength/2,ybegin+ylength/2,'*r'); rectangle('Position',[xbegin,ybegin,xlength,ylength],'EdgeColor','g'); hold off t=toc; % 计时结束 fprintf('耗时:%g',t);
运行出的结果
如下图。也可以自己新重拍照片,放进去,做自己的处置。我事先又做了摄像头的实时处置,等我的下篇博客。
图中第二张,一个绿色的矩形框就是别识出的物体位置及大小了。程序考参了各个地方的,只知其然不知其所以然。让大方之家见笑了。
文章结束给大家分享下程序员的一些笑话语录:
一位程序员去海边游泳,由于水性不佳,游不回岸了,于是他挥着手臂,大声求.救:“F1,F1!”