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

Этот пример показывает, как использовать корреляцию фазы в качестве предварительного шага для автоматической регистрации изображений. В этом процессе вы выполняете корреляцию фазы, с помощью 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');

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

| | |