matlab 利用中值滤波提取运动目标,去除背景
时间: 2023-06-16 14:04:16 浏览: 129
matlab用背景差分法提取出运动目标_再用边缘检测法对目标进行跟踪_matlab
5星 · 资源好评率100%
中值滤波可以有效地去除图像中的噪声,从而提取出图像中的运动目标。下面是利用中值滤波提取运动目标的步骤:
1. 读入视频帧序列,将其转换为灰度图像。
2. 对每一帧图像进行中值滤波,去除图像中的噪声。
3. 选择一帧图像作为背景图像,将其作为参考。
4. 对于每一帧图像,将其与背景图像进行比较,得到差分图像。
5. 对差分图像进行二值化处理,得到二值化图像。
6. 对二值化图像进行形态学处理,消除小的干扰区域,得到运动目标的二值化图像。
7. 在原始图像上将运动目标用矩形框标出。
下面是一份利用中值滤波提取运动目标的 Matlab 代码,供参考:
```matlab
% 读入视频帧序列
video = VideoReader('video.avi');
% 选择一帧作为背景图像
background = read(video, 1);
background = rgb2gray(background);
% 中值滤波窗口大小
windowSize = 5;
% 形态学处理窗口大小
se = strel('disk', 3);
% 阈值
threshold = 20;
% 读取所有帧
while hasFrame(video)
% 读取当前帧
frame = readFrame(video);
% 转换为灰度图像
frame = rgb2gray(frame);
% 中值滤波
frame = medfilt2(frame, [windowSize windowSize]);
% 差分图像
diff = abs(double(frame) - double(background));
% 二值化图像
binary = diff > threshold;
% 形态学处理
binary = imclose(binary, se);
binary = imfill(binary, 'holes');
binary = bwareaopen(binary, 50);
% 标记运动目标
stats = regionprops(binary, 'BoundingBox');
for i = 1:length(stats)
rectangle('Position', stats(i).BoundingBox, 'EdgeColor', 'r', 'LineWidth', 2);
end
% 更新背景图像
background = frame;
end
```
这份代码中,中值滤波使用了 5x5 的窗口大小,形态学处理使用了 3x3 的圆形窗口大小,阈值为 20,可以根据实际情况进行调整。
阅读全文