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