matlab将目标圈出来的,怎么用方框把已经提取出来的运动目标框出来,求修改

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

看看在这个程序上需要怎么加 谢谢各位大神了

3546c8f94fbd2f518df6f1624b444f7f.png

clear all

source = aviread('hall_monitor.AVI'); %读入原始视频

% -----------------------获取视频规格大小-----------------------

fr = source(1).cdata; %读取第一帧

fr_bw = rgb2gray(fr); %转换为灰度图

fr_size = size(fr); %获取视频大小

height = fr_size(1);

width = fr_size(2);

fg = zeros(height, width); %前景

bg_bw = zeros(height, width); %背景

% -----------------------设定高斯模型参数----------------------

C = 3; % 混合高斯模型个数

M = 0; % 背景高斯模型个数

D = 2.5; % 置信参数

alpha = 0.01; % 学习率(0-1之间)

thresh = 0.85; % 权值阈值

sd_init = 6; % 初始标准差

w = zeros(height,width,C); % 权值矩阵

mean = zeros(height,width,C); % 均值矩阵

sd = zeros(height,width,C); % 标准差矩阵

u_diff = zeros(height,width,C); % 差值矩阵

p = alpha/(1/C); % 参考学习率(alpha/w)

rank = zeros(1,C); % 优先级(w/sd)

B = 0; %权值累加值

% ----------------------初始化高斯模型参数---------------------

pixel_depth = 8; % 8-bit resolution

pixel_range = 2^pixel_depth -1; % pixel range (# of possible values)

for i=1:height

for j=1:width

for k=1:C

mean(i,j,k) = rand*pixel_range; % 初始化均值为255以内的随机值

w(i,j,k) = 1/C; % 初始化权值为1/C(权值相同)

sd(i,j,k) = sd_init; % 初始化标准差为sd_init

end

end

end

%---------------------模型匹配以及参数更新---------------------

for n = 1:length(source)

fr = source(n).cdata; % 读取帧

fr_bw = rgb2gray(fr); % 转换为灰度图

%计算优先级并排序

rank = w(i,j,:)./sd(i,j,:); % 优先级(w/sd)

temp = rank; % 中间矩阵

rank_ind = zeros(1,C); % 优先级顺序矩阵

%排序过程

for k = 1:C

[max_rank,max_rank_index] = max(temp);

rank_ind(max_rank_index) = k;

temp(max_rank_index) = 0;

end

% 计算差值矩阵,当前值与均值之差:diff=abs(I(x,y)-u)

for m=1:C

u_diff(:,:,m) = abs(double(fr_bw) - double(mean(:,:,m)));

end

% 更新高斯模型参数

for i=1:height

for j=1:width

weight = w(i,j,:); %记录初始权值,用于提取前景目标时的权值累加

match = 0; %设置匹配标志

match_index = 0; %设置匹配模型的位置

for k=1:C

if (abs(u_diff(i,j,k)) <= D*sd(i,j,k)) % 进行匹配

match = 1; % 发生匹配

match_index = rank_ind(k); % 匹配模型的位置

% 更新匹配高斯模型的参数(w,p,u,sd)

w(i,j,k) = (1-alpha)*w(i,j,k) + alpha;

p = alpha/w(i,j,k);

mean(i,j,k) = (1-p)*mean(i,j,k) + p*double(fr_bw(i,j));

sd(i,j,k) = sqrt((1-p)*(sd(i,j,k)^2) + p*((double(fr_bw(i,j)) - mean(i,j,k)))^2);

else % 未匹配的高斯模型

w(i,j,k) = (1-alpha)*w(i,j,k); % 仅更新权值(w减小)

end

end

% 没有发生匹配的高斯模型,则创建一个新的高斯模型代替权值最小的高斯模型

if (match == 0)

[min_w, min_w_index] = min(w(i,j,:)); %取权值最小的高斯模型

mean(i,j,min_w_index) = double(fr_bw(i,j)); %新高斯模型的均值取当前值

sd(i,j,min_w_index) = sd_init;

end

%计算权值累加值,匹配权值阈值thresh,并更新背景

B = 0; %权值累加值

M = 0;

bg_bw(i,j)=0; %背景

temp = rank_ind; %设置中间矩阵temp

while B<=thresh

[max_rank_ind,max_rank_ind_index] = min(temp); %取最大优先级(序数最小)

B = B+weight(max_rank_ind_index); %累加权值

bg_bw(i,j) = bg_bw(i,j)+ mean(i,j,max_rank_ind_index)*w(i,j,max_rank_ind_index); %更新背景

temp(max_rank_ind_index) = C+1;

end

M = max_rank_ind;

%------------------------提取前景目标-----------------------

%提取前景

k = 1;

fg(i,j) = 0;

while ((match == 0)&&(k<=M)) %与M个背景高斯模型进行匹配

index = 1;

while (rank_ind(index) ~= k)&&(index < C)

index = index+1;

end

if (abs(u_diff(i,j,index)) <= D*sd(i,j,index))

fg(i,j) = 0; %匹配,则该点为背景点

else

fg(i,j) = 255; %不匹配,该点为前景点

end

k = k+1;

end

end

end

imshow(fg);

drawnow

Mov1(n) = im2frame(uint8(fg),gray);

Mov2(n) = im2frame(uint8(bg_bw),gray);

end

figure(1),subplot(3,1,1),imshow(fr)

subplot(3,1,2),imshow(uint8(bg_bw))

subplot(3,1,3),imshow(uint8(fg))

movie2avi(Mov1,'mixture_of_gaussians_output','fps',10);

movie2avi(Mov2,'mixture_of_gaussians_background','fps',10);

clear source;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值