initial commit

This commit is contained in:
2026-08-07 15:56:42 +09:00
commit 91ad25aca9
1012 changed files with 159314 additions and 0 deletions
+106
View File
@@ -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