-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathgenerate_kernel.m
32 lines (29 loc) · 1.17 KB
/
generate_kernel.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
function kernel = generate_kernel(ker_shape,ker_param)
disp('Generating kernel');
if nargin==2
if strcmp(ker_shape,'ball')
[X,Y,Z] = meshgrid(-ker_param(1):ker_param(1),-...
ker_param(1):ker_param(1),-ker_param(2):ker_param(2));
kernel = single((X.^2/ker_param(1)^2 + Y.^2/ker_param(1)^2 +...
Z.^2/ker_param(2)^2)<=1);
elseif strcmp(ker_shape,'gaussian')
gaussian=fspecial('gaussian',ceil(10*ker_param(1))+1,...
ker_param(1));
kernel=reshape(reshape(gaussian,[],1)*exp(-[-3*ker_param(2):...
1:3*ker_param(2)].^2/4/ker_param(2)^2),ceil(...
10*ker_param(1))+1,ceil(10*ker_param(1))+1,[]);
elseif strcmp(ker_shape,'lorentz')
[X,Y,Z] = meshgrid([-ceil(5*ker_param(1)):ceil(...
5*ker_param(1))],[-ceil(5*ker_param(1)):...
ceil(5*ker_param(1))],[-ceil(5*ker_param(2)):...
ceil(5*ker_param(2))]);
kernel = 1./(1 + (ker_param(1)*(X.^2 + Y.^2) + ker_param(2)*Z.^2));
elseif strcmp(ker_shape,'user')
kernel=ker_param;
end
kernel = kernel/norm(kernel(:));
else
kernel = [];
end
disp('Prepared Reconstruction kernel');
end