Регистрация изображений с искажением проекции с помощью контрольных точек

В этом примере показано, как зарегистрировать два изображения путем выбора управляющих точек, общих для обоих изображений, и вывода геометрического преобразования, которое выравнивает управляющие точки.

Чтение изображений

Чтение изображения westconcordorthophoto.png в рабочую область. Это изображение является ортофото, которое уже было зарегистрировано на землю.

ortho = imread('westconcordorthophoto.png');
imshow(ortho)
text(size(ortho,2),size(ortho,1)+15, ...
    'Image courtesy of Massachusetts Executive Office of Environmental Affairs', ...
    'FontSize',7,'HorizontalAlignment','right');

Чтение изображения westconcordaerial.png в рабочую область. Это изображение было взято с самолета и искажается относительно ортофото. Поскольку незарегистрированное изображение было взято на расстоянии, а топография относительно плоская, вероятно, что большинство искажений проективно.

unregistered = imread('westconcordaerial.png');
imshow(unregistered)
text(size(unregistered,2),size(unregistered,1)+15, ...
    'Image courtesy of mPower3/Emerge', ...
    'FontSize',7,'HorizontalAlignment','right');

Выберите пары контрольных точек

Чтобы выбрать контрольные точки в интерактивном режиме, откройте инструмент «Выбор контрольной точки» при помощи cpselect функция. Контрольные точки являются ориентирами, которые можно найти на обоих изображениях, таких как перекресток дороги или естественная функция. Выберите по крайней мере четыре пары контрольных точек так, чтобы cpselect может подгонять проективное преобразование к управляющим точкам. После выбора соответствующих движущихся и фиксированных точек закройте инструмент, чтобы вернуться в рабочую область.

[mp,fp] = cpselect(unregistered,ortho,'Wait',true);

Вывод геометрического преобразования

Найдите параметры проективного преобразования, которое лучше всего выравнивает движущиеся и фиксированные точки при помощи fitgeotrans функция.

t = fitgeotrans(mp,fp,'projective');

Преобразование незарегистрированного изображения

Чтобы применить преобразование к незарегистрированному воздушному изображению, используйте imwarp функция. Укажите, что размер и положение преобразованного изображения совпадают с размером и положением орторектифицированного изображения с помощью аргумента пары "имя-значение" OutputView.

Rfixed = imref2d(size(ortho));
registered = imwarp(unregistered,t,'OutputView',Rfixed);

Увидеть результат регистрации путем наложения преобразованного изображения на исходный ортофото.

imshowpair(ortho,registered,'blend')

См. также

| | |

Похожие темы