I'm developing correlation filters based image recognition.
I implemented MACE correlation filter in matlab:
D = diag(mean(abs(X),2)); % inv(A) * B = A \ B XDX = ctranspose(X) * (D \ X); h = (D \ X) * (XDX \ u); H = reshape(h, size(I));
where X is the d.^2xN matrix of vectorized FFT2 transformed training images (images FFT2 transform spectra are vectorized by concatenating columns), u is the vector of image membership (1 for images to recognize and 0 for the rest of the samples), I is the dxd sample training image to reshape correlation filter h to H matrix.
R = ifftshift(ifft2(I.*conj(H)));
where I is the dxd test image zero mean and unit variance normalized and H is the trained correlation filter.
I trained one correlation filter on 61 training images from which there is just 1 image to recognize with 1 in vector u and remaining images with 0's in vector u.
However despite reported results in the papers on correlation filters where correlation plane output is in range 0 ... 1 my results are up to 10e-4.
Is there any normalization typically applied to scale correlation plane output?
Besides I found that without
conj(H) in the testing code there is no correlation peak for images to be recognized. I was unable to find in the papers that missing operator in the formula which I found at mathworks forum