exponenta event banner

affine2d

2-D аффинное геометрическое преобразование

Описание

Один affine2d объект хранит информацию о 2-D аффинном геометрическом преобразовании и обеспечивает возможность прямого и обратного преобразований.

Создание

Можно создать affine2d объект с использованием следующих методов:

  • imregtform - Оценка геометрического преобразования, которое сопоставляет движущееся изображение фиксированному изображению с помощью оптимизации подобия.

  • imregcorr - Оценка геометрического преобразования, которое сопоставляет движущееся изображение фиксированному изображению с помощью фазовой корреляции.

  • fitgeotrans - Оценка геометрического преобразования, отображающего пары управляющих точек между двумя изображениями.

  • randomAffine2d - Создайте рандомизированное 2-е аффинное преобразование.

  • affine2d функция, описанная здесь.

Описание

tform = affine2d создает affine2d с параметрами свойств по умолчанию, соответствующими преобразованию идентификаторов.

пример

tform = affine2d(T) устанавливает свойство T в качестве указанной допустимой матрицы аффинного преобразования.

Свойства

развернуть все

Прямое 2-D аффинное преобразование, указанное как неингулярная числовая матрица 3 на 3.

Матрица T использует соглашение:

[x y 1] = [u v 1] * T

где T имеет вид:

 [a b 0;
  c d 0;
  e f 1];

Значение по умолчанию T - преобразование идентичности.

Типы данных: double | single

Размерность геометрического преобразования как для входных, так и для выходных точек, заданная как значение 2.

Функции объекта

invertИнвертировать геометрическое преобразование
isRigidОпределить, является ли преобразование жестким
isSimilarityОпределить, является ли преобразование преобразованием подобия
isTranslationОпределить, является ли преобразование чистым переводом
outputLimitsНайти выходные пространственные пределы, заданные входными пространственными пределами
transformPointsForwardПрименение прямого геометрического преобразования
transformPointsInverseПрименение обратного геометрического преобразования

Примеры

свернуть все

Создание affine2d объект, определяющий поворот на 30 градусов в направлении против часовой стрелки вокруг начала координат.

theta = 30;
tform = affine2d([ ...
    cosd(theta) sind(theta) 0;...
    -sind(theta) cosd(theta) 0; ...
    0 0 1])
tform = 
  affine2d with properties:

                 T: [3x3 double]
    Dimensionality: 2

Примените прямое геометрическое преобразование к точке (10,0).

[x,y] = transformPointsForward(tform,10,0)
x = 8.6603
y = 5

Проверьте преобразование, выведя на график исходную точку (синим цветом) и преобразованную точку (красным цветом).

plot(10,0,'bo',x,y,'ro')
axis([0 12 0 12])
axis square

Figure contains an axes. The axes contains 2 objects of type line.

Чтение и отображение изображения.

I = imread('kobi.png');
imshow(I)

Figure contains an axes. The axes contains an object of type image.

Создание affine2d объект преобразования, который вращает изображения. randomAffine2d функция выбирает угол поворота случайным образом из непрерывного равномерного распределения в пределах интервала [35, 55] градусов.

tform1 = randomAffine2d('Rotation',[35 55]);

Поверните изображение и отобразите результат.

J = imwarp(I,tform1);
imshow(J)

Figure contains an axes. The axes contains an object of type image.

Объект преобразования, tform1, поворачивает все изображения на одну и ту же величину. Чтобы повернуть изображение на другую случайно выбранную величину, создайте новое affine2d объект преобразования.

tform2 = randomAffine2d('Rotation',[-10 10]);
J2 = imwarp(I,tform2);
imshow(J2)

Figure contains an axes. The axes contains an object of type image.

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

Создайте изображение шахматной доски и поверните его, чтобы создать изображение, которое не выровнено.

I = checkerboard(40);
J = imrotate(I,30);
imshowpair(I,J,'montage')

Figure contains an axes. The axes contains an object of type image.

Определите некоторые совпадающие контрольные точки на фиксированном изображении (шахматной доске) и движущемся изображении (повернутой шахматной доске). Точки можно определять в интерактивном режиме с помощью инструмента «Выбор контрольной точки».

fixedPoints = [41 41; 281 161];
movingPoints = [56 175; 324 160];

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

tform = fitgeotrans(movingPoints,fixedPoints,'NonreflectiveSimilarity')
tform = 
  affine2d with properties:

                 T: [3x3 double]
    Dimensionality: 2

Используйте tform оценка для повторной выборки повернутого изображения для его регистрации в фиксированном изображении. Области цвета (зеленый и пурпурный) в изображении наложения ложного цвета указывают на ошибку в регистрации. Эта ошибка обусловлена отсутствием точного соответствия в контрольных точках.

Jregistered = imwarp(J,tform,'OutputView',imref2d(size(I)));
figure
imshowpair(I,Jregistered)

Figure contains an axes. The axes contains an object of type image.

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

u = [0 1]; 
v = [0 0]; 
[x, y] = transformPointsForward(tform, u, v); 
dx = x(2) - x(1); 
dy = y(2) - y(1); 
angle = (180/pi) * atan2(dy, dx) 
angle = 29.7686
scale = 1 / sqrt(dx^2 + dy^2)
scale = 1.0003

Расширенные возможности

..
Представлен в R2013a