50 lines
1.2 KiB
Mathematica
50 lines
1.2 KiB
Mathematica
|
function [ mapX, mapY ] = WarpRegion( xmin, ymin, mask, triX, coeffs )
|
||
|
%WARPREGION Summary of this function goes here
|
||
|
% Detailed explanation goes here
|
||
|
|
||
|
%%
|
||
|
[h, w] = size(mask);
|
||
|
mapX = zeros(size(mask));
|
||
|
mapY = zeros(size(mask));
|
||
|
|
||
|
ys = [1:h]' * ones(1, w) + ymin - 1;
|
||
|
xs = ([1:w]' * ones(1, h))' + xmin - 1;
|
||
|
|
||
|
for t=0:size(coeffs,1)-1
|
||
|
|
||
|
trimap = triX == t;
|
||
|
|
||
|
a = coeffs(t+1,:);
|
||
|
|
||
|
xo = a(1) + a(2) * xs + a(3) * ys;
|
||
|
|
||
|
mapX(trimap) = xo(trimap);
|
||
|
|
||
|
yo = a(4) + a(5) * xs + a(6) * ys;
|
||
|
mapY(trimap) = yo(trimap);
|
||
|
|
||
|
end
|
||
|
|
||
|
mapX(~mask) = -1;
|
||
|
mapY(~mask) = -1;
|
||
|
|
||
|
%%
|
||
|
% [h, w] = size(mask);
|
||
|
% mapX_2 = zeros(size(mask));
|
||
|
% mapY_2 = zeros(size(mask));
|
||
|
%
|
||
|
% ys = [1:h]' * ones(1, w) + ymin - 1;
|
||
|
% xs = ([1:w]' * ones(1, h))' + xmin - 1;
|
||
|
%
|
||
|
% ys = ys(:);
|
||
|
% xs = xs(:);
|
||
|
%
|
||
|
% xos = coeffs(1,:) + bsxfun(@times, coeffs(2,:), xs) + bsxfun(@times, coeffs(3,:), ys);
|
||
|
% yos = coeffs(4,:) + bsxfun(@times, coeffs(5,:), xs) + bsxfun(@times, coeffs(6,:), ys);
|
||
|
%
|
||
|
% maps = repmat(trimap(:),1, size(coeffs,1));
|
||
|
% maps = repmat
|
||
|
|
||
|
end
|
||
|
|