# How to create a rectangular mask based on current code for making an elliptical mask

10 views (last 30 days)
Happy PhD on 4 Aug 2022
Commented: Matt J on 5 Aug 2022
I have an code that creates an elliptical mask and rotates it to a certain angle:
for k = 0:180/deltaK:180-1 % Loop to Rotate the mask in steps.
if rectMask == 0
% Create circular mask.
x = ones(round(diamMax+0.5),1)*(1:round(diamMax+0.5))-round(diamMax+0.5)/2; % Distance in x-direction to centre.
y = (1:round(diamMax+0.5))'*ones(1,round(diamMax+0.5))-round(diamMax+0.5)/2; % Distance in y-direction to centre.
r = sqrt(x.^2+y.^2); % Absolute distance to centre.
maskMax = double(r <= diamMax/2);
% Create mask to convolve the image with.
maskMin = double(abs(x) <= diamMin/2);
if round(k/90) ~= k/90
end % if
else % use rectangular mask
% code for creating rectangular mask
% ...
end % if end
end % end for
I would like to replace the elliptical mask if I choose (that is, I want to have both options available by setting a parameter rectMask), with an rectangular mask of with the same size and rotation. How can I do this based on current code?
My input data here are:
• diamMax
• diamMin
• k
• rectMask = 1 or 0

Matt J on 4 Aug 2022
Edited: Matt J on 4 Aug 2022
I don't understand how your current code works, but you might consider modifying the code below, as appropriate:
M=256; N=256; %Image dimensions
diamMax=60; diamMin=40;
k=30;  x=(1:M)-(M+1)/2;
y=(1:N)'-(N+1)/2;
switch shape
case 'ellipse'
case 'rect'
end
end
Matt J on 5 Aug 2022
Just divide the diams in half
diamMin=diamIn/2;
...
end

### More Answers (1)

Matt J on 4 Aug 2022
Edited: Matt J on 4 Aug 2022
You could also just use poly2mask. This would avoid the overhead of imrotate.
M=256; N=256; %Image dimensions
diamMax=60; diamMin=40;
k=30;  switch shape
case 'ellipse'
p=nsidedpoly(1000);
case 'rect'
p=nsidedpoly(4);
end
p=scale(p,[diamMax,diamMin]);
p=translate( rotate(p,-k) ,[M/2,N/2]);
V=p.Vertices;
end

R2021b

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!