% Created by Majed El Helou (2017) % All rights reserved for EPFL. function [ I1mask, I2mask, patch_corr ] = corrAcrossPatches(I1,I2,patch_size,peroverlap) %corr_across_patches returns a map that shows the correlation between %patches of size patch_size in I1 and I2, with % overlap = peroverlap %if image size is not a multiple of patch_size, the remainder is ignored %if images have different sizes, the correlation is over their intersection ximage_size = min( size(I1,1), size(I2,1) ); yimage_size = min( size(I1,2), size(I2,2) ); xpatches_total = floor( ximage_size/patch_size ); ypatches_total = floor( yimage_size/patch_size ); patch_corr = zeros(xpatches_total, ypatches_total); if peroverlap == 0 for pix = 1:xpatches_total xi_image = (pix-1)*patch_size + 1; xf_image = xi_image + patch_size - 1; for piy = 1:ypatches_total yi_image = (piy-1)*patch_size + 1; yf_image = yi_image + patch_size - 1; patch_corr(pix,piy) = corr2( I1(xi_image:xf_image,yi_image:yf_image)... , I2(xi_image:xf_image,yi_image:yf_image) ); I1mask(xi_image:xf_image,yi_image:yf_image) = I1(xi_image:xf_image,yi_image:yf_image) > mean2(I1(xi_image:xf_image,yi_image:yf_image)); I2mask(xi_image:xf_image,yi_image:yf_image) = I2(xi_image:xf_image,yi_image:yf_image) > mean2(I2(xi_image:xf_image,yi_image:yf_image)); end end else I1mask=0; I2mask=0; pixoverlap = floor( patch_size * peroverlap / 100 ); % Initialize pix = 0; xf_image = pixoverlap; while true pix = pix + 1; % x index counter xi_image = xf_image + 1 - pixoverlap; xf_image = xi_image + patch_size - 1; if xf_image > ximage_size break; end % Initialize piy = 0; yf_image = pixoverlap; while true piy = piy + 1; % y index counter yi_image = yf_image + 1 - pixoverlap; yf_image = yi_image + patch_size - 1; if yf_image > yimage_size break; end patch_corr(pix,piy) = corr2( I1(xi_image:xf_image,yi_image:yf_image)... , I2(xi_image:xf_image,yi_image:yf_image) ); end end end