mirror of
https://github.com/c-sooyoung/fold_slice.git
synced 2026-09-17 20:39:08 +09:00
initial commit
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
% 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
|
||||
Reference in New Issue
Block a user