% % volOut = volume_merge_logical_MSBackground( volA, volB ) % ------------------------------------------------------------------------- % % Logical combinations of 3-D arrays. % Purpose modified for merging foreground and background of "Mixed symmetry" % animation. % % INPUT: % % volA, volB - 3-D arrays. % Note: Currently all dimensions must be equal. % % HARDCODED (immediately below function declaration): % % none - none % % RETURN VALUES: % % volOut - Grayscale volume array with size the same as input arrays. % % FUNCTION CALLS and DEPENDENCIES: % % % Mark Dow, November 23, 2008 % Mark Dow, modified November .., 2008 () % % % TERMS FOR USE: There are no restrictions on the use of this code, % auxilliary code and other required resources. Claiming % to be the originator, explicitly or implicitly, is bad % karma. A link (if appropriate), a note to dow[at]uoregon.edu, % and credit are appreciated but not required. % function volOut = volume_merge_logical_MSBackground( volA, volB ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % hardcoded parameters % hardcoded parameters %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % To Do: Sanity check dimensions of volumes. Currently only accomodates equal % dimensions. DIM = size( volA ); volOut = zeros( size( volA ) ); for i = 1 : DIM( 1 ) for j = 1 : DIM( 2 ) for k = 1 : DIM( 3 ) % If partial occlusion: % Detect partial front edge: bPartEdge = 0; bZeroNbr = 0; maxNbr = 0; if i - 1 >= 1 maxNbr = max( volA( i - 1, j, k ), volA( i - 1, j, k ) ); if volA( i - 1, j, k ) < .0001 bZeroNbr = 1; end end if i + 1 <= DIM( 1 ) maxNbr = max( volA( i + 1, j, k ), maxNbr ); if volA( i + 1, j, k ) < .0001 bZeroNbr = 1; end end if k - 1 >= 1 maxNbr = max( volA( i , j, k - 1 ), maxNbr ); if volA( i , j, k - 1 ) < .0001 bZeroNbr = 1; end end if k + 1 <= DIM( 3 ) maxNbr = max( volA( i , j, k + 1 ), maxNbr ); if volA( i , j, k + 1 ) < .0001 bZeroNbr = 1; end end if maxNbr - volA(i,j,k) > .05 ... && bZeroNbr bPartEdge = 1; end if bPartEdge && volA(i,j,k) > volB(i,j,k) %&& volB(i,j,k) > 0.0001 %... % subtract fraction distance from foreground to background volOut(i,j,k) = volA(i,j,k) - ( volA(i,j,k) - volB(i,j,k) )*( ( maxNbr - volA(i,j,k) )/( maxNbr - volB(i,j,k) ) ); %+ ( volA(i,j,k) - volB(i,j,k) )/2; else if volB(i,j,k) > 0 volOut(i,j,k) = volB(i,j,k); end if volA(i,j,k) > 0 && volA(i,j,k) > volB(i,j,k) volOut(i,j,k) = volA(i,j,k); end end end end end