-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathsg_circle.m
53 lines (38 loc) · 928 Bytes
/
sg_circle.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
function circle = sg_circle(dims,radius,sigma,center)
%% sg_circle
% A function to generate a circle, with Gaussian tapering and arbitrary
% center.
%
% WW 09-2018
%% Check check
% Check dimensions
n_dims = numel(dims);
if n_dims == 1
dims = [dims,dims];
elseif n_dims ~= 2
error('ACHTUNG!!! Invalid number of dimensions!!!');
end
% Calculate centers
if nargin < 4
center = floor(dims./2)+1;
end
% Check sigma
if (nargin == 2) || isempty(sigma)
sigma = 0;
end
%% Calculate circle
% Linear grids
lin_x = (1:dims(1))-center(1);
lin_y = (1:dims(2))-center(2);
% 2D grids
[x,y] = ndgrid(lin_x, lin_y);
% Calculate distance array
dist = sqrt((x.^2)+(y.^2));
% Calculate circle
circle = double(dist <= radius);
%% Calculate sigma
if (sigma~=0) && ~isempty(sigma)
sigma_idx = dist > radius;
circle(sigma_idx) = exp(-((dist(sigma_idx)-radius)/sigma).^2);
circle(circle < exp(-2)) = 0;
end