matlab三幀差分算法:提取視頻中的運動目標(去背景噪聲)

matlab三幀差分算法:提取視頻中的運動目標(去背景噪聲)

matlab三幀差分算法:提取視頻中的運動目標(去背景噪聲)

matlab三幀差分算法:提取視頻中的運動目標(去背景噪聲)

matlab三幀差分算法:提取視頻中的運動目標(去背景噪聲)

matlab三幀差分算法:提取視頻中的運動目標(去背景噪聲)

源代碼:依然是AVi格式的視頻

clc; clear all; close all;

% 原始視頻

[file_name,pname] = uigetfile('*.avi','Select the M-file');

% file_name = 'campus5.avi'; %視頻所在文件夾

file_name=[pname file_name];

mov = VideoReader(file_name);

%mov=mmreader(targetavi);

fnum = mov.NumberOfFrames;

% fnum=size(mov,2);

%建立結果視頻

two_video= VideoWriter('sanzhen.avi'); %所轉換成的視頻名稱

writerFrames = fnum; %視頻幀數

open(two_video);

% aviobj = VideoWriter(resultavi);

% aviobj.Quality = 100;

%aviobj.Fps = 25;%每秒讀取25幀

%aviobj.compression='Indeo5';

%aviobj.compression='None';

%幀間差分法

for i=2:fnum-1

x=read(mov, i-1);

y=read(mov, i);

z=read(mov, i+1);

subplot(2, 2, 1); imshow(x, []); title(sprintf('第%d幀視頻', i-1), 'FontWeight', 'Bold', 'Color', 'r');

sigma = 0.8;

gausFilter = fspecial('gaussian',[5 5],sigma);

x = imfilter(x,gausFilter,'replicate');

y = imfilter(y,gausFilter,'replicate');

z = imfilter(z,gausFilter,'replicate');

m=rgb2gray(x);

m=medfilt2(m);

n=rgb2gray(y);

n=medfilt2(n);

o=rgb2gray(z);

o=medfilt2(o);

q=im2double(n);

w=im2double(m);

p=im2double(o);

c=q-w;%%前兩幀差分

b=p-q;%%後兩幀差分

t=18; %%閾值,此值可以調節

t=t/256;%%轉化為double型數據

k=find(abs(c)>=t);%%find函數作用是找到圖c中的值大於t的點座標

d=find(abs(b)>=t);%%find函數作用是找到圖b中的值大於t的點座標

c(k)=255;%%二值化的一

b(d)=255;

k=find(abs(c)

d=find(abs(b)

c(k)=0;%%二值化的零

b(d)=0;

f=c&b;

subplot(2, 2, 2); imshow(f, []); title(sprintf('第%d幀二值識別結果', i-1), 'FontWeight', 'Bold', 'Color', 'r');

se90 = strel('line',7,90); % 第一個結構元素線型90度

se0 = strel('line',6,0); % 第二個結構元素線型0度

out = imdilate(f, [se90 se0]); % 膨脹前景圖

se = strel('disk',5); % 第二個結構元素

out = imopen(out,se); % 開運算去除噪點

out = imclose(out,se);

subplot(2, 2, 3); imshow(out, []); title(sprintf('第%d幀優化識別結果', i-1), 'FontWeight', 'Bold', 'Color', 'r');

out=~out;

x1 = x(:, :, 1); x2 = x(:, :, 2); x3 = x(:, :, 3);

x1(out) = 0; x2(out) = 0; x3(out) = 0;

xc = cat(3, x1, x2, x3);

subplot(2, 2, 4); imshow(xc, []); title(sprintf('第%d幀視頻捕捉結果', i-1), 'FontWeight', 'Bold', 'Color', 'r');

% imshow(f);

writeVideo(two_video, xc);

% adata=cat(3,f,f,f);%%灰度圖像生成視頻必加此句

% aviobj = addframe(aviobj,adata);%%生成視頻

% hold on;

% drawnow;

% hold off;

end

close(two_video);

%aviobj=close(aviobj);


分享到:


相關文章: