Exhaustive Block Matching Algorithm
조회 수: 25 (최근 30일)
이전 댓글 표시
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
Jan
2012년 2월 1일
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".
채택된 답변
Qihan Gao
2021년 8월 29일
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
추가 답변 (3개)
Tuan Nguyen
2012년 2월 7일
댓글 수: 5
Walter Roberson
2021년 2월 10일
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
2017년 11월 22일
Hi, what is the arrow function at the very bottom? Also, is the code working or not? Thanks
댓글 수: 1
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!