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

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