mirror of
https://github.com/c-sooyoung/fold_slice.git
synced 2026-09-17 18:29:08 +09:00
44 lines
1.6 KiB
Matlab
44 lines
1.6 KiB
Matlab
% APPLY_3D_APODIZATION Smoothly apodize tomogram to avoid sharp edges and air affecting
|
|
% the FRC analysis
|
|
%
|
|
% [tomogram,circulo] = apply_3D_apodization(tomogram, rad_apod, axial_apod, radial_smooth)
|
|
%
|
|
% Inputs:
|
|
% **tomogram - volume to be apodized
|
|
% **rad_apod - number of pixels to be zeroed from edge of the tomogram
|
|
% **axial_apod - roughly number of pixels to be zeroed from top / bottom
|
|
% **radial_smooth - smoothness of the apodization in pixels, default = Npix/10
|
|
% **layer_dim
|
|
% Outputs:
|
|
% ++tomogram - apodized volume
|
|
% ++circulo -apodization mask
|
|
% MODIFIED BY YJ TO ALLOW UNEVEN SIZES
|
|
|
|
function [tomogram,circulo] = apply_3D_apodization(tomogram, rad_apod, axial_apod, radial_smooth )
|
|
import utils.*
|
|
[Npix_y,Npix_x,Nlayers] = size(tomogram);
|
|
Npix = max(Npix_y,Npix_x);
|
|
if nargin < 4
|
|
radial_smooth = Npix/10;
|
|
end
|
|
|
|
if nargin < 3
|
|
axial_apod = [];
|
|
end
|
|
if ~isempty(rad_apod)
|
|
xt = -Npix/2:Npix/2-1;
|
|
[X,Y] = meshgrid(xt,xt);
|
|
radial_smooth = max(radial_smooth,1); % prevent division by zero
|
|
circulo= single(1-radtap(X,Y,radial_smooth,round(Npix/2-rad_apod-radial_smooth)));
|
|
if Npix_y~=Npix_x
|
|
circulo= crop_pad( circulo, [Npix_y,Npix_x]);
|
|
end
|
|
tomogram = bsxfun(@times, tomogram, circulo);
|
|
end
|
|
if ~isempty(axial_apod) && Nlayers > 1
|
|
filters = fract_hanning_pad(Nlayers,Nlayers,max(0,round(Nlayers-2*axial_apod)));
|
|
filters = ifftshift(filters(:,1));
|
|
tomogram = bsxfun(@times,tomogram,reshape(filters,1,1,[]));
|
|
end
|
|
|
|
end |