shear3d2.m

来自「beamlet变化的工具箱」· M 代码 · 共 106 行

M
106
字号
function SV=Shear3D2(V,dim1,dim2,theta,zp,Big);
%
% Shear3D: shearing of a 3D array
%  Usage:
%    SV=Shear3D(V,dim1,dim2,theta,zp);
%  Inputs:
%    V          3D matrix (x,y,z) voxel intensities
%    dim1,dim2  shearing mode, each pair of coordinates defines different shearing
%    theta      shearing angle
%    zp         zero padding mode, if zp=0 then V is cubed and a zero paddind is required
%               if zp=1 then matrix is already padded.
%    Big        if Big=1 then a 2n*n*n array is returned, if 0, n*n*n
%  Outputs
%    SV         the 3D sheared elongated matrix
%  


if nargin<6
    Big=0;
end
if nargin<5
   zp=0;
end
if zp
   n=floor(0.1+length(V)/2);
   BigVol=V;   
else
   n=CubeLength(V);
end   
switch dim1
case 3
   if ~zp
       BigVol=zeros(n,n,2*n);
	   BigVol(:,:,(n+1 - (n/2)):(n+ n/2)) = V;
   end
   SV=zeros(n,n,2*n);
   for i=1:n,
   	for j=1:n,
         switch dim2 
         case 1
            vshift = Shift1DSignal(squeeze(BigVol(i,j,:)),(i-(n+1)/2).*tan(theta));
         case 2
            vshift = Shift1DSignal(squeeze(BigVol(i,j,:)),(j-(n+1)/2).*tan(theta));
			end
         SV(i,j,:) = real(vshift(:));
   	end
   end
   if Big==0
       SV=SV(:,:,1+n/2:3*n/2);
   end
case 2
   if ~ zp
      BigVol=zeros(n,2*n,n);
	  BigVol(:,(n+1 - (n/2)):(n+ n/2),:) = V;
   end
   SV=zeros(n,2*n,n);
   for i=1:n,
   	for k=1:n,
         switch dim2
         case 1
            vshift = Shift1DSignal(squeeze(BigVol(i,:,k)),(i-(n+1)/2).*tan(theta));
         case 3
            vshift = Shift1DSignal(squeeze(BigVol(i,:,k)),(k-(n+1)/2).*tan(theta));
			end
	   	SV(i,:,k) = real(vshift(:));
   	end
   end
   if Big==0
       SV=SV(:,1+n/2:3*n/2,:);
   end
case 1
   if ~zp
      BigVol=zeros(2*n,n,n);
		BigVol((n+1 - (n/2)):(n+ n/2),:,:) = V;
   end
   SV=zeros(2*n,n,n);
   for j=1:n,
   	for k=1:n,
         switch dim2
         case 2
            vshift = Shift1DSignal(squeeze(BigVol(:,j,k)),(j-(n+1)/2).*tan(theta));
         case 3
            vshift = Shift1DSignal(squeeze(BigVol(:,j,k)),(k-(n+1)/2).*tan(theta));
			end
	   	SV(:,j,k) = real(vshift(:));
   	end
   end
   if Big==0
       SV=SV(1+n/2:3*n/2,:,:);
   end
end
%% Part of BeamLab Version:200% Built:Friday,23-Aug-2002 00:00:00% This is Copyrighted Material% For Copying permissions see COPYING.m% Comments? e-mail beamlab@stat.stanford.edu%%% Part of BeamLab Version:200% Built:Saturday,14-Sep-2002 00:00:00% This is Copyrighted Material% For Copying permissions see COPYING.m% Comments? e-mail beamlab@stat.stanford.edu%

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?