图片区域帧差法识别物体_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!”

posted @ 2013-04-29 14:04  xinyuyuanm  阅读(3516)  评论(2编辑  收藏  举报