纯手工ViBe算法Demo,可以完整运行,很少使用循环计算,速度较快。适合调参数和修改算法使用,也可以直接用来检测现成的图像。有部分注释。
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3652 2017-03-28 16:58 ViBe_DEMO.m
文件 35783 2004-12-29 13:18 egtest02frame00000.jpg
文件 35868 2004-12-29 13:18 egtest02frame00001.jpg
文件 36376 2004-12-29 13:18 egtest02frame00002.jpg
文件 36376 2004-12-29 13:18 egtest02frame00003.jpg
文件 32299 2004-12-29 13:18 egtest02frame00004.jpg
文件 35674 2004-12-29 13:18 egtest02frame00005.jpg
文件 36004 2004-12-29 13:18 egtest02frame00006.jpg
文件 35325 2004-12-29 13:18 egtest02frame00007.jpg
文件 35379 2004-12-29 13:18 egtest02frame00008.jpg
文件 33709 2004-12-29 13:18 egtest02frame00009.jpg
文件 33736 2004-12-29 13:18 egtest02frame00010.jpg
文件 33736 2004-12-29 13:18 egtest02frame00011.jpg
文件 35932 2004-12-29 13:18 egtest02frame00012.jpg
文件 33533 2004-12-29 13:18 egtest02frame00013.jpg
文件 35188 2004-12-29 13:18 egtest02frame00014.jpg
文件 35806 2004-12-29 13:18 egtest02frame00015.jpg
文件 34872 2004-12-29 13:18 egtest02frame00016.jpg
文件 34872 2004-12-29 13:18 egtest02frame00017.jpg
文件 34793 2004-12-29 13:18 egtest02frame00018.jpg
文件 35207 2004-12-29 13:18 egtest02frame00019.jpg
文件 35207 2004-12-29 13:18 egtest02frame00020.jpg
文件 33280 2004-12-29 13:18 egtest02frame00021.jpg
文件 35258 2004-12-29 13:18 egtest02frame00022.jpg
文件 32130 2004-12-29 13:18 egtest02frame00023.jpg
文件 34699 2004-12-29 13:18 egtest02frame00024.jpg
文件 33150 2004-12-29 13:18 egtest02frame00025.jpg
文件 33150 2004-12-29 13:18 egtest02frame00026.jpg
文件 34429 2004-12-29 13:18 egtest02frame00027.jpg
文件 35674 2004-12-29 13:18 egtest02frame00028.jpg
............此处省略1276个文件信息
clc;
clear;
close all;
imgpath = sprintf(‘egtest02/frame%s.jpg‘ ‘00000‘);
D = dir(‘egtest02/*.jpg‘);
imgnum = length(D);
num_last = sprintf(‘0%d‘ imgnum-1);
img_first = imread(imgpath);
img_last = imread(sprintf(‘egtest02/frame%s.jpg‘ num_last));
numSample = 30; %每个像素点背景模型采样点数
thres = 40; %阈值
fresh_thres = 3; %背景更新阈值
sz = size(img_first);
nump = sz(11)*sz(12);
% 当计算第一帧时初始化所有像素点的背景模型ind1
ind1 = randi([18] [nump numSample]);
ind1 = uint8(ind1);
% 获得每个像素点的8邻域模型中像素点的实际坐标编号
ind_nh = [1:nump]‘;
ind_nh(:2) = ind_nh(:1)-sz(12)-1;
ind_nh(:3) = ind_nh(:1)-sz(12);
ind_nh(:4) = ind_nh(:1)-sz(12)+1;
ind_nh(:5) = ind_nh(:1)+1;
ind_nh(:6) = ind_nh(:1)+sz(12)+1;
ind_nh(:7) = ind_nh(:1)+sz(12);
ind_nh(:8) = ind_nh(:1)+sz(12)-1;
ind_nh(:9) = ind_nh(:1)-1;
ind_nh = uint32(ind_nh);
tt = find(ind_nh(:1)<=sz(12));
ind_nh(tt:) = [];
ind1(tt:) = [];
tt = find(ind_nh(:1)>sz(12)*(sz(11)-1));
ind_nh(tt:) = [];
ind1(tt:) = [];
tt = find(mod(ind_nh(:1)sz(12))==1);
ind_nh(tt:) = [];
ind1(tt:) = [];
tt = find(mod(ind_nh(:1)sz(12))==0);
ind_nh(tt:) = [];
ind1(tt:) = [];
for cc = 2:imgnum
tic;
result = zeros(sz(11) sz(12));
img0 = imread(sprintf(‘egtest02/%s‘ D(cc-11).name));
img1 = imread(sprintf(‘egtest02/%s‘ D(cc1).name));
figure(1)
imshow(img0);
figure(2)
img_diff = img0-img1;
imshow(img_diff);
sz = size(img0);
l1 = reshape(img0(::1) sz(11) sz(12));
l2 = reshape(img0(::2) sz(11) sz(12));
l3 = reshape(img0(::3) sz(11) sz(12));
l11 = reshape(img1(::1) sz(11) sz(12));
l22 = reshape(img1(::2) sz(11) sz(12));
l33 = reshape(img1(::3) sz(11) sz(12));
dist = sqrt((double(l1)-double(l11)).^2+(double(l2)-double(l22)).^2+(double(l3)-double(l33)).^2);
% 计算每个像素点两帧之间的RGB距离
cdist = reshape(dist‘ sz(11)*sz(12) 1);
% 确定每个像素的背景模型中的实际像素编号 实际修正ind1这个矩阵
indtt = int16(ind1);
indtt(indtt==1) = -sz(12)-1;
indtt(indtt==2) = -sz(12);
indtt(indtt==3) = -sz(12)+1;
indtt(indtt==5) = sz(12)+1;
indtt(indtt==6) = sz(12);
indtt(indtt==7) = sz(12)-1;
indtt(indtt==4) = 1;
indtt(indtt==8) = -1;
ind_nht = double(ind_nh(:1))*ones(1numSample);
ind_nht = uint32(ind_nht);
ind_nht = double(ind_nht)+double(indtt);
ind_nht = uint32(ind_nht);
Bc_ind = [ind_nh(:1) ind_nht];
% 比较每个像素点的背景模型
Dist_ind = zeros(size(Bc_ind1) numSample);
Dist_ind(:1:numSample) = cdist(Bc_ind(:2:(numSample+1)));
Dist_ind(:1:numSample) = Dist_ind(:1:numSample)-thres;
for i = 1:numSample
Dist_ind(Dist_ind(:i)>=0 i) = 0; %如果1的数量小于等于阈值 视为前景点
Dist_ind(Dist_ind(:i)<0 i) = 1; %如果1的数量大于阈值 则视为该像素为背景点 同时更新该像素的背景模型
end
mk_ind = sum(Dist_ind‘);
mk_ind = mk_ind‘;
result = ones(size(ind11) 1);
ind_refresh = find(mk_ind>fresh_thres);
result(in
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3652 2017-03-28 16:58 ViBe_DEMO.m
文件 35783 2004-12-29 13:18 egtest02fr
文件 35868 2004-12-29 13:18 egtest02fr
文件 36376 2004-12-29 13:18 egtest02fr
文件 36376 2004-12-29 13:18 egtest02fr
文件 32299 2004-12-29 13:18 egtest02fr
文件 35674 2004-12-29 13:18 egtest02fr
文件 36004 2004-12-29 13:18 egtest02fr
文件 35325 2004-12-29 13:18 egtest02fr
文件 35379 2004-12-29 13:18 egtest02fr
文件 33709 2004-12-29 13:18 egtest02fr
文件 33736 2004-12-29 13:18 egtest02fr
文件 33736 2004-12-29 13:18 egtest02fr
文件 35932 2004-12-29 13:18 egtest02fr
文件 33533 2004-12-29 13:18 egtest02fr
文件 35188 2004-12-29 13:18 egtest02fr
文件 35806 2004-12-29 13:18 egtest02fr
文件 34872 2004-12-29 13:18 egtest02fr
文件 34872 2004-12-29 13:18 egtest02fr
文件 34793 2004-12-29 13:18 egtest02fr
文件 35207 2004-12-29 13:18 egtest02fr
文件 35207 2004-12-29 13:18 egtest02fr
文件 33280 2004-12-29 13:18 egtest02fr
文件 35258 2004-12-29 13:18 egtest02fr
文件 32130 2004-12-29 13:18 egtest02fr
文件 34699 2004-12-29 13:18 egtest02fr
文件 33150 2004-12-29 13:18 egtest02fr
文件 33150 2004-12-29 13:18 egtest02fr
文件 34429 2004-12-29 13:18 egtest02fr
文件 35674 2004-12-29 13:18 egtest02fr
............此处省略1276个文件信息
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)