Найдите выходные границы для пространственного преобразования
outbounds = findbounds(tform,inbounds)
оценивает выходные границы, соответствующие данному пространственному преобразованию и набору входных границ. outbounds
= findbounds(tform
,inbounds
)tform
является пространственной структурой преобразования. inbounds
является 2 num_dims
матрицей, которая задает нижние и верхние границы выходного изображения. outbounds
является оценкой самой маленькой прямоугольной области, полностью содержащей преобразованный прямоугольник, представленный входными границами, и имеет ту же форму как inbounds
. Поскольку outbounds
является только оценкой, он не может полностью содержать преобразованный входной прямоугольник.
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
Сетка точек входного пробела
Затем, 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
.
Наконец, findbounds
вычисляет ограничительную рамку преобразованной сетки точек.