Exhaustive Block Matching Algorithm
25 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hi all,
I'm trying to write the Exhaustive Block Matching Algorithm based on the pseudo-code written in this slide: http://inst.eecs.berkeley.edu/~ee290t/sp04/lectures/motion_estimation.pdf
I think I wrote my programme not correctly but don't know where I was wrong. Can anyone please help me? Thank you very much :(
2 commentaires
Jan
le 1 Fév 2012
It is very likely, that someone is assisting to solve the problems if you post the corresponding code and explain, what's going wrong. Currently the best answer is: "yes".
Réponse acceptée
Qihan Gao
le 29 Août 2021
Hi, a reply after nearly 10 years to the original question. Since I am learning this subject these days, I have modified the codes to get it work. Here are my modified codes.
%Extract the matrix of your image and doing rgb2ycbcr transformation
%Here we assume that the Y_ref and Y_predict are the Luminance plane matrix
%As in YCbCr/YUV dimension,
%Cb and Cr carries less information that human sensors hard to detect
%Y_ref is the original first frame
%Y_predict is the original second frame
%N is the macroblock size
%R is the radius of pixels of the searching window
%Y_esitimate is the new second frame that the function produces from
%original first frame
%SAD is Sum of Absolute Difference
%Reson of using SAD not MAD is considering the total arithmetic operations
%Using SAD can reduce the computional complexity comparing to calculating MAD
function [Y_estimate SAD_counter] = Exhaustive_Search(Y_ref,Y_predict,N,R)
%SAD operations conunter
SAD_counter = 0;
[height width] = size(Y_ref);
for i = 1:N:height-N+1
for j = 1:N:width-N+1
%initialisation of SAD_min, the maximum value is 1xN^2 (after scaling)
SAD_min = 1*N^2;
for m = -R:1:R
for n = -R:1:R
if ( i+m < 1 || i+m+N-1 > height || j+n < 1 || j+n+N-1 > width)
continue;
end
SAD=sum(abs(Y_predict(i:i+N-1,j:j+N-1)-Y_ref(i+m:i+m+N-1,j+n:j+n+N-1)),'all');
SAD_counter = SAD_counter+1;
if (SAD < SAD_min)
SAD_min = SAD; Y_estimate(i:i+N-1,j:j+N-1) = Y_ref(i+m:i+m+N-1,j+n:j+n+N-1);
end
end
end
end
end
0 commentaires
Plus de réponses (3)
Tuan Nguyen
le 7 Fév 2012
5 commentaires
Walter Roberson
le 10 Fév 2021
N is the block size. R is the search range. K is the current search location.
f1 is the first of the two blocks to be matched. f2 is the other block to be matched.
beppo
le 22 Nov 2017
Hi, what is the arrow function at the very bottom? Also, is the code working or not? Thanks
1 commentaire
Voir également
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!