myofibrometry / matlab / geometry / computeNormalFieldSingleFit.m
computeNormalFieldSingleFit.m
Raw
function [heartNormalField] = computeNormalFieldSingleFit(X,mask)
    % mask : 2D mask...
    % X: boundary points
    imageSize = zeros(1,3);
    imageSize(1:2) = size(mask);
    % this assums that there are boundary points for all Z slices.
    imageSize(3) = ceil(max(X(:,3)));
    heartNormalField = zeros([imageSize(1),imageSize(2),2,imageSize(3)]);
    tic
    [C,R] = fitCircle(X(:,1:2));
    for pt = 1:length(X)
        startPoint = X(pt,:);
        dr = [C(1) - startPoint(1), C(2) - startPoint(2)];
        drNorm = norm(dr);
        assert(drNorm > 0)
        dr = dr./drNorm;
        heartNormalField(startPoint(2),startPoint(1),:,startPoint(3)) = dr;
    end
    heartNormalField = squeeze(heartNormalField);
    fprintf('Computed single Fit heartNormalfield in %s seconds\n', duration(0,0,toc));
end