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