BmotionEstES.m
上传用户:cxsjwj
上传日期:2022-08-09
资源大小:34k
文件大小:3k
源码类别:

matlab例程

开发平台:

Matlab

  1. % Computes motion vectors using exhaustive search method
  2. %
  3. % Input
  4. %   imgP : The image for which we want to find motion vectors
  5. %   imgI : The reference image
  6. %   mbSize : Size of the macroblock
  7. %   p : Search parameter  (read literature to find what this means)
  8. %
  9. % Ouput
  10. %   motionVect : the motion vectors for each integral macroblock in imgP
  11. %   EScomputations: The average number of points searched for a macroblock
  12. %
  13. % Written by Aroh Barjatya
  14. function [motionVect,zeroMatrixCount] = BmotionEstES(imgP, imgI, mbSize, p)
  15. [row col]=size(imgP)
  16. vectors = zeros(3,row*col/mbSize^2);
  17. costs = ones(2*p + 1, 2*p +1) * 65537;
  18. zeroMatrixCount=0;
  19. %computations = 0;
  20. % we start off from the top left of the image
  21. % we will walk in steps of mbSize
  22. % for every marcoblock that we look at we will look for
  23. % a close match p pixels on the left, right, top and bottom of it
  24. mbCount = 1;
  25. for i = 1 : mbSize : row-mbSize+1
  26.     for j = 1 : mbSize : col-mbSize+1
  27.         minCost1=65537;
  28.         % the exhaustive search starts here
  29.         % we will evaluate cost for  (2p + 1) blocks vertically
  30.         % and (2p + 1) blocks horizontaly
  31.         % m is row(vertical) index
  32.         % n is col(horizontal) index
  33.         % this means we are scanning in raster order
  34.         
  35.         for m = -p : p        
  36.             for n = -p : p
  37.                 refBlkVer = i + m;   % row/Vert co-ordinate for ref block
  38.                 refBlkHor = j + n;   % col/Horizontal co-ordinate
  39.                 if ( refBlkVer < 1 || refBlkVer+mbSize-1 > row || refBlkHor < 1 || refBlkHor+mbSize-1 > col)
  40.                     continue;
  41.                 end
  42.                 costs(m+p+1,n+p+1) = costFuncMAD(imgP(i:i+mbSize-1,j:j+mbSize-1), imgI(refBlkVer:refBlkVer+mbSize-1, refBlkHor:refBlkHor+mbSize-1), mbSize);
  43.                 %computations = computations + 1;
  44.                 
  45.                 if costs(m+p+1,n+p+1) < minCost1
  46.                     minCost=costs(m+p+1,n+p+1);
  47.                     storeVer=refBlkVer;
  48.                     storeHor=refBlkHor;
  49.                     
  50.                 end
  51.                 
  52.             end
  53.         end
  54.         
  55.         % Now we find the vector where the cost is minimum
  56.         % and store it ... this is what will be passed back.
  57.         %minCost
  58.         %[dx, dy, min] = minCost(costs); % finds which macroblock in imgI gave us min Cost
  59.         if minCost1 <= 20
  60.             diffMatrix(i:i+mbSize-1,j:j+mbSize-1)=0;
  61.             zeroMatrixCount=zeroMatrixCount+1;
  62.             vectors(1,mbCount) = 0;    % row co-ordinate for the vector
  63.             vectors(2,mbCount) = 0;    % col co-ordinate for the vector
  64.         end
  65.         if minCost1 >20
  66.             diffMatrix(i:i+mbSize-1,j:j+mbSize-1)=abs(imgP(i:i+mbSize-1,j:j+mbSize-1)- imgI(storeVer:storeVer+mbSize-1, storeHor:storeHor+mbSize-1));
  67.             vectors(1,mbCount) = storeHor;    % row co-ordinate for the vector
  68.             vectors(2,mbCount) = storeVer;    % col co-ordinate for the vector
  69.         end
  70.         %vectors(3,min);
  71.         mbCount = mbCount + 1;
  72.         costs = ones(2*p + 1, 2*p +1) * 65537;
  73.     end
  74. end
  75. motionVect = vectors;
  76. %EScomputations = computations/(mbCount - 1);
  77.