。。。

 clc,clear;
% 读入视频文件到pixels
video = 'data.avi';
avi = aviread(video);
pixels = double(cat(4,avi(1:2:end).cdata)) / 255;
clear avi;
% 读取第一帧图片和最后一帧图片做差分,得到运动目标
% 因为第一帧和最后一帧目标互不重叠,所以暂时这样用
[d1 d2 d3 d4] = size(pixels);
p1 = pixels(:,:,:,1);
p2 = pixels(:,:,:,d4);
% 彩色差分
d = imabsdiff(p2, p1);
figure
imshow(d)
bw = im2bw(d, 0.05);
imshow(bw)
 % 灰度差分
gp1 = (rgb2gray(p1));
gp2 = (rgb2gray(p2));
gd = imabsdiff(gp2, gp1);
figure
imshow(gd)
gbw = im2bw(gd, 0.05);
imshow(gbw)

 % 使用膨胀和腐蚀的组合消除噪点
% 开运算和闭运算组合能非常有效的消除噪声
se = strel('disk', 3);
obw = imopen(bw, se);
cbw = imclose(obw, se);
figure
imshow(cbw);
% 使用中值滤波去除噪声
mbw = medfilt2(bw, [11 11]);
figure
imshow(mbw);
%使用BW图像在原图中提取出目标
[label, num] = bwlabel(mbw); % 标记连通区域
imshow(label2rgb(label)); % 按不同颜色显示连同区域
%设定阈值 保留目标
 sbw = bwselect(mbw);    % 使用bwselect选择需要连通区域,双击得到
imshow(sbw);
 
% 在此例选择了最后一帧的目标连通区,然后使用sbw和p2得到目标
obj(:, :, 1) = p2(:, :, 1) .* sbw;
obj(:, :, 2) = p2(:, :, 2) .* sbw;
obj(:, :, 3) = p2(:, :, 3) .* sbw;
imshow(obj);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值