Этот пример показывает, как автоматически выровнять два изображения, которые отличаются вращением и изменением шкалы. Это тесно параллельно другому названному примеру, Находят Поворот изображения и Шкалу. Вместо того, чтобы использовать ручной подход, чтобы указать два изображения, это использует основанные на функции методы, найденные в Системе Компьютерного зрения Toolbox™, чтобы автоматизировать процесс регистрации.
В этом примере вы будете использовать detectSURFFeatures
и Системный объект vision.GeometricTransformEstimator
, чтобы восстановить угол поворота и масштабный коэффициент искаженного изображения. Вы затем преобразуете искаженное изображение, чтобы восстановить оригинальное изображение.
Принесите изображение в рабочую область.
original = imread('cameraman.tif'); imshow(original); text(size(original,2),size(original,1)+15, ... 'Image courtesy of Massachusetts Institute of Technology', ... 'FontSize',7,'HorizontalAlignment','right');
scale = 0.7; J = imresize(original, scale); % Try varying the scale factor. theta = 30; distorted = imrotate(J,theta); % Try varying the angle, theta. figure, imshow(distorted)
Можно экспериментировать путем варьирования шкалы и вращения входного изображения. Однако обратите внимание, что существует предел сумме, можно отличаться шкала, прежде чем анализатор не найдет достаточно функций.
Обнаружьте функции в обоих изображениях.
ptsOriginal = detectSURFFeatures(original); ptsDistorted = detectSURFFeatures(distorted);
Извлеките дескрипторы функции.
[featuresOriginal, validPtsOriginal] = extractFeatures(original, ptsOriginal); [featuresDistorted, validPtsDistorted] = extractFeatures(distorted, ptsDistorted);
Совпадайте с функциями при помощи их дескрипторов.
indexPairs = matchFeatures(featuresOriginal, featuresDistorted);
Получите местоположения соответствующих точек для каждого изображения.
matchedOriginal = validPtsOriginal(indexPairs(:,1)); matchedDistorted = validPtsDistorted(indexPairs(:,2));
Покажите соответствия точки. Заметьте присутствие выбросов.
figure;
showMatchedFeatures(original,distorted,matchedOriginal,matchedDistorted);
title('Putatively matched points (including outliers)');
Найдите преобразование, соответствующее соответствующим парам точки с помощью статистически устойчивого Демонстрационного Согласия M-средства-оценки (MSAC) алгоритм, который является вариантом алгоритма RANSAC. Это удаляет выбросы при вычислении матрицы преобразования. Можно видеть переменные результаты вычисления преобразования из-за случайной выборки, используемой алгоритмом MSAC.
[tform, inlierDistorted, inlierOriginal] = estimateGeometricTransform(... matchedDistorted, matchedOriginal, 'similarity');
Отобразите соответствие с парами точки, используемыми в вычислении матрицы преобразования.
figure; showMatchedFeatures(original,distorted, inlierOriginal, inlierDistorted); title('Matching points (inliers only)'); legend('ptsOriginal','ptsDistorted');
Используйте геометрическое преобразование, TFORM, чтобы восстановить шкалу и угол. Поскольку мы вычислили преобразование от искаженного до оригинального изображения, мы должны вычислить его инверсию, чтобы восстановить искажение.
Let sc = scale*cos(theta) Let ss = scale*sin(theta)
Then, Tinv = [sc -ss 0; ss sc 0; tx ty 1]
where tx and ty are x and y translations, respectively.
Вычислите обратную матрицу преобразования.
Tinv = tform.invert.T; ss = Tinv(2,1); sc = Tinv(1,1); scale_recovered = sqrt(ss*ss + sc*sc) theta_recovered = atan2(ss,sc)*180/pi
scale_recovered = single 0.7010 theta_recovered = single 30.2351
Восстановленные значения должны совпадать с вашей шкалой и угловыми значениями, выбранными на Шаге 2: Измените размер и Вращайте Изображение.
Восстановите оригинальное изображение путем преобразования искаженного изображения.
outputView = imref2d(size(original));
recovered = imwarp(distorted,tform,'OutputView',outputView);
Сравните recovered
с original
путем рассмотрения их бок о бок в монтаже.
figure, imshowpair(original,recovered,'montage')
recovered
(справа) качество изображения не соответствует, original
(слева) отображают из-за процесса искажения и восстановления. В частности, изображение, уменьшая потерю причин информации. Артефакты вокруг ребер происходят из-за ограниченной точности преобразования. Если необходимо было обнаружить больше точек на Шаге 4: Найдите, что Соответствие Показывает Между Изображениями, преобразование было бы более точным. Например, мы, возможно, использовали угловой детектор, detectFASTFeatures
, чтобы дополнить анализатор SURF, который находит блобы. Содержимое изображения и размер изображения также влияют на количество обнаруженных функций.
detectSURFFeatures
| estimateGeometricTransform
| extractFeatures
| imref2d
| imresize
| imrotate
| imwarp
| matchFeatures
| showMatchedFeatures