findbounds

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

Описание

пример

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

Примеры

свернуть все

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

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

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

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)

Входные параметры

свернуть все

Пространственное преобразование в виде структуры (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-меда fminsearch.

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

Смотрите также

| |

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