exponenta event banner

findbounds

Поиск выходных границ для пространственного преобразования

Описание

пример

outbounds = findbounds(tform,inbounds) оценивает выходные границы, соответствующие заданному пространственному преобразованию, и набор входных границ. tform - структура пространственного преобразования. inbounds является 2-by-num_dims матрица, задающая нижнюю и верхнюю границы выходного изображения. outbounds - оценка наименьшей прямоугольной области, полностью содержащей преобразованный прямоугольник, представленный входными границами, и имеющей ту же форму, что и inbounds. С тех пор outbounds является только оценкой, она может не содержать полностью преобразованный входной прямоугольник.

Примеры

свернуть все

Считывание изображения в рабочую область и отображение изображения.

I = imread('cameraman.tif');
figure
imshow(I)

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

Создайте структуру пространственного преобразования, которая растягивает изображение.

T = maketform('affine',[.5 0 0; .5 2 0; 0 0 1]);

Вычислите границы выходного изображения, учитывая размер входного изображения и пространственное преобразование. Размеры входного изображения 256 на 256. Границы выходного изображения отражают преобразование: 256 на 512.

outb = findbounds(T,[0 0;256 256])
outb = 2×2

     0     0
   256   512

Примените преобразование и отобразите изображение.

transformedI = imtransform(I,T);
figure
imshow(transformedI)

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

Входные аргументы

свернуть все

Пространственное преобразование, указанное как структура (tform).

Типы данных: struct

Границы для каждого размера входного изображения, заданного как 2-по-num_dims матрица. Первая строка inbounds задает нижние границы для каждого размера, а вторая строка задает верхние границы. num_dims должен быть совместим с ndims_in поле tform.

Пример: outb = findbounds(T,[0 0;256 256]) где входное изображение 256 на 256.

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

Выходные аргументы

свернуть все

Границы для каждого размера выходного изображения (ограничивающая рамка выходного пространства), возвращаемые как 2-по-num_dims матрица класса double.

Алгоритмы

  1. findbounds сначала создается сетка точек входного пространства. Эти точки находятся в центре, углах и середине каждого ребра изображения.

    I = imread('rice.png');
    h = imshow(I);
    set(h,'AlphaData',0.3);
    axis on, grid on
    in_points = [ ...
        0.5000    0.5000
        0.5000  256.5000
      256.5000    0.5000
      256.5000  256.5000
        0.5000  128.5000
      128.5000    0.5000
      128.5000  128.5000
      128.5000  256.5000
      256.5000  128.5000];
    hold on
    plot(in_points(:,1),in_points(:,2),'.','MarkerSize',18)
    hold off

    Сетка точек ввода-пространства

  2. Далее, findbounds преобразует сетку точек входного пространства в выходное пространство. Если tform содержит прямое преобразование (непустое forward_fcn поле), то findbounds преобразует точки ввода-пространства с помощью tformfwd. Например:

    tform = maketform('affine', ...
        [1.1067 -0.2341 0; 0.5872 1.1769 0; 1000 -300 1]);
    out_points = tformfwd(tform, in_points)
      out_points =
    
       1.0e+03 *
    
        1.0008   -0.2995
        1.1512    0.0018
        1.2842   -0.3595
        1.4345   -0.0582
        1.0760   -0.1489
        1.1425   -0.3295
        1.2177   -0.1789
        1.2928   -0.0282

    Если tform не содержит прямого преобразования, то findbounds оценивает выходные границы с помощью функции оптимизации Nelder-Mead fminsearch.

  3. Наконец, findbounds вычисляет ограничивающую рамку преобразованной сетки точек.

См. также

| |

Представлен до R2006a