NAME

     fkkstrip   -  spatial  filtering  and  edge   detection   of
     timeslice data


SYNOPSIS

     fkkstrip [ -Nntap ] [ -Ootap ] [ -Fftap  ]  [  -rsnrst  ]  [
     -renred ] [ -sfrst ] [ -efred ] [ -llength ] [ -iintercept ]
     [ -ftaperxt ] [ -xtaperxt ] [ -ytaperyt  ]  [  -xpadxp  ]  [
     -ypadyp  ]  [  -pass ] [ -dup ] [ -AM ] [ -oaiopa ] [ -H ] [
     -ohioph ] [ -pchp ] [ -E ] [ -EG ] [ -sigsigma ] [ -EV  ]  [
     -EH ] [ -EDR ] [ -EDL ] [ -V ] [ -? or -h ]


DESCRIPTION

     fkkstrip in general smoothing mode  computes  a  two  dimen-
     sional convolution on a record by record basis between input
     data and (1) a bessel Jo  filter  constructed  according  to
     user  input  parameters, or (2) an average-median filter, or
     (3) one of several mean  (arithmetic,  geometric,  harmonic)
     filters.  The routine was written to be used with post-stack
     3D data but is effective with pre-stack data as well.   Such
     image processing of seismic data and can be extremely useful
     for removal of noise and multiples. Events that dip  steeply
     in  time  often appears as high frequency noise on timeslice
     data and may be removed using a filter that rejects data  in
     high  Kx,Ky  ranges.   Alternatively, removal of flat events
     may be accomplished through convolution with a  filter  that
     rejects data very close to and including Kx = Ky = 0.

     fkkstrip in edge detection mode computes (1) one of  several
     3x3   differential  (Laplacian)  filters  to  enhance  edges
     according to various criteria. Edge  detection  filters  are
     taken  from "Two Dimensional Signal and Image Processing" by
     J.S. Lim,  Prentice  Hall,  1990,   pp  481-486,  or  (2)  a
     Gaussian-Laplace  filter  which is somewhat like a band lim-
     ited differential filter. The overall appearance of the out-
     put  of  these  filters  is similar to that of the coherency
     codes although since these operations are done independently
     on  each  time  slice  the  temporal resolutuon will be much
     higher.

     fkkstrip gets both its data and its parameters from  command
     line  arguments.  These arguments specify the input, output,
     filter output, pass record  start  and  end,  filter  record
     start  and end, filter length and intercept, spatial pad and
     taper, and verbose printout, if desired.

     Note:  there must be at least as many traces per  record  as
     there  are filter points on one side of the operator -l.  In
     addition, the number of points on one side of  the  operator
     must be odd.  If not, the program will make it so.


  Command line arguments
     -N ntap
          Enter the input data set name or file immediately after
          typing  -N.   If piping in this command line entry will
          be omitted.  The input file should include the complete
          path name if the file resides in a different directory.
          Example -N/b/vsp/dummy tells the program  to  look  for
          file 'dummy' in directory /b/vsp

     -O otap
          Enter the output data  set  name  or  file  immediately
          after typing -O.  This output file is not required when
          piping the output to another process.  The output  data
          set also requires the full path name (see above).

     -F ftap
          Enter the filter output data set name or  file  immedi-
          ately  after  typing  -F.  If not used no output of the
          filter will be made.  The dataset created will have  -l
          trace  of   -l  samples each.  Where  -l  is the length
          of one side of the filter used.   This  filter  may  be
          viewed  using   xsd   or  xmplot  and is best displayed
          using color.

     -rs nrst
          Enter the first record number to pass to  the  process.
          Record  numbers below this value will not be processed.
          Default value is the first record.

     -re nred
          Enter the last record number to pass  to  the  process.
          Record  numbers above this value will not be processed.
          Default value is last record.

     -s start
          Enter  the  first  record  number  to  filter.  Records
          between  this  value and -rs will be passed unfiltered.
          This entry should then be greater  than  -rs  and  less
          than -re. Default is the first record.

     -e end
          Enter the last record number to filter. Records between
          this  value  and  -re  will  be passed unfiltered. This
          entry should then be greater than  -rs  and  less  than
          -re. Default is the last record.

     -l length
          Enter number of points in one side of 2D filter.  [must
          be odd].  Default length is 21.

     -i intercept
          Enter filter intercept.  Default is 0.05.

     -ftaper ftaper
          Enter percent of filter length over  which  to  to  use
          apply cosine taper. Default is 50 percent.

     -xpad xpad
          Enter number of samples to pad on either side of  input
          record in x direction [left/right].  Default is 10.

     -ypad ypad
          Enter number of samples to pad on either side of  input
          record in y direction [top/bottom].  Default is 10.

     -xtaper xtaper
          Enter number of samples to  taper  on  either  side  of
          input  record  in x direction [left/right].  Default is
          10.

     -ytaper ytaper
          Enter number of samples to  taper  on  either  side  of
          input  record  in y direction [top/bottom].  Default is
          10.

     -pass
          Enter the command line argument '-pass' to  output  the
          result  of the convolution [filter * data].  Default is
          to output the difference of the result of the  convolu-
          tion and the input data [data - filter * data]. For the
          edge detector modes the -pass seems to include a little
          more of the overall structural shape as well as enhanc-
          ing the edges. Without -pass only the edges  will  show
          up.

     -dup Enter the command line argument '-dup' to fill the  pad
          zone  with the fringe of samples from the edges of each
          input record.  This is necesary if one is  smoothing  (
          -pass  mode ) entities like velocity or Q to avoid edge
          effects from the convolution of the smoothing operator.

     -AM  Enter the command  line  argument  '-AM'  to  apply  an
          average-median  filter  of length given above. For each
          position on the input record an lxl  matrix  is  formed
          from  the  samples.  Eight  partial  averages are taken
          along the horizontal, vertical, and two  diagonals.  In
          each  direction  (say  horizontal)  averages  are taken
          separately for the left and right  sides  of  the  data
          matrix (center point skipped). The output of the filter
          is the median of the outputs from  all  eight  averages
          along  with  the center value. This is less smooth that
          doing just the full median. Including -pass gives  out-
          put that has the highest wavenumbers trimmed.


     -oa iopa
          Enter the average-median operation code: 1  =  average-
          median   (vertical,   horizontal,  &  diagonals),  2  =
          average-median (vertical & horizontal),  3=  median  of
          average medians. Default = 1

     -H   Enter the command line argument '-H' to build one of  4
          possible  mean filters of length given above. Note: all
          of these filters take much longer to run  than  any  of
          the other options.

     -oh ioph
          Enter the mean operation code:  1  =  arithmetic,  2  =
          geometric, 3 = contra-harmonic, 4 = harmonic. Default =
          1

     -p chp
          For  the  contra-harmonic  choice  above,   enter   the
          exponent. Default = 2.monic. Default = 1

     -E   Enter the command line argument '-E' to apply pre-built
          general differential edge detector. It is always advis-
          able to apply a second 3-point fkkstrip in  -pass  mode
          to  trim  the  very highest wavenumbers or to otherwise
          limit      the      highest      wavenumbers,      e.g.
          fftxy|polymute|fftxy.

     -EG  Enter the command line argument  '-EG'  to  apply  pre-
          built  Gaussian-Laplace  edge  detector of length given
          above.  This acts essentially like a band limited  dif-
          ferential filter.

     -sig sigma
          For the Gaussian-Laplace  choice,  enter  the  gaussian
          standard deviation. Default = 4.

     -EV  Enter the command line argument  '-EV'  to  apply  pre-
          built  vertical differential edge detector. This should
          enhance vertical changes but in practice it  is  offten
          difficult  to  see  differences between these more spe-
          cialized edge detectors.  They  do  all  seem  to  give
          higher  apparent  spatial  resolution  than the general
          detector. It is always advisable to apply a  second  3-
          point  fkkstrip  in -pass mode to trim the very highest
          wavenumbers  or  to   otherwise   limit   the   highest
          wavenumbers, e.g. fftxy|polymute|fftxy.

     -EH  Enter the command line argument  '-EH'  to  apply  pre-
          built   horizontal  differential  edge  detector.  This
          should enhance horizontal changes but in practice it is
          offten  difficult to see differences between these more
          specialized edge detectors. They do all  seem  to  give
          higher  apparent  spatial  resolution  than the general
          detector. It is always advisable to apply a  second  3-
          point  fkkstrip  in -pass mode to trim the very highest
          wavenumbers  or  to   otherwise   limit   the   highest
          wavenumbers, e.g. fftxy|polymute|fftxy.

     -EDR Enter the command line argument '-EDR'  to  apply  pre-
          built  right  diagonal differential edge detector. This
          should enhance right diagonal changes but  in  practice
          it is offten difficult to see differences between these
          more specialized edge detectors. They do  all  seem  to
          give  higher  apparent spatial resolution than the gen-
          eral detector. It is always advisable to apply a second
          3-point fkkstrip in -pass mode to trim the very highest
          wavenumbers  or  to   otherwise   limit   the   highest
          wavenumbers, e.g. fftxy|polymute|fftxy.

     -EDL Enter the command line argument '-EDL'  to  apply  pre-
          built  left  diagonal  differential edge detector. This
          should enhance left diagonal changes but in practice it
          is  offten  difficult  to see differences between these
          more specialized edge detectors. They do  all  seem  to
          give  higher  apparent spatial resolution than the gen-
          eral detector. It is always advisable to apply a second
          3-point fkkstrip in -pass mode to trim the very highest
          wavenumbers  or  to   otherwise   limit   the   highest
          wavenumbers, e.g. fftxy|polymute|fftxy.

     -V   Enter the command line argument '-V' to get  additional
          printout.

     -? or -h
          Enter the command line  argument  '-?'  or  -h  to  get
          online  help.   The  program  terminates after the help
          screen is printed.


