exponenta event banner

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

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

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

Прочитать изображение 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')

См. также

| | |

Связанные темы