MATLAB中文论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 13563|回复: 67|关注: 0

视频图像差分检测

  [复制链接]

83

主题

3392

帖子

63

最佳答案
  • 关注者: 188
发表于 2011-8-20 16:39:37 | 显示全部楼层 |阅读模式

简介

视频图像序列处理方法中,差分算法以其高效性、简便性应用广泛。这里结合广大会员的讨论给出应用实例,并给出实验结果。

代码


  1. % By lyqmath @ Matlab中文论坛
  2. clc; clear all; close all;
  3. % 原始视频
  4. targetavi = 'traffic.avi';
  5. % 检测结果视频
  6. resultavi = 'c:\\result.avi';
  7. %% 读取视频
  8. mov = mmreader(targetavi);
  9. fnum = mov.NumberOfFrames;
  10. %% 建立结果视频
  11. aviobj = avifile(resultavi);
  12. aviobj.Quality = 100;
  13. aviobj.Fps = 25;
  14. aviobj.compression = 'Indeo5';
  15. %% 帧间差分法
  16. figure(1);
  17. for i = 2 : fnum
  18.     x = read(mov, i-1);
  19.     y = read(mov, i);
  20.     subplot(1, 2, 1); imshow(x, []); title(sprintf('第%d帧视频,By lyqmath', i-1), 'FontWeight', 'Bold', 'Color', 'r');
  21.     % 灰度化
  22.     if ndims(x) == 3
  23.         m = rgb2gray(x);
  24.     else
  25.         m = x;
  26.     end
  27.     if ndims(y) == 3
  28.         n = rgb2gray(y);
  29.     else
  30.         n = y;
  31.     end
  32.     % 中值滤波
  33.     m = medfilt2(m);
  34.     n = medfilt2(n);
  35.     % 数据类型转换
  36.     q = im2double(n);
  37.     w = im2double(m);
  38.     % 差分
  39.     c = q-w;
  40.     % 阈值,此值可以调节
  41.     t = 40/256;
  42.     % 阈值分割
  43.     c(abs(c)>=t)=255;
  44.     c(abs(c)<t) = 0;
  45.     c = logical(c);
  46.     x1 = x(:, :, 1); x2 = x(:, :, 2); x3 = x(:, :, 3);
  47.     x1(c) = 255; x2(c) = 0; x3(c) = 0;
  48.     xc = cat(3, x1, x2, x3);
  49.     subplot(1, 2, 2); imshow(xc, []); title(sprintf('第%d帧视频识别结果,By lyqmath', i-1), 'FontWeight', 'Bold', 'Color', 'r');
  50.     f = getframe(gcf);
  51.     f = frame2im(f);
  52.     % 生成视频
  53.     aviobj = addframe(aviobj, f);
  54. end
  55. %% 关闭视频句柄
  56. aviobj = close(aviobj);

复制代码


结果

ce1.gif
ce2.gif

新手

5 麦片

财富积分


050


2

主题

40

帖子

0

最佳答案
发表于 2011-8-22 11:24:46 | 显示全部楼层
lz真好人!谢了

新手

9 麦片

财富积分


050


36

主题

70

帖子

0

最佳答案
  • 关注者: 1
发表于 2011-8-22 19:19:04 | 显示全部楼层

Dear 大大

請問讀取2張RGB的照片,要將它轉成灰階做其他處理,要怎麼壓縮照片的大小?

新手

5 麦片

财富积分


050


10

主题

79

帖子

0

最佳答案
发表于 2011-8-22 19:45:44 | 显示全部楼层
:lol 真好人!谢了

新手

5 麦片

财富积分


050


8

主题

79

帖子

0

最佳答案
发表于 2011-8-23 10:01:33 | 显示全部楼层
顶!!!!!!

新手

5 麦片

财富积分


050


8

主题

79

帖子

0

最佳答案
发表于 2011-8-23 16:03:00 | 显示全部楼层

这是我运行改程序出现的错误,求助!!

??? Error using ==> avifile.set>setCompression at 130
Indeo codecs are not supported in this version of Windows.  You must specify a different codec.
See Mathworks Technical Solution 1-4G50RI for more information.

Error in ==> avifile.set at 43
    obj = feval(paramSetFcns{match},obj,values{i});

Error in ==> avifile.subsasgn at 14
  obj = set(obj,param,value);

新手

5 麦片

财富积分


050


0

主题

40

帖子

0

最佳答案
发表于 2011-8-23 17:34:59 | 显示全部楼层
楼主真好
最近刚好要写关于运动目标检测的文章
但是matlab不熟悉
真是及时雨啊

83

主题

3392

帖子

63

最佳答案
  • 关注者: 188
 楼主| 发表于 2011-8-23 17:53:14 | 显示全部楼层
2#:可以用rgb2gray(图像矩阵)来转换成灰度图像,imresize来进行图像尺寸变化。
6#:可否到matlab2011a上试一下,我这边运行没有问题的。

新手

9 麦片

财富积分


050


36

主题

70

帖子

0

最佳答案
  • 关注者: 1
发表于 2011-8-23 19:15:36 | 显示全部楼层

RGB轉yCbCr

Dear 大大:
這張照片是4000*3000畫素的圖,發生的錯誤,可以幫忙看一下這是為什麼錯誤嗎?如果我用100*100畫素的圖就不會出錯。搞不懂~嗚嗚~
這是我的程式
clear, close all
I1=imread('IMG_0220.jpg');
imgrgb3=rgb2ycbcr(I1);
y=imgrgb3(:,:,1);
cb=imgrgb3(:,:,2);
cr=imgrgb3(:,:,3);
----------------------------
以下是我錯誤的訊息
??? Error using ==> /
Out of memory. Type HELP MEMORY for your options.

Error in ==> C:\MATLAB6p5\toolbox\images\images\im2double.m
On line 37  ==>           d = double(img)/255;

Error in ==> C:\MATLAB6p5\toolbox\images\images\rgb2ycbcr.m
On line 41  ==> rgb = im2double(in);

Error in ==> C:\MATLAB6p5\work\RGB1.m
On line 3  ==> imgrgb3=rgb2ycbcr(I1);

新手

5 麦片

财富积分


050


0

主题

5

帖子

0

最佳答案
发表于 2011-8-27 21:03:21 | 显示全部楼层
太谢谢楼主了,我调整了一个参数就运行了。再次感谢楼主
您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系我们|版权保护|小黑屋|Archiver|手机版|MATLAB中文论坛 ( 苏ICP备08100737号

GMT+8, 2017-1-23 22:33 , Processed in 0.269503 second(s), 89 queries , Xcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表