function image_search1
	
	% leggi l'immagine
% 	a = double(imread('imm1.png'));
% 	a = double(imread('imm2.png'));
% 	a = double(imread('imm3.png'));
% 	a = double(imread('imm4.png'));
	a = double(imread('lena.png'));
% 	a = double(imread('audi.png'));

	if size(a,3) > 1
		a = 0.299*a(:,:,1)+0.114*a(:,:,2)+0.587*a(:,:,3);
	end
	[ar,ac] = size(a);
% 	a = a + 0.01*randn(ar,ac);
	
	% scegli l'intervallo da cercare
	br = 24;
	bc = 24;
	or = floor((ar-br)*rand);
	oc = floor((ac-bc)*rand);
	b = a(or+(1:br),oc+(1:bc));
% 	b = b + 10*randn(br,bc);
	fprintf('segmento da cercare: (%d,%d)-(%d,%d)\n',...
		or+1,oc+1,or+br,oc+bc);
	
	% visualizza l'immagine...
	subplot(2,2,1)
	imagesc(a,[0 255]);
	colormap gray
	axis image
	title('immagine')

	% ...e la regione da cercare
	subplot(2,2,2)
	imagesc(b,[0 255]);
	colormap gray
	axis image
	title('regione da cercare')
	
	% lavora con potenze di due
	nr = ar+br-1;
	nc = ac+bc-1;
	nr_pad = 2^ceil(log2(nr));
	nc_pad = 2^ceil(log2(nc));
	a_pad = zeros(nr_pad,nc_pad);
	a_pad(1:ar,1:ac) = a;
	b_pad = zeros(nr_pad,nc_pad);
	b_pad(1:br,1:bc) = b;
	
	% calcola la correlazione
	Cab = real(ifft2(fft2(a_pad).*conj(fft2(b_pad))));
	
	% calcola l'energia delle finestre di a
	a2_pad = a_pad.^2;
	mask = zeros(nr_pad,nc_pad);
	mask(1:br,1:bc) = 1;
	Ea = real(ifft2(fft2(a2_pad).*conj(fft2(mask))));
	
	% calcola la matrice delle distanze (attenzione che Eb è uno scalare)
	Eb = sum(b(:).^2);
	Dab = Ea + Eb - 2*Cab;
	
	% cerca il minimo nella matrice
	[row_min,row_pos]=min(Dab(1:ar-br,1:ac-bc));
	[min_val,col_pos]=min(row_min);
	oc_est = col_pos - 1;
	or_est = row_pos(col_pos) - 1;
	fprintf('minimo globale: %g @ (%d,%d)-(%d,%d)\n',...
		min_val,or_est+1,oc_est+1,or_est+br,oc_est+bc);
	
	% visualizza la metrica
	subplot(2,2,3)
	imagesc(Dab(1:ar-br,1:ac-bc))
	axis image
	title('metrica')
	
	% visualizza l'immagine con evidenziato il segmento individuato
	subplot(2,2,4)
	hold off
	imagesc(a)
	hold on
	plot(oc+0.5+[0,0,bc,bc,0],or+0.5+[0,br,br,0,0],'y');
	plot(oc_est+0.5+[0,0,bc,bc,0],or_est+0.5+[0,br,br,0,0],'r--');
	axis image
	title('regione originale e regione individuata')
end
