exponenta event banner

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

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

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

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

Figure contains an axes. The axes contains an object of type image.

Создание незарегистрированного изображения путем преднамеренного искажения этого изображения с помощью поворота, изотропного масштабирования и сдвига в направлении 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)

Figure contains an axes. The axes contains an object of type image.

Оцените регистрацию, необходимую для приведения этих двух изображений в соответствие. 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');

Figure contains an axes. The axes contains an object of type image.

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

imshowpair(fixed,movingReg,'falsecolor');

Figure contains an axes. The axes contains an object of type image.

Для завершения регистрации используйте 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');

Figure contains an axes. The axes contains an object of type image.

См. также

| | |