2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 fft и регистрация изображения через оптимизацию
Сообщение12.10.2012, 15:30 
пытаюсь сделать регистрацию изображения через фазовую корреляцию, для этого задаю параметры перспективного преобразования и загоняю это всё в минимизатор.

почему то не работает, когда пытаюсь исказить изображение и сравнить с не искажённым, чтобы проверить точность.

минимизатор выдает [1 0 0 1 0 0] - что соответствует исходному не искажённому изображению.
возможно дело именно в нём.

ниже код на матлабе с комментариями.

main.m

Цитата:
global model;
global scene;

%загружаем изображения
scene = imread('001_001.tif');
%тестовое искажение формат m11 m12 m21 m22 m31 m32 потом добавим не изменяемые m13=0 m23=0 m33=1
H= [0.95 -0.05 0.0000 1.0000 -0.0000 -0.0000];% протестируем с известным искажением это позволит определить точность
model=warp_im(scene,H);

%m11 m12 m21 m22 m31 m32
init_sol= [1 0 0 1 0 0]; %начальное приближение и есть само изображение

%надо еще подумать над настройкой парамтеров
opts= optimset('Algorithm','interior-point','MaxFunEvals',5000,'MaxIter',5000,'TolFun',1e-6,'TolX',1e-10);

problem= createOptimProblem('fmincon','objective','compute_NCC','x0',init_sol,'options',opts);

gs= GlobalSearch;
[x,f]= run(gs,problem)
param=x;





compute_NCC.m

Цитата:
function peak = compute_NCC(param)

global scene;
global model;

img= warp_im(model,param);

%возвращает изображения дополненные нулями
sz1= size(scene); % y x размеры
sz2= size(img);
sz= abs(sz2-sz1);
pad_im1=scene;pad_im2=img;
if(sz1(1)>sz2(1))%y
pad_im2= padarray(img,[sz(1),0],'post');
else
pad_im1= padarray(scene,[sz(1),0],'post');
end;
if(sz1(2)>sz2(2))%x
pad_im2= padarray(pad_im2,[0,sz(2)],'post');
else
pad_im1= padarray(pad_im1,[0,sz(2)],'post');
end;

FFT1 = fftshift(fft2(pad_im1));
FFT2 = fftshift(fft2(pad_im2));

FFT = FFT1.*conj(FFT2);
FFT = FFT./abs(FFT);

mag = (ifft2(FFT));

peak= -abs(max(max(mag))) % минус потому что минимизируем




warp_im.m

Цитата:
function out = warp_im(img,param)
%преобразуем к матрице гомографии 3х3 добавляя неизменяемые элементы
param=[param(1:2),0,param(3:4),0,param(5:6),1]
H=reshape(param,3,3)'

tform = maketform('projective',H');
out= imtransform(img,tform);

 
 
 
 Re: fft и регистрация изображения через оптимизацию
Сообщение15.10.2012, 11:56 
на самом деле хотелось бы даже понять, прав ли я хотя бы концептуально.

 
 
 [ Сообщений: 2 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group