mirror of
https://github.com/c-sooyoung/fold_slice.git
synced 2026-09-17 18:29:08 +09:00
106 lines
3.1 KiB
Matlab
106 lines
3.1 KiB
Matlab
% GET_RADIAL_INTEGRATION_MASK create 2D integer array that serves as a
|
|
% template for get_integration_matrix for radial integration
|
|
%
|
|
%
|
|
% [radial_integration_mask, radial_mask, sector_mask] = get_radial_integration_mask(Np, Nrad, Nsec, center_pos)
|
|
%
|
|
% Inputs:
|
|
% **Np - size of the integrated frames
|
|
% **Nrad - number of radial rings
|
|
% **Nsec - number of angular sectors
|
|
% **center_pos - position of center in pixels, e.g. Np/2 for well centered dataset
|
|
% Outputs:
|
|
% ++radial_integration_mask - 2D integer array integration mask
|
|
% ++radial_mask - 2D integer array integration mask of only radial rings
|
|
% ++sector_mask - 2D integer array integration mask of only angular sectors
|
|
%
|
|
%
|
|
%%%%%%%%%%%%%%%%%%%%% HOW TO USE %%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
%
|
|
% % create some data
|
|
% img = single(imread('cameraman.tif'));
|
|
% img = repmat(img, 1,1,10); % just add there 3rd dimension
|
|
% Np = size(img);
|
|
%
|
|
% %% define parameters of the integration matrix
|
|
% Nrad = 20;
|
|
% Nsec = 30;
|
|
% center_pos = Np/2-30;
|
|
%
|
|
%
|
|
% %% generate radial and sector masks, needs to be modified if center != Np/2
|
|
% [mask, radial_mask, sector_mask] = get_radial_integration_mask(Np, Nrad, Nsec, center_pos);
|
|
%
|
|
% %% check the generated sector mask
|
|
% figure(1)
|
|
% imagesc(mask); axis off image
|
|
% title('Radial & Angular sectors')
|
|
% colormap(hsv)
|
|
% drawnow
|
|
%
|
|
% % generate the integration 2D sparse matrix
|
|
% T = get_integration_matrix(mask);
|
|
%
|
|
%
|
|
% %% perform sparse matrix based integration
|
|
% tic
|
|
% img_sum = single(reshape((T*reshape(double(img), prod(Np(1:2)), [])), Nrad,Nsec, []));
|
|
% toc
|
|
%
|
|
% %% perform matlab based integration for comparison
|
|
% tic
|
|
% img_sum_0 = zeros(Nrad,Nsec, size(img,3));
|
|
% for nz = 1:size(img,3)
|
|
% im = img(:,:,nz);
|
|
% for i = 1:Nrad
|
|
% m = radial_mask == i;
|
|
% for j = 1:Nsec
|
|
% img_sum_0(i,j,nz) = sum(im( m & sector_mask == j ));
|
|
% end
|
|
% end
|
|
% end
|
|
% toc
|
|
%
|
|
%
|
|
% % show the first frame to check that the methods are identical
|
|
% figure
|
|
% subplot(1,2,1)
|
|
% imagesc(img_sum_0(:,:,1)); axis image
|
|
% title('Matlab')
|
|
% subplot(1,2,2)
|
|
% imagesc(img_sum(:,:,1)); axis image
|
|
% title('Sparse matrix')
|
|
|
|
|
|
|
|
function [radial_integration_mask, radial_mask, sector_mask] = get_radial_integration_mask(Np, Nrad, Nsec, center_pos)
|
|
% generate 2D integration masks - radial + sectors
|
|
|
|
offset = center_pos - Np/2;
|
|
xgrid = (-floor(Np(2)/2)+1:floor(Np(2)/2))+offset(2);
|
|
ygrid = (-floor(Np(1)/2)+1:floor(Np(1)/2))+offset(1);
|
|
|
|
[X,Y] = meshgrid(xgrid, ygrid);
|
|
R = sqrt(X.^2 + Y.^2);
|
|
Phi = atan2(X,Y);
|
|
|
|
% calculate array corresponding to rings
|
|
r_all = linspace(0, max(Np(1:2))/2, Nrad+1);
|
|
radial_mask = zeros(Np(1:2));
|
|
for i = 1:Nrad
|
|
radial_mask(R >= r_all(i) & R < r_all(i+1)) = i;
|
|
end
|
|
|
|
% calculate array corresponding to sectors
|
|
sec_all = linspace(-pi,pi,Nsec+1);
|
|
sector_mask = zeros(Np(1:2));
|
|
for i = 1:Nsec
|
|
sector_mask(Phi >= sec_all(i) & Phi < sec_all(i+1)) = i;
|
|
end
|
|
|
|
|
|
% generate joined integration mask
|
|
radial_integration_mask = double(radial_mask + (sector_mask-1) .* Nrad);
|
|
radial_integration_mask(radial_mask ==0 | sector_mask == 0) = 0;
|
|
|
|
end |