Doxygen Source Code Documentation
Main Page Alphabetical List Data Structures File List Data Fields Globals Search
thd_zfillin.c
Go to the documentation of this file.00001 #include "mrilib.h"
00002
00003
00004
00005
00006
00007
00008 static int THD_zfillin_byte( int nrow , byte * row , int maxstep )
00009 {
00010 int ii , nfill=0 , jj ;
00011 byte vbot ;
00012 static byte *trow = NULL ; static int ntrow = 0 ;
00013
00014 if( ntrow != nrow ){
00015 trow = AFREALL(trow , byte, nrow ) ;
00016 ntrow = nrow ;
00017 }
00018 memcpy(trow,row,sizeof(byte)*nrow) ;
00019
00020 for( ii=0 ; ii < nrow ; ii++ ){
00021 if( row[ii] != 0 ) continue ;
00022
00023
00024
00025 for( jj=1 ; jj <= maxstep ; jj++ ){
00026 if( ii+jj< nrow && row[ii+jj]!=0 ){trow[ii]=row[ii+jj]; nfill++; break;}
00027 if( ii-jj>= 0 && row[ii-jj]!=0 ){trow[ii]=row[ii-jj]; nfill++; break;}
00028 }
00029 }
00030
00031 if( nfill > 0 ) memcpy(row,trow,sizeof(byte)*nrow) ;
00032 return nfill;
00033 }
00034
00035
00036
00037
00038
00039
00040 int THD_dataset_zfillin( THD_3dim_dataset * dset, int ival, int dcode, int maxstep )
00041 {
00042 int kind , xx,yy,zz , nrow , nx,ny,nz ;
00043 int xtop,ytop,ztop , nff , nfftot=0 ;
00044
00045 ENTRY("THD_dataset_rowfillin") ;
00046
00047 if( !ISVALID_DSET(dset) ||
00048 ival < 0 ||
00049 ival >= DSET_NVALS(dset) ||
00050 maxstep < 1 ) RETURN(-1) ;
00051
00052 kind = DSET_BRICK_TYPE(dset,ival) ;
00053 if( kind != MRI_byte ) RETURN(-1) ;
00054
00055 nrow = THD_get_dset_rowcount( dset , dcode ) ;
00056 if( nrow < 1 ) RETURN(-1) ;
00057
00058 nx = DSET_NX(dset) ;
00059 ny = DSET_NY(dset) ;
00060 nz = DSET_NZ(dset) ;
00061
00062 xtop = ytop = ztop = 1 ;
00063 switch( dcode ){
00064 case 1: case -1: ytop=ny ; ztop=nz ; break ;
00065 case 2: case -2: xtop=nx ; ztop=nz ; break ;
00066 case 3: case -3: xtop=nx ; ytop=ny ; break ;
00067 }
00068
00069 switch( kind ){
00070
00071 case MRI_byte:{
00072 byte * row ;
00073 for( zz=0 ; zz < ztop ; zz++ )
00074 for( yy=0 ; yy < ytop ; yy++ )
00075 for( xx=0 ; xx < xtop ; xx++ ){
00076 row = THD_get_dset_row( dset,ival , dcode,xx,yy,zz ) ;
00077 nff = THD_zfillin_byte( nrow , row , maxstep ) ;
00078 if( nff > 0 ){
00079 THD_put_dset_row( dset,ival , dcode,xx,yy,zz , row ) ;
00080 nfftot += nff ;
00081 }
00082 free(row) ;
00083 }
00084 }
00085 break ;
00086
00087 }
00088
00089 RETURN(nfftot) ;
00090 }