DISCUSSION

     The field of image processing of seismic data is a  blending
     of  two  disciplines  that  have been around for many years,
     namely signal processing and image processing.  We, as  geo-
     physicists  are intimately familiar with the former and usu-
     ally quite ignorant of the latter.  The Electrical Engineer-
     ing  and Computer Science people on the other hand have been
     using 2D techniques in  image  processing  for  many  years.
     There  is  a  wealth  of  liturature on topics such as image
     smoothing, image coding,  image  spectral  balancing,  image
     edge  detection,  image  enhancement  etc.  that have direct
     application to processing of time slice data.  This  routine
     is  the  first  I know of that makes possible several of the
     aforementioned processes.

      Image Smoothing

     Is simply Kx,Ky filtering [high  cut  usually]  and  may  be
     accomplished  using this routine with a filter length set to
     a very small number [ 3 is as  small  as  the  routine  will
     allow  ].   This combined with your choice of intercept will
     build a filter that when convolved with your time slice does
     a  slight  amount of areal smoothing which translates to the
     removal of energy at high  Kx,Ky  values.  [To  monitor  the
     result in Kx,Ky use program fftxy.]  The effect on the LI or
     DI slice of this filter is quite astounding.  A  large  per-
     centage of any steeply dipping [Remember this is 3D, so even
     flat events on some data projections are  affected.]  energy
     is  removed  from  the data.  This has obvious impact in the
     area of source  generated  noise  or  noise  from  secondary
     sources or point defractors throughout the survey.

     To construct a low cut [Kx,Ky close  to  0,0]  use  a  large
     filter  length  combined  with  a very small intercept value
     [i.e. 0.005] which will result in very low frequency  events
     only being passed.

      2D Implimentation

     The utility of the filter in the full 3D world  is  obvious.
     It  can  however also be employed in the 2D pre-stack arena.
     One could apply moveout using a velocity  field  appropriate
     to  correct  multiple  events  [i.e.  water velocity], apply
     scaling and a mute for good measure then sort to common  mid
     point.   Now  perform a record to record shift [recshift] to
     remove any structural component associated with the mutliple
     generator,  time slice the data and process with a filter to
     eradicate flat events.  Back out the structural  correction,
     sort  back to common mid point and voila multiples are gone.
     This  approach  has  certain  advantages  over  conventional
     demultiple routines in that whole families of velocities may
     be filtered without the usual level of artifacts.

     If you can think of things you would like to do in the image
     processing  field  and  need  a routine to do them give us a
     call at USP Central and we  will  be  only  too  willing  to
     oblidge you.

      Sample Flow A

     Here is an example of the command line entries for  applica-
     tion  of  the  filter to a 3D post-stack dataset of 158 LIs,
     174 DIs and 750 samples per trace:

      ttds3d -Ninput -NDtxy -ODxyt -M16 -Ttmp1 |
      fkkstrip -l3 -i0.005 |
      ttds3d -NDxyt -ODtxy -M16 -Ttmp2 |
      hdrswap -N2input |
      clean -Ooutput -Z

     The ttds3d steps are set up for the suns (16mb  memory)  and
     the  intermediate files tmp1 and tmp2 will be created in the
     current working directory. It is necessary to do the hdrswap
     at the end to recover the indexing of your input dataset.

      Sample Flow B

     Here is an example of the command line entries for  applica-
     tion of the general edge detection filter to a 3D post-stack
     dataset:

      ttds3d -Ninput -NDtxy -ODxyt -M16 -Ttmp1 |
      fkkstrip -E |
      fkkstrip -l3 -pass |
      ttds3d -NDxyt -ODtxy -M16 -Ttmp2 |
      hdrswap -N2input |
      clean -Ooutput -Z

     Here we have followed  the  edge  detector  with  a  3-point
     smoothing  filter  to trim off the highest wavenumbers. This
     step could have been replaced with a fftxy|polymute|fftxy -R
     for  greater control. The edge detection step has no "-pass"
     since this seems to give a little more structure to the out-
     put.

     Have fun.



See Also

     fftxy polymute fkrad fkshape dafd2d,


BUGS

     unknown


AUTHOR

      Paul        G.        A.         Garossino,         May/93,
     [APR:3932:zpgg07@trc.amoco.com], edge detection mods by Paul
     Gutowski, Oct/95 [pgutowski@amoco.com




COPYRIGHT

     copyright 2001, Amoco Production Company
               All Rights Reserved
          an affiliate of BP America Inc.








Man(1) output converted with man2html