Используйте корреляцию фазы в качестве предварительно обрабатывающий шаг в регистрации

В этом примере показано, как использовать корреляцию фазы в качестве предварительного шага для автоматической регистрации изображений. В этом процессе вы выполняете корреляцию фазы, с помощью imregcorr, и затем передайте результат той регистрации как начальное условие основанной на оптимизации регистрации, с помощью imregister. Корреляция фазы и основанная на оптимизации регистрация являются дополнительными алгоритмами. Корреляция фазы хороша для нахождения грубого выравнивания, даже для сильно неправильно выровненных изображений. Основанная на оптимизации регистрация хороша для нахождения точного выравнивания, учитывая хорошее начальное условие.

Считайте изображение, которое будет ссылочным изображением в регистрации.

fixed = imread('cameraman.tif');
imshow(fixed);

Создайте незарегистрированное изображение путем преднамеренного искажения этого изображения с помощью вращения, изотропного масштабирования и сдвига в направлении Y.

theta = 170;
rot = [cosd(theta) sind(theta) 0;... 
    sind(theta) cosd(theta) 0;... 
    0 0 1]; 
sc = 2.3;
scale = [sc 0 0; 0 sc 0; 0 0 1]; 
sh = 0.5;
shear = [1 sh 0; 0 1 0; 0 0 1]; 

tform = affine2d(shear*scale*rot);
moving = imwarp(fixed,tform); 

Добавьте шум в изображение и отобразите результат.

moving = moving + uint8(10*rand(size(moving)));
imshow(moving)

Оцените регистрацию, требуемую принести эти два изображения в выравнивание. imregcorr возвращает affine2d объект, который задает преобразование.

tformEstimate = imregcorr(moving,fixed);

Применяйте предполагаемое геометрическое преобразование к неправильно выровненному изображению. Задайте 'OutputView' чтобы убедиться зарегистрированное изображение одного размера со ссылочным изображением. Отобразите оригинальное изображение и зарегистрированное изображение рядом друг с другом. Вы видите тот imregcorr сделал хорошее задание, обрабатывающее вращение и масштабирующее различия между изображениями. Зарегистрированное изображение, movingReg, очень близко к тому, чтобы быть выровненным с оригинальным изображением, fixed. Но некоторое неточное совмещение остается. imregcorr может обработать вращение и масштабировать искажения хорошо, но не сдвинуть искажение.

Rfixed = imref2d(size(fixed));
movingReg = imwarp(moving,tformEstimate,'OutputView',Rfixed);
imshowpair(fixed,movingReg,'montage');

Просмотрите выровненное изображение, наложенное на оригинальном изображении, с помощью imshowpair. В этом представлении, imshowpair использование окрашивает, чтобы подсветить области неточного совмещения.

imshowpair(fixed,movingReg,'falsecolor');

Чтобы закончить регистрацию, используйте imregister, передача предполагаемого преобразования, возвращенного imregcorr как начальное условие. imregister является более эффективным, если два изображения находятся примерно в выравнивании в начале операции. Преобразование оценивается imregcorr предоставляет эту информацию для imregister. Пример использует оптимизатор по умолчанию и метрические значения для регистрации двух изображений, взятых с тем же датчиком ('monomodal' ).

[optimizer, metric] = imregconfig('monomodal');
movingRegistered = imregister(moving, fixed,...
    'affine', optimizer, metric,'InitialTransformation',tformEstimate);

Отобразите результат этой регистрации. Обратите внимание на то, что imregister достиг очень точной регистрации, учитывая хорошее начальное условие, обеспеченное imregcorr.

imshowpair(fixed, movingRegistered,'Scaling','joint');

Смотрите также

| | |