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

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

См. также

| | |