diff --git a/ShoulderCase/@MaskSubdivider/MaskSubdivider.m b/ShoulderCase/@MaskSubdivider/MaskSubdivider.m new file mode 100644 index 0000000..174271c --- /dev/null +++ b/ShoulderCase/@MaskSubdivider/MaskSubdivider.m @@ -0,0 +1,50 @@ +classdef MaskSubdivider < handle + + properties (Access = private) + % 10° slices + numberOfAngularDivisions = 36; + numberOfRadialDivisions = 10; + center + mask + maskPixelsAngle + end + + methods + function obj = MaskSubdivider(mask) + obj.mask = mask; + % default center is the middle of the mask + obj.center = round(size(obj.mask)/2); + end + + function setNumberOfAngularDivisions(obj, value) + obj.numberOfAngularDivisions = value; + end + + function setNumberOfRadialDivisions(obj, value) + obj.numberOfRadialDivisions = value; + end + + function setCenterOfDivisions(obj, centerIndices) + obj.center = centerIndices; + end + + function set.center(obj, value) + obj.center = value; + obj.maskPixelsAngle = obj.getMaskPixelsAngle(); + end + + function output = getMaskPixelsAngle(obj) + [maskColumnIndex, maskRowIndex] =... + meshgrid(1:size(obj.mask, 1), 1:size(obj.mask, 2)); + maskColumnIndex = maskColumnIndex-obj.center(1); + maskRowIndex = maskRowIndex-obj.center(2); + normToCenter = sqrt(maskColumnIndex.^2 + maskRowIndex.^2); + maskPixelsAngle = acosd(maskColumnIndex./normToCenter); + maskSinus = maskRowIndex./normToCenter; + maskPixelsAngle(maskSinus < 0) =... + 360 - maskPixelsAngle(maskSinus < 0); + output = maskPixelsAngle; + end + end + +end \ No newline at end of file