低秩矩阵的应用--背景建模

背景建模是从拍摄的视频中分离出背景和前景。

由于背景的视频基本是不变的,所以如果把每帧当做一个矩阵的一列那么,矩阵是低秩的,所以低秩矩阵的恢复来恢复出背景。

今天主要完成了,在自己的数据库让进行背景和前景的分离。下面为主要步骤:

1.从马毅的实验室网址下载RPCA求解的代码http://perception.csl.illinois.edu/matrix-rank/introduction.html

2.给出的接口是[A_hat E_hat iter] = inexact_alm_rpca(D, lambda, tol, maxIter)

所以明确目标:D是我们的视频中的每一帧,A_hat 是我们估计的背景,E_hat是前景。

RPCA解决的问题是



  1. clc;  
  2. clear;  
  3.   
  4. %% this to read avi by using mmread to get every frame  
  5. video = VideoReader('E:\FFOutput\test.avi');  
  6. nFrames = video.NumberOfFrames;   %得到帧数  
  7. H = video.Height;     %得到高度  
  8. W = video.Width;      %得到宽度  
  9. Rate = video.FrameRate;  
  10. Cal_FrameN=300;  
  11. % Preallocate movie structure.  
  12. mov(1:Cal_FrameN) = struct('cdata',zeros(H,W,3,'uint8'),'colormap',[]);  
  13.   
  14.   
  15. %read one frame every time  
  16. for i = 1:Cal_FrameN  
  17.     mov(i).cdata = read(video,i);  
  18.     P = mov(i).cdata;  
  19.     double_P=im2double(P);  
  20.     %imshow( double_P),title('原始图片3');  
  21.     Frame=rgb2gray( double_P);%当前灰度帧  
  22.     %下采样  
  23.     Down_Frame=Frame(2:4:H,2:4:W);  
  24.     M(:, i) = Down_Frame(:);  
  25.    %  disp('当前播帧数:'),disp(i);  
  26.     % imshow(P),title('原始图片');  
  27.        
  28.   
  29. %     P2=rgb2gray(P);  
  30.   
  31.    
  32. end  
  33.    
  34. [A_hat, E_hat, iter]=inexact_alm_rpca(M,0.006);  
  35. A=reshape(A_hat(:,200), size(Down_Frame));  
  36. E=reshape(E_hat(:,200), size(Down_Frame));  
  37. D_real=reshape(M(:,200), size(Down_Frame));  
  38. figure;  
  39. imshow(D_real),title('原始图片');  
  40. figure;  
  41. imshow(A),title('恢复图片');  
  42. figure;  
  43. imshow(abs(E)),title('错误图片');  


因为是MATLAB的初学者所以遇到了两个问题:

A.必须对读取的图像做double_P=im2double(P);处理不然会出现

错误使用  * 
MTIMES 不完全支持整数类。至少有一个输入必须为标量。
要按元素进行 TIMES 计算,请改用 TIMES (.*)。


出错 lanbpro (line 298)
      r = At*U(:,1);


出错 lansvd (line 209)
    [U,B,V,p,ierr,w] = lanbpro(A,j,p,options,U,B,V,anorm);


出错 inexact_alm_rpca (line 53)
norm_two = lansvd(Y, 1, 'L');


出错 background (line 36)
[A_hat, E_hat, iter]=inexact_alm_rpca(M,0.006);

B在显示错误图片时需要做abs绝对值处理,不然是全黑的图片,不能看到前景图像。

C.最后一个也非常重要lumada值为1/(根号m).m为一张图片像素点的个数

D还有一个问题就是原图片很到,直接做会有内存不够的问题,所以进行了下采样。


实验结果:

= +
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值