Укажите два изображения Используя пространственную ссылку, чтобы улучшить отображение

В этом примере показано, как использовать пространственные объекты привязки, чтобы изучить пространственные отношения между двумя изображениями в регистрации изображений и отобразить их эффективно. Этот пример приносит одно из изображений, названных moving отобразите, в выравнивание с другим изображением, названным fixed изображение.

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

fixed = imread('westconcordorthophoto.png');
moving = imread('westconcordaerial.png');

Отобразите движущееся (незарегистрированное) изображение.

iptsetpref('ImshowAxesVisible','on')
imshow(moving)
text(size(moving,2),size(moving,1)+30, ...
    'Image courtesy of mPower3/Emerge', ...
    'FontSize',7,'HorizontalAlignment','right');

Загрузите MAT-файл, который содержит предварительно выобранные контрольные точки для fixed и moving изображения и создают подгонку геометрического преобразования к контрольным точкам, с помощью fitgeotrans .

load westconcordpoints
tform = fitgeotrans(movingPoints, fixedPoints, 'projective');

Выполните преобразование, необходимое, чтобы указать moving отобразите с fixed отобразите, с помощью imwarp . Этот пример использует дополнительный 'FillValues' параметр, чтобы задать (белое) значение заливки, который поможет при отображении fixed отобразите по преобразованному moving отобразите, чтобы проверять регистрацию. Заметьте что полное содержимое геометрически преобразованного moving изображение присутствует, теперь названное registered . Также обратите внимание, что нет никаких пустых строк или столбцов.

registered = imwarp(moving, tform,'FillValues', 255);
figure, imshow(registered);

Наложите преобразованное изображение, registered , по fixed отобразите, с помощью imshowpair . Заметьте, как два изображения появляются misregistered. Это происходит потому что imshowpair принимает, что изображения находятся оба во внутренней системе координат по умолчанию. Следующие шаги обеспечивают два способа исправить эту проблему отображения.

figure, imshowpair(fixed,registered,'blend');

Ограничьте преобразованное изображение, registered , к одинаковому числу строк и столбцам и тем же пространственным пределам как fixed изображение. Это гарантирует, что зарегистрированное изображение кажется зарегистрированным в фиксированном изображении, но области зарегистрированного изображения, которое экстраполировало бы вне степени фиксированного изображения, отбрасываются. Для этого создайте пространственный объект привязки по умолчанию, который задает размер и местоположение fixed отобразите и используйте imwarp's 'OutputView' параметр, чтобы создать ограниченное передискретизируемое изображение registered1. Отобразите зарегистрированное изображение по фиксированному изображению. В этом представлении изображения, кажется, были указаны, но не все незарегистрированное изображение отображается.

Rfixed = imref2d(size(fixed));
registered1 = imwarp(moving,tform,'FillValues', 255,'OutputView',Rfixed);
figure, imshowpair(fixed,registered1,'blend');

Как альтернатива, используйте дополнительный imwarp синтаксис, который возвращает выходной параметр пространственный объект привязки, который указывает на положение полного преобразованного изображения в той же внутренней системе координат по умолчанию как fixed изображение. Отобразите зарегистрированное изображение по фиксированному изображению и обратите внимание что теперь полный registered изображение отображается.

[registered2, Rregistered] = imwarp(moving, tform,'FillValues', 255);
figure, imshowpair(fixed,Rfixed,registered2,Rregistered,'blend');

Очистка.

iptsetpref('ImshowAxesVisible','off')