velocity analysis using similarity-weighted semblancea · inversion (fwi), which minimizes the...

15
Velocity analysis using similarity-weighted semblance a a Published in Geophysics, 80, A75-A82, (2015) Yangkang Chen * , Tingting Liu and Xiaohong Chen ABSTRACT Weighted semblance can be used for improving the performance of the traditional semblance for specific datasets. We propose a novel approach for prestack velocity analysis using weighted semblance. The novelty comes from a different weighting cri- teria in which the local similarity between each trace and a reference trace is used. On one hand, low similarity corresponds to a noise point or a point indicating incorrect moveout, which should be given a small weight. On the other hand, high similarity corresponds to a point indicating correct moveout, which should be given a high weight. The proposed approach can also be effectively used for analyzing AVO anomalies with increased resolution compared with AB semblance. Both synthetic and field CMP gathers demonstrate higher resolution using the proposed approach. Applications of the proposed method on a prestack dataset further confirms that the stacked data us- ing the similarity-weighted semblance can obtain better energy-focused events, which indicates a more precise velocity picking. INTRODUCTION Building a subsurface velocity model is one of the most important issues in exploration geophysics. There are generally four ways for building the velocity model. The first one is normal-moveout (NMO) based velocity analysis, which requires picking peaks in the velocity spectra (Taner and Koehler, 1969; Fomel, 2009; Luo and Hale, 2012). The velocity spectra is obtained by applying a number of NMO corrections with different velocities and then calculating their corresponding semblances. The second type is Born-approximation-based wave equation migration velocity analysis (WEMVA), which is a non-linear optimization process that aims at estimating the migration velocity using the Born-approximated wave equation in the image domain and is less vulnerable to the local minimum and more effective for reflection signals (Sava and Biondi, 2004a,b; Li, 2013). The third type is ray-based migration velocity analysis, also known as traveltime tomography. The velocity model is built by updating the velocity model so that the misfit between predicted and observed first-break traveltimes is minimized (Zhu et al., 1992; Osypov, 2000; Noble et al., 2010; Li et al., 2013; Chen et al., 2013). The fourth type is the recently popular full waveform inversion (FWI), which minimizes the least-squares misfit between the measured data and the synthesized data predicted from the current velocity model in the data domain (Virieux and Operto, 2009; Guitton et al., 2012; Zhou et al., 2012) and can improve the resolution of velocity structures. In this paper, we focus on the NMO based velocity analysis , which provides the important initial velocity model for the following more complicated velocity analysis procedures. TCCS-9

Upload: others

Post on 21-Aug-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

  • Velocity analysis using similarity-weighted semblancea

    aPublished in Geophysics, 80, A75-A82, (2015)

    Yangkang Chen∗, Tingting Liu† and Xiaohong Chen†

    ABSTRACT

    Weighted semblance can be used for improving the performance of the traditionalsemblance for specific datasets. We propose a novel approach for prestack velocityanalysis using weighted semblance. The novelty comes from a different weighting cri-teria in which the local similarity between each trace and a reference trace is used. Onone hand, low similarity corresponds to a noise point or a point indicating incorrectmoveout, which should be given a small weight. On the other hand, high similaritycorresponds to a point indicating correct moveout, which should be given a high weight.The proposed approach can also be effectively used for analyzing AVO anomalies withincreased resolution compared with AB semblance. Both synthetic and field CMPgathers demonstrate higher resolution using the proposed approach. Applications ofthe proposed method on a prestack dataset further confirms that the stacked data us-ing the similarity-weighted semblance can obtain better energy-focused events, whichindicates a more precise velocity picking.

    INTRODUCTION

    Building a subsurface velocity model is one of the most important issues in explorationgeophysics. There are generally four ways for building the velocity model. The first one isnormal-moveout (NMO) based velocity analysis, which requires picking peaks in the velocityspectra (Taner and Koehler, 1969; Fomel, 2009; Luo and Hale, 2012). The velocity spectrais obtained by applying a number of NMO corrections with different velocities and thencalculating their corresponding semblances. The second type is Born-approximation-basedwave equation migration velocity analysis (WEMVA), which is a non-linear optimizationprocess that aims at estimating the migration velocity using the Born-approximated waveequation in the image domain and is less vulnerable to the local minimum and more effectivefor reflection signals (Sava and Biondi, 2004a,b; Li, 2013). The third type is ray-basedmigration velocity analysis, also known as traveltime tomography. The velocity model isbuilt by updating the velocity model so that the misfit between predicted and observedfirst-break traveltimes is minimized (Zhu et al., 1992; Osypov, 2000; Noble et al., 2010;Li et al., 2013; Chen et al., 2013). The fourth type is the recently popular full waveforminversion (FWI), which minimizes the least-squares misfit between the measured data andthe synthesized data predicted from the current velocity model in the data domain (Virieuxand Operto, 2009; Guitton et al., 2012; Zhou et al., 2012) and can improve the resolutionof velocity structures. In this paper, we focus on the NMO based velocity analysis , whichprovides the important initial velocity model for the following more complicated velocityanalysis procedures.

    TCCS-9

  • Chen et al. 2 Similarity-weighted semblance

    NMO based velocity analysis using semblance has been an indispensable step forbuilding the initial subsurface velocity model since its introduction by Taner and Koehler(1969). There exist several modifications of traditional semblance that better meet therequirements of specific datasets (Fomel, 2009; Sarkar et al., 2001; Luo and Hale, 2012).Sarkar et al. (2001) and Fomel (2009) modified the traditional semblance formulation andproposed amplitude-versus-offset (AVO) adaptive semblances in different ways. Luo andHale (2012) increase the resolution of the semblance map in order to distinguish the peaksbetween primary and multiple reflections.

    Increasing the resolution of the semblance spectra is beneficial for picking the trueNMO velocity, especially important when multiples are existing in the CMP gathers (Luoand Hale, 2012). We can increase the resolution by weighting terms in the traditional sem-blance calculation. Hale (2009) defined a weighted semblance that conformed to structuralfeatures. Luo and Hale (2012) chose an offset-dependent weighting function that effectivelyincreased the semblance spectra resolution. In this paper, we use a different weightingscheme, by utilizing the local similarity between each trace and a reference trace. Thereference trace can be a zero-offset trace, or the stacked trace using a traditional stackingtechnique. Both synthetic and field data examples demonstrate a successful performance ofthe proposed approach.

    THEORY

    Traditional semblance

    The traditional semblance is defined by Neidell and Taner (1971) as:

    s(i) =

    i+M∑j=i−M

    (N−1∑k=0

    a(j, k)

    )2

    N

    i+M∑j=i−M

    N−1∑k=0

    a2(j, k)

    , (1)

    where i and j are time sample indices, s(i) denotes the semblance for time index i, 2M + 1is the length of the smoothing window (in this formulation a boxcar filter is used), alongtime axis, a(j, k) is the trace amplitude at time index j and trace number k of the NMO-corrected common midpoint (CMP) gather, and N is the number of traces.

    Weighted semblance

    The semblance can be thought as a squared correlation between the analyzed signal and aweighting function w(j, k) in the following form:

    sw(i) =

    i+M∑j=i−M

    (N−1∑k=0

    a(j, k)w(j, k)

    )2i+M∑

    j=i−M

    (N−1∑k=0

    a2(j, k)N−1∑k=0

    w2(j, k)

    ) , (2)

    TCCS-9

  • Chen et al. 3 Similarity-weighted semblance

    where w(j, k) denotes the weighting function for time index j and trace number k.

    With w selected using different criterion, equation 2 can lead to different well-knownsemblance types:

    1. When w(j, k) ≡ C, where C is a constant, equation 2 turns to the traditional sem-blance 1.

    2. When w(j, k) = A(j) +B(j)φ(j, k), where φ(j, k) is a known function, A(j) and B(j)are two coefficients estimated from the least-squares fitting for the trend functionw(j, k), equation 2 turns to the AB semblance proposed by Fomel (2009). The ABsemblance is proposed to handle the velocity analysis for those CMP gathers withAVO phenomenon. Appendix A provides a short review of calculating A(j) and B(j)in the AB semblance.

    More recently, Luo and Hale (2012) proposed another weighting approach which honorsthe large-offset data and damping the small-offset data to increase the resolution for theresulted velocity scanning map. In this abstract, we propose to use local similarity (Fomel,2007) to weight different traces:

    w(j, k) = S[a(j, k), r(j)], (3)

    where S[x,y] denotes the local similarity between traces x and y, r(j) denotes the jth timepoint for a selected reference trace r. The reference can be easily selected as the zero-offsettrace, or more plausible, as the stacked trace using the conventional stacking technique or amore sophisticated stacking technique (Liu et al., 2009). In most cases, when the signal-to-noise ratio (SNR) of the CMP gather is not low, the choice of reference trace will not affectthe performance too much. However, when the CMP gather is very noisy, the stacked traceusing a better stacking technique can help obtain a better focused and smoother semblancemap.

    Figure 1 gives a brief demonstration of the proposed similarity-weighted semblance.Figure 1a is a simple NMO corrected CMP gather with some Gaussian white noise. Thereare two abnormal traces in the gather. For traditional semblance, the two abnormal tracesare given equal weights, which is not plausible. Figure 1b shows the weights applied toeach trace for the semblance calculation. The weights equal to the local similarity betweeneach trace and the stacked trace. As we can see from the map of weights, the two abnormaltraces are given much low weights. The more reasonable semblance calculation will result ina much higher resolution, which will be exclusively demonstrated in the section of examples.In the next section, we will give a brief review of the theory of local similarity.

    REVIEW OF LOCAL SIMILARITY

    Fomel (2007) defined local similarity between vectors a and b as:

    c =√

    cT1 c2 (4)

    where c1 and c2 come from two least-squares minimization problems:

    c1 = arg minc1‖a−Bc1‖22, (5)

    c2 = arg minc2‖b−Ac2‖22, (6)

    TCCS-9

  • Chen et al. 4 Similarity-weighted semblance

    where A is a diagonal operator composed from the elements of a: A = diag(a) and B is adiagonal operator composed from the elements of b: B = diag(b). Least-squares problems5 and 6 can be solved with the help of shaping regularization with a smoothness constraint:

    c1 = [λ21I + T (BTB− λ21I)]−1T BTa, (7)c2 = [λ22I + T (ATA− λ22I)]−1TATb, (8)

    where T is a smoothing operator, and λ1 and λ2 are two parameters controlling the physicaldimensionality and enabling fast convergence when inversion is implemented iteratively.These two parameters can be chosen as the least-squares norms of B and A, respectively.

    (a) (b)

    Figure 1: A demonstration of similarity-weighted semblance. (a) NMO corrected gather.(b) Weights applied to each trace for semblance calculation based on the local similaritybetween each trace and a reference trace.

    EXAMPLES

    Synthetic examples

    The first synthetic example is a simple four-layer hyperbolic CMP gather. By using the tra-ditional semblance, AB semblance and the proposed similarity-weighted semblance, the sem-blance spectra are shown in Figure 2. From the comparison, we can see that the resolutionis clearly different for three approaches. The AB semblance suffers from the low-resolutionproblem as pointed out by Fomel (2009), compared with the other two approaches. Forboth traditional and AB semblances, there exists a fake peak between the third and fourthlayer. The similarity-weighted semblance obtains a very high resolution both vertically andhorizontally. In this example, the reference trace is chosen as the traditionally stacked trace.

    By adding some Gaussian white noise onto the first synthetic example, we get the secondexample (Figure 3). The performance of the three approaches are improved a lot due to theadded random noise. The fake peaks appearing in the first example disappear because ofthe random property of Gaussian white noise, which indicates the fact that a small level of

    TCCS-9

    from rsf.proj import *def Grey(data,other): Result(data,'grey transp=y yreverse=y label2=Trace unit2="" label1=Time label2=Trace unit1="s" title="" wherexlabel=b labelsz=10 wheretitle=t %s'%other)

    #### sythetic dataFlow('spike1',None,'spike n1=100 nsp=1 mag=1 d1=0.004 o1=0 k1=46 | ricker1 freq=0.1')

    Flow('spike2',None,'spike n1=100 nsp=1 mag=1 d1=0.004 o1=0 k1=50 | ricker1 freq=0.1')

    Flow('spike3',None,'spike n1=100 nsp=1 mag=1 d1=0.004 o1=0 k1=50 | ricker1 freq=0.1')

    Flow('spike4',None,'spike n1=100 nsp=1 mag=1 d1=0.004 o1=0 k1=50 | ricker1 freq=0.1')

    Flow('spike5',None,'spike n1=100 nsp=1 mag=1 d1=0.004 o1=0 k1=50 | ricker1 freq=0.1')

    Flow('spike6',None,'spike n1=100 nsp=1 mag=1 d1=0.004 o1=0 k1=54 | ricker1 freq=0.1')

    Flow('spike7',None,'spike n1=100 nsp=1 mag=1 d1=0.004 o1=0 k1=50 | ricker1 freq=0.1')

    Flow('spike8',None,'spike n1=100 nsp=1 mag=1 d1=0.004 o1=0 k1=50 | ricker1 freq=0.1')

    Flow('spike9',None,'spike n1=100 nsp=1 mag=1 d1=0.004 o1=0 k1=50 | ricker1 freq=0.1')

    Flow('spike10',None,'spike n1=100 nsp=1 mag=1 d1=0.004 o1=0 k1=50 | ricker1 freq=0.1')

    Flow('syn','spike1 spike2 spike3 spike4 spike5 spike6 spike7 spike8 spike9 spike10', ''' cat axis=2 ${SOURCES[1:10]} | put o2=1 | noise seed=1 type=y mean=0 var=0.00011 ''')

    Result('syn','syn','wiggle transp=y yreverse=y poly=y label2=Trace labelsz=10 title="NMO corrected gather" screenratio=0.8')

    Result('syn1','syn stack','pad n2=12 | cat axis=2 ${SOURCES[1]} | wiggle transp=y yreverse=y poly=y label2=Trace labelsz=10 title="NMO corrected gather" screenratio=0.8')### initial stack

    Flow('stack','syn','stack')Plot('stack','stack','put o2=0 | wiggle transp=y yreverse=y poly=y label2=Amplitude labelsz=12 title="c)" screenratio=0.8')

    ## SNR stackFlow('snrstack','syn','snrstack w=45 eps=5000')Plot('snrstack','snrstack','wiggle transp=y yreverse=y poly=y label2=Amplitude labelsz=12 title="e)" screenratio=0.8')

    ## Flow('stacks','stack','spray axis=2 n=10')## similarityFlow('weights', 'syn stacks', '''similarity other=${SOURCES[1]} niter=30 rect1=11 rect2=1 ''')Grey('weights','color=j scalebar=y title="Local similarity" wanttitle=y labelsz=10 screenratio=0.83')

    End()

  • Chen et al. 5 Similarity-weighted semblance

    random noise can aid the semblance calculation process to some extent. Compared with theother two approaches, the similarity-weighted semblance obtained a very high resolution.In this example, the reference trace is chosen as the traditionally stacked trace.

    The third synthetic example is a CMP gather with class II AVO anomalies (Figure 4).The class II AVO anomalies cause seismic amplitudes to go through a polarity reversal(Rutherford and Williams, 1989; Fomel, 2009). In this test, the weighting function is acombination between the similarity based weight and trend based weight. We implementthis by first weighting each trace using the proposed approach and then apply the trendbased approach (Fomel, 2009). While the traditional semblance can not capture the in-formation of the AVO anomalies, the AB semblance and the proposed similarity-weightedsemblance can handle the AVO phenomena correctly. Because of the combination betweenthe AB semblance and similarity-weighted semblance, the resolution of the proposed ap-proach will decrease a little bit. This phenomenon results from the fact that taking AVOeffect into consideration will decrease the resolution, as analyzed in Fomel (2009). However,the resolution using the proposed approach is still higher than that of the AB semblanceand comparable to the traditional semblance. In this example, the reference trace is chosenas the traditionally stacked trace.

    It’s worth to be mentioned that the black strings appearing on the top of velocitymaps denote the automatically picked optimum velocities using the algorithm introducedin Fomel (2009). Thus, the trends of black strings between different semblance approachdo not differ too much. With manual picking, the results for both traditional semblanceand AB semblance will result much larger velocity uncertainties, which will result in largermigration uncertainties (Fomel and Landa, 2014). There are also some unreasonable changesin the black strings, which result from the fact that the synthetic events are sparse and theautomatically picking algorithms can not handle such problem. Figure 5 shows a comparisonbetween the true velocity and the picked velocities from different approaches for the thirdsynthetic example. The black solid line denotes the true velocity. The blue dash linedenotes the picked velocity using the similarity-weighted semblance. The green long dashline denotes the picked velocity from the traditional semblance and the red dot dash linedenotes the picked velocity from the AB semblance. It is clear that the AB semblanceand similarity-weighted semblance are much similar and the similarity-weighted semblancecan make the automatic picking more accurate. The velocity picked from the traditionalsemblance, however, deviates the true velocity a lot and is not acceptable.

    Field data examples

    The first field data is a marine CMP gather (Figure 6). In this example, the proposedsimilarity-weighted semblance as shown in the right panel in Figure 6 obtains a very highresolution. The peaks on the semblance panel is easy to be picked out and thus reducethe velocity-peaking uncertainties (Fomel and Landa, 2014). In this example, the referencetrace is chosen as the stacked trace using the SNR-weighting strategy.

    The second field data example is a 3D prestack dataset from a 2D survey of the Gulfof Mexico, as shown in Figure 7. We stacked the prestack data using automatically pickedNMO velocities from different semblance map. Figure 8a shows the stacked data usingtraditional semblance and Figure 8b shows the stacked data using the similarity-weighted

    TCCS-9

  • Chen et al. 6 Similarity-weighted semblance

    Figure 2: Comparison between semblance spectra for a clean synthetic data. Left: CMPgather. Middle left: using traditional semblance. Middle right: using AB semblance. Right:using similarity-weighted semblance.

    TCCS-9

    from rsf.proj import *# Generate a reflector model

    layers = ( ((0,2),(3.5,2),(4.5,2.5),(5,2.25), (5.5,2),(6.5,2.5),(10,2.5)), ((0,2.5),(10,3.5)), ((0,3.2),(3.5,3.2),(5,3.7), (6.5,4.2),(10,4.2)), ((0,4.5),(10,4.5)))

    nlays = len(layers)for i in range(nlays): inp = 'inp%d' % i Flow(inp+'.asc',None, ''' echo %s in=$TARGET data_format=ascii_float n1=2 n2=%d ''' % \ (' '.join(map(lambda x: ' '.join(map(str,x)), layers[i])),len(layers[i])))

    dim1 = 'o1=0 d1=0.001 n1=10001'

    Flow('lay1','inp0.asc', 'dd form=native | spline %s fp=0,0' % dim1)Flow('lay2',None , 'math %s output="2.5+x1*0.1" ' % dim1)Flow('lay3','inp2.asc', 'dd form=native | spline %s fp=0,0' % dim1)Flow('lay4',None ,'math %s output=4.5' % dim1)

    Flow('lays','lay1 lay2 lay3 lay4', 'cat axis=2 ${SOURCES[1:4]}')

    graph = '''graph min1=2.5 max1=7.5 min2=0 max2=5yreverse=y wantaxis=n wanttitle=n screenratio=1'''Plot('lays0','lays',graph + ' plotfat=10 plotcol=0')Plot('lays1','lays',graph + ' plotfat=2 plotcol=7')Plot('lays2','lays',graph + ' plotfat=2')

    # Velocity

    Flow('vofz',None, ''' math output="1.5+0.36*x1" d2=0.01 n2=1001 d1=0.01 n1=501 label1=Depth unit1=km label2=Distance unit2=km label=Velocity unit=km/s ''')Plot('vofz', ''' window min2=2.5 max2=7.5 | grey color=j allpos=y bias=1.5 labelsz=14 labelfat=2 font=4 titlesz=20 titlefat=2 title=Model screenratio=1 ''')

    Result('model','vofz lays0 lays1','Overlay')

    # Model data

    Flow('dips','lays','deriv scale=y')Flow('modl','lays dips', ''' kirmod cmp=y dip=${SOURCES[1]} nh=51 dh=0.1 h0=0 ns=5 ds=0.05 s0=0 freq=10 dt=0.004 nt=1501 vel=1.5 gradz=0.36 verb=y | pow pow1=1 | put d2=0.05 label1=Time unit1=s label2=Half-Offset unit2=km label3=Midpoint unit3=km ''',split=[1,10001], reduce='add')

    # Add random noiseFlow('data1','modl','noise var=1e-20 seed=101013') #clean dataFlow('data2','modl','noise var=1e-6 seed=101013')#noisy data

    Flow('vrms',None, 'math d1=0.004 n1=1001 o1=0 output="x1*125+2000+50*sin(9*x1)" ')

    Flow('synt',None, ''' spike d1=0.004 n1=1001 | noise rep=y seed=2006 | cut n1=100 | bandpass flo=4 fhi=20 | spray axis=2 n=141 d=25 o=0 label=Offset unit=m ''')

    Flow('cmpa','data1', 'window n3=1')Flow('cmpb','data2', 'window n3=1')

    Result('cmpa','grey title="%s" clip=0.008 labelsz=14 labelfat=2 font=4 titlesz=20 titlefat=2 label2="Offset"' % 'Clean CMP')Result('cmpb','grey title="%s" clip=0.008 labelsz=14 labelfat=2 font=4 titlesz=20 titlefat=2 label2="Offset"' % 'Noisy CMP')

    #Flow('refa','cmpa','window n2=1')Flow('refa','abnmoa','stack')#Flow('refa','modl','window n3=1 | window n2=1')

    dat='cmpa'for typ in ('semblance','ab','similarity-weighted','similarity-weighted'):scn=typ+'scna'if typ == 'similarity-weighted':Flow(scn,[dat,'refa'],'simivscan thr=0.6 v0=1.5 dv=0.02 nv=51 type=weighted weight=y nb=5 ref=${SOURCES[1]} | clip2 lower=0')else:Flow(scn,dat,'vscan v0=1.5 dv=0.02 nv=51 weight=y type=%s nb=5 | clip2 lower=0'%typ)Plot(scn+'0',scn,'''grey color=j allpos=y title="%s" pclip=100 labelsz=14 labelfat=2 font=4 titlesz=20 titlefat=2'''%typ)pik=typ+'pika'Flow(pik,scn,'scale axis=2 | pick rect1=10')Plot(pik, ''' graph yreverse=y transp=y min2=1.5 max2=2.5 pad=n plotcol=7 plotfat=15 wanttitle=n wantaxis=n ''')Result(scn,[scn+'0',pik],'Overlay')nmo = typ + 'nmoa'Flow(nmo,[dat,pik],'nmo half=y velocity=${SOURCES[1]} str=0.1 ')Result(nmo,'''grey title="%s"grid2=y gridcol=6 gridfat=7 g2num=0.5 clip=0.008 labelsz=14 labelfat=2 font=4 titlesz=20 titlefat=2''' % typ)

    inmo = typ + 'inmoa'Flow(inmo,[nmo,pik],'inmo half=y velocity=${SOURCES[1]} str=0.4')Result(inmo,'''grey title="%s" clip=0.008 labelsz=14 labelfat=2 font=4 titlesz=20 titlefat=2''' % typ)

    #Flow('refb','cmpb','window n2=1')Flow('refb','abnmoa','stack')#Flow('refb','modl','window n3=1 | window n2=1')dat='cmpb'for typ in ('semblance','ab','weighted','similarity-weighted'):scn=typ+'scnb'if typ == 'similarity-weighted':Flow(scn,[dat,'refb'],'simivscan thr=0.6 v0=1.5 dv=0.02 nv=51 type=weighted weight=y nb=5 ref=${SOURCES[1]} | clip2 lower=0')else:Flow(scn,dat,'vscan v0=1.5 dv=0.02 nv=51 weight=y type=%s nb=5 | clip2 lower=0'%typ)Plot(scn+'0',scn,'''grey color=j allpos=y title="%s" pclip=100 labelsz=14 labelfat=2 font=4 titlesz=20 titlefat=2'''%typ)pik=typ+'pikb'Flow(pik,scn,'scale axis=2 | pick rect1=10')Plot(pik, ''' graph yreverse=y transp=y min2=1.5 max2=2.5 pad=n plotcol=7 plotfat=15 wanttitle=n wantaxis=n ''')Result(scn,[scn+'0',pik],'Overlay')nmo = typ + 'nmob'Flow(nmo,[dat,pik],'nmo half=y velocity=${SOURCES[1]} str=0.1 ')Result(nmo,'''grey title="%s"grid2=y gridcol=6 gridfat=7 g2num=0.5 clip=0.008 labelsz=14 labelfat=2 font=4 titlesz=20 titlefat=2''' % typ)

    inmo = typ + 'inmob'Flow(inmo,[nmo,pik],'inmo half=y velocity=${SOURCES[1]} str=0.4')Result(inmo,'''grey title="%s" clip=0.008 labelsz=14 labelfat=2 font=2 titlesz=1t0 titlefat=2''' % typ)

    Result('hw-comp1','./Fig/cmpa.vpl ./Fig/semblancescna.vpl ./Fig/abscna.vpl ./Fig/similarity-weightedscna.vpl','SideBySideAniso')Result('hw-comp2','./Fig/cmpb.vpl ./Fig/semblancescnb.vpl ./Fig/abscnb.vpl ./Fig/similarity-weightedscnb.vpl','SideBySideAniso')

    End()

  • Chen et al. 7 Similarity-weighted semblance

    Figure 3: Comparison between semblance spectra for a noisy synthetic data. Left: CMPgather. Middle left: using traditional semblance. Middle right: using AB semblance. Right:using similarity-weighted semblance.

    TCCS-9

    from rsf.proj import *# Generate a reflector model

    layers = ( ((0,2),(3.5,2),(4.5,2.5),(5,2.25), (5.5,2),(6.5,2.5),(10,2.5)), ((0,2.5),(10,3.5)), ((0,3.2),(3.5,3.2),(5,3.7), (6.5,4.2),(10,4.2)), ((0,4.5),(10,4.5)))

    nlays = len(layers)for i in range(nlays): inp = 'inp%d' % i Flow(inp+'.asc',None, ''' echo %s in=$TARGET data_format=ascii_float n1=2 n2=%d ''' % \ (' '.join(map(lambda x: ' '.join(map(str,x)), layers[i])),len(layers[i])))

    dim1 = 'o1=0 d1=0.001 n1=10001'

    Flow('lay1','inp0.asc', 'dd form=native | spline %s fp=0,0' % dim1)Flow('lay2',None , 'math %s output="2.5+x1*0.1" ' % dim1)Flow('lay3','inp2.asc', 'dd form=native | spline %s fp=0,0' % dim1)Flow('lay4',None ,'math %s output=4.5' % dim1)

    Flow('lays','lay1 lay2 lay3 lay4', 'cat axis=2 ${SOURCES[1:4]}')

    graph = '''graph min1=2.5 max1=7.5 min2=0 max2=5yreverse=y wantaxis=n wanttitle=n screenratio=1'''Plot('lays0','lays',graph + ' plotfat=10 plotcol=0')Plot('lays1','lays',graph + ' plotfat=2 plotcol=7')Plot('lays2','lays',graph + ' plotfat=2')

    # Velocity

    Flow('vofz',None, ''' math output="1.5+0.36*x1" d2=0.01 n2=1001 d1=0.01 n1=501 label1=Depth unit1=km label2=Distance unit2=km label=Velocity unit=km/s ''')Plot('vofz', ''' window min2=2.5 max2=7.5 | grey color=j allpos=y bias=1.5 labelsz=14 labelfat=2 font=4 titlesz=20 titlefat=2 title=Model screenratio=1 ''')

    Result('model','vofz lays0 lays1','Overlay')

    # Model data

    Flow('dips','lays','deriv scale=y')Flow('modl','lays dips', ''' kirmod cmp=y dip=${SOURCES[1]} nh=51 dh=0.1 h0=0 ns=5 ds=0.05 s0=0 freq=10 dt=0.004 nt=1501 vel=1.5 gradz=0.36 verb=y | pow pow1=1 | put d2=0.05 label1=Time unit1=s label2=Half-Offset unit2=km label3=Midpoint unit3=km ''',split=[1,10001], reduce='add')

    # Add random noiseFlow('data1','modl','noise var=1e-20 seed=101013') #clean dataFlow('data2','modl','noise var=1e-6 seed=101013')#noisy data

    Flow('vrms',None, 'math d1=0.004 n1=1001 o1=0 output="x1*125+2000+50*sin(9*x1)" ')

    Flow('synt',None, ''' spike d1=0.004 n1=1001 | noise rep=y seed=2006 | cut n1=100 | bandpass flo=4 fhi=20 | spray axis=2 n=141 d=25 o=0 label=Offset unit=m ''')

    Flow('cmpa','data1', 'window n3=1')Flow('cmpb','data2', 'window n3=1')

    Result('cmpa','grey title="%s" clip=0.008 labelsz=14 labelfat=2 font=4 titlesz=20 titlefat=2 label2="Offset"' % 'Clean CMP')Result('cmpb','grey title="%s" clip=0.008 labelsz=14 labelfat=2 font=4 titlesz=20 titlefat=2 label2="Offset"' % 'Noisy CMP')

    #Flow('refa','cmpa','window n2=1')Flow('refa','abnmoa','stack')#Flow('refa','modl','window n3=1 | window n2=1')

    dat='cmpa'for typ in ('semblance','ab','similarity-weighted','similarity-weighted'):scn=typ+'scna'if typ == 'similarity-weighted':Flow(scn,[dat,'refa'],'simivscan thr=0.6 v0=1.5 dv=0.02 nv=51 type=weighted weight=y nb=5 ref=${SOURCES[1]} | clip2 lower=0')else:Flow(scn,dat,'vscan v0=1.5 dv=0.02 nv=51 weight=y type=%s nb=5 | clip2 lower=0'%typ)Plot(scn+'0',scn,'''grey color=j allpos=y title="%s" pclip=100 labelsz=14 labelfat=2 font=4 titlesz=20 titlefat=2'''%typ)pik=typ+'pika'Flow(pik,scn,'scale axis=2 | pick rect1=10')Plot(pik, ''' graph yreverse=y transp=y min2=1.5 max2=2.5 pad=n plotcol=7 plotfat=15 wanttitle=n wantaxis=n ''')Result(scn,[scn+'0',pik],'Overlay')nmo = typ + 'nmoa'Flow(nmo,[dat,pik],'nmo half=y velocity=${SOURCES[1]} str=0.1 ')Result(nmo,'''grey title="%s"grid2=y gridcol=6 gridfat=7 g2num=0.5 clip=0.008 labelsz=14 labelfat=2 font=4 titlesz=20 titlefat=2''' % typ)

    inmo = typ + 'inmoa'Flow(inmo,[nmo,pik],'inmo half=y velocity=${SOURCES[1]} str=0.4')Result(inmo,'''grey title="%s" clip=0.008 labelsz=14 labelfat=2 font=4 titlesz=20 titlefat=2''' % typ)

    #Flow('refb','cmpb','window n2=1')Flow('refb','abnmoa','stack')#Flow('refb','modl','window n3=1 | window n2=1')dat='cmpb'for typ in ('semblance','ab','weighted','similarity-weighted'):scn=typ+'scnb'if typ == 'similarity-weighted':Flow(scn,[dat,'refb'],'simivscan thr=0.6 v0=1.5 dv=0.02 nv=51 type=weighted weight=y nb=5 ref=${SOURCES[1]} | clip2 lower=0')else:Flow(scn,dat,'vscan v0=1.5 dv=0.02 nv=51 weight=y type=%s nb=5 | clip2 lower=0'%typ)Plot(scn+'0',scn,'''grey color=j allpos=y title="%s" pclip=100 labelsz=14 labelfat=2 font=4 titlesz=20 titlefat=2'''%typ)pik=typ+'pikb'Flow(pik,scn,'scale axis=2 | pick rect1=10')Plot(pik, ''' graph yreverse=y transp=y min2=1.5 max2=2.5 pad=n plotcol=7 plotfat=15 wanttitle=n wantaxis=n ''')Result(scn,[scn+'0',pik],'Overlay')nmo = typ + 'nmob'Flow(nmo,[dat,pik],'nmo half=y velocity=${SOURCES[1]} str=0.1 ')Result(nmo,'''grey title="%s"grid2=y gridcol=6 gridfat=7 g2num=0.5 clip=0.008 labelsz=14 labelfat=2 font=4 titlesz=20 titlefat=2''' % typ)

    inmo = typ + 'inmob'Flow(inmo,[nmo,pik],'inmo half=y velocity=${SOURCES[1]} str=0.4')Result(inmo,'''grey title="%s" clip=0.008 labelsz=14 labelfat=2 font=2 titlesz=1t0 titlefat=2''' % typ)

    Result('hw-comp1','./Fig/cmpa.vpl ./Fig/semblancescna.vpl ./Fig/abscna.vpl ./Fig/similarity-weightedscna.vpl','SideBySideAniso')Result('hw-comp2','./Fig/cmpb.vpl ./Fig/semblancescnb.vpl ./Fig/abscnb.vpl ./Fig/similarity-weightedscnb.vpl','SideBySideAniso')

    End()

  • Chen et al. 8 Similarity-weighted semblance

    Figure 4: Comparison between semblance spectra for a synthetic data with class II AVOanomalies. Left: CMP gather. Middle left: using traditional semblance. Middle right:using AB semblance. Right: using similarity-weighted semblance.

    TCCS-9

    from rsf.proj import *

    Flow('vrms',None, 'math d1=0.004 n1=1001 o1=0 output="x1*125+2000+50*sin(9*x1)" ')

    Flow('synt',None, ''' spike d1=0.004 n1=1001 | noise rep=y seed=2006 | cut n1=100 | bandpass flo=4 fhi=20 | spray axis=2 n=141 d=25 o=0 label=Offset unit=m ''')

    Flow('cmpa','synt vrms', 'inmo velocity=${SOURCES[1]} half=n | noise seed=2007 var=1e-10 | put d2=0.025 label2="Offset" unit2="km" ')

    Flow('top','synt','window n1=400')Flow('mid','synt', 'window f1=400 n1=300 | math output="input*(1-x2*%g)" ' % (2.0/3500))Flow('bot','synt','window f1=700')

    Flow('cmpb','top mid bot vrms', ''' cat axis=1 ${SOURCES[1:3]} | inmo velocity=${SOURCES[3]} half=n | noise seed=2007 var=1e-10 | put d2=0.025 label2="Offset" unit2="km" ''')

    Result('cmpa','grey title="CMP" clip=0.74 labelsz=14 labelfat=2 font=4 titlesz=20 titlefat=2')Result('cmpb','grey title="CMP with AVO" clip=0.74 labelsz=14 labelfat=2 font=4 titlesz=20 titlefat=2')

    #Flow('ref','cmpa','window n2=1')#Flow('ref','abnmo','stack')Flow('ref','synt','window n2=1')

    dat='cmpa'for typ in ('semblance','ab','weighted','similarity-weighted'):scn=typ+'scn'if typ == 'similarity-weighted':Flow(scn,[dat,'ref'],'simivscan thr=0.4 half=n v0=2 dv=0.01 nv=101 type=semblance weight=y nb=5 ref=${SOURCES[1]} | clip2 lower=0')else:Flow(scn,dat,'vscan half=n v0=2 dv=0.01 nv=101 weight=y type=%s nb=5 | clip2 lower=0'%typ)Plot(scn+'0',scn,'''grey color=j allpos=y title="%s" pclip=100 labelsz=14 labelfat=2 font=4 titlesz=20 titlefat=2'''%typ)pik=typ+'pik'Flow(pik,scn,'scale axis=2 | pick rect1=50')Plot(pik, ''' graph yreverse=y transp=y min2=2 max2=3 pad=n plotcol=7 plotfat=15 wanttitle=n wantaxis=n ''')Result(scn,[scn+'0',pik],'Overlay')nmo = typ + 'nmo'Flow(nmo,[dat,pik],'nmo half=n velocity=${SOURCES[1]} str=0.1 ')Result(nmo,'''grey title="%s"grid2=y gridcol=6 gridfat=7 g2num=0.5 clip=0.74 labelsz=14 labelfat=2 font=4 titlesz=20 titlefat=2''' % typ)

    inmo = typ + 'inmo'Flow(inmo,[nmo,pik],'inmo half=n velocity=${SOURCES[1]} str=0.4')Result(inmo,'''grey title="%s" clip=0.74 labelsz=14 labelfat=2 font=4 titlesz=20 titlefat=2''' % typ)

    #Flow('ref','cmpa','window n2=1')Flow('ref2','avo-abnmo','stack')#Flow('ref','synt','window n2=1')

    dat='cmpb'for typ1 in ('semblance','ab','weighted','similarity-weighted'):typ='avo-'+typ1scn=typ+'scn'

    if typ == 'avo-similarity-weighted':Flow(scn,[dat,'ref2'],'simivscan thr=0.1 half=n v0=2 dv=0.01 nv=101 weight=y type=avo nb=10 ref=${SOURCES[1]} | clip2 lower=0')elif typ=='avo-semblance':Flow(scn,dat,'vscan half=n v0=2 dv=0.01 nv=101 weight=y type=semb nb=10 | clip2 lower=0')elif typ == 'avo-weighted':Flow(scn,dat,'vscan half=n v0=2 dv=0.01 nv=101 weight=y type=weighted nb=10 nb=10| clip2 lower=0')else:Flow(scn,dat,'vscan half=n v0=2 dv=0.01 nv=101 weight=y type=avo nb=5 nb=10 | clip2 lower=0')

    Plot(scn+'0',scn,'''grey color=j allpos=y title="%s" pclip=100 labelsz=14 labelfat=2 font=4 titlesz=20 titlefat=2'''%typ)pik=typ+'pik'Flow(pik,scn,'scale axis=2 | pick rect1=50')Plot(pik, ''' graph yreverse=y transp=y min2=2 max2=3 pad=n plotcol=7 plotfat=15 wanttitle=n wantaxis=n ''')Result(scn,[scn+'0',pik],'Overlay')nmo = typ + 'nmo'Flow(nmo,[dat,pik],'nmo half=n velocity=${SOURCES[1]} str=0.1 ')Result(nmo,'''grey title="%s"grid2=y gridcol=6 gridfat=7 g2num=0.5 clip=0.74 labelsz=14 labelfat=2 font=4 titlesz=20 titlefat=2''' % typ)

    inmo = typ + 'inmo'Flow(inmo,[nmo,pik],'inmo half=n velocity=${SOURCES[1]} str=0.4')Result(inmo,'''grey title="%s" clip=0.74 labelsz=14 labelfat=2 font=4 titlesz=20 titlefat=2''' % typ)

    Result('synth-comp1','./Fig/cmpa.vpl ./Fig/semblancescn.vpl ./Fig/abscn.vpl ./Fig/similarity-weightedscn.vpl','SideBySideAniso')Result('synth-comp2','./Fig/cmpb.vpl ./Fig/avo-semblancescn.vpl ./Fig/avo-abscn.vpl ./Fig/avo-similarity-weightedscn.vpl','SideBySideAniso')

    #Result('comp2','./Fig/cmpa.vpl ./Fig/semblancenmo.vpl ./Fig/abnmo.vpl ./Fig/weightednmo.vpl','SideBySideAniso')#Result('comp3','./Fig/cmpa.vpl ./Fig/semblanceinmo.vpl ./Fig/abinmo.vpl ./Fig/weightedinmo.vpl','SideBySideAniso')

    #Result('comp4','./Fig/cmpb.vpl ./Fig/avo-semblancescn.vpl ./Fig/avo-abscn.vpl ./Fig/avo-weightedscn.vpl','SideBySideAniso')#Result('comp5','./Fig/cmpb.vpl ./Fig/avo-semblancenmo.vpl ./Fig/avo-abnmo.vpl ./Fig/avo-weightednmo.vpl','SideBySideAniso')#Result('comp6','./Fig/cmpb.vpl ./Fig/avo-semblanceinmo.vpl ./Fig/avo-abinmo.vpl ./Fig/avo-weightedinmo.vpl','SideBySideAniso')

    #Flow('test1','cmpa','vscan half=n avosemblance=n semblance=y v0=2 dv=0.01 nv=101 type=s | clip2 lower=0')#Flow('test2','cmpa','vscan half=n avosemblance=y semblance=y v0=2 dv=0.01 nv=101 type=a | clip2 lower=0')

    #Plot('test1',#'''#grey color=j allpos=y title="%s" pclip=100 labelsz=14 labelfat=2 font=4 titlesz=20 titlefat=2#''')#Plot('test2',#'''#grey color=j allpos=y title="%s" pclip=100 labelsz=14 labelfat=2 font=4 titlesz=20 titlefat=2#''')#Result('test','test1 test2','SideBySideAniso')

    Flow('vcomp','vrms avo-semblancepik avo-abpik avo-similarity-weightedpik','math output="input/1000" | cat axis=2 ${SOURCES[1:4]}')Result('vcomp','graph screenratio=0.6 dash=0,3,5,1 plotcol="7,3,5,2" title="Velocity comparison" label2=Velocity unit2="km/s" label1=Time unit1=s')

    End()

  • Chen et al. 9 Similarity-weighted semblance

    Figure 5: Comparison between the true velocity and picked velocities for the third syntheticexample with class II AVO anomalies. Black solid line denotes the true velocity. Green longdash line corresponds to the picked velocity by traditional semblance. Red dot dash linecorresponds to the picked velocity by AB semblance. Blue dash line corresponds to thepicked velocity by similarity-weighted semblance.

    TCCS-9

    from rsf.proj import *

    Flow('vrms',None, 'math d1=0.004 n1=1001 o1=0 output="x1*125+2000+50*sin(9*x1)" ')

    Flow('synt',None, ''' spike d1=0.004 n1=1001 | noise rep=y seed=2006 | cut n1=100 | bandpass flo=4 fhi=20 | spray axis=2 n=141 d=25 o=0 label=Offset unit=m ''')

    Flow('cmpa','synt vrms', 'inmo velocity=${SOURCES[1]} half=n | noise seed=2007 var=1e-10 | put d2=0.025 label2="Offset" unit2="km" ')

    Flow('top','synt','window n1=400')Flow('mid','synt', 'window f1=400 n1=300 | math output="input*(1-x2*%g)" ' % (2.0/3500))Flow('bot','synt','window f1=700')

    Flow('cmpb','top mid bot vrms', ''' cat axis=1 ${SOURCES[1:3]} | inmo velocity=${SOURCES[3]} half=n | noise seed=2007 var=1e-10 | put d2=0.025 label2="Offset" unit2="km" ''')

    Result('cmpa','grey title="CMP" clip=0.74 labelsz=14 labelfat=2 font=4 titlesz=20 titlefat=2')Result('cmpb','grey title="CMP with AVO" clip=0.74 labelsz=14 labelfat=2 font=4 titlesz=20 titlefat=2')

    #Flow('ref','cmpa','window n2=1')#Flow('ref','abnmo','stack')Flow('ref','synt','window n2=1')

    dat='cmpa'for typ in ('semblance','ab','weighted','similarity-weighted'):scn=typ+'scn'if typ == 'similarity-weighted':Flow(scn,[dat,'ref'],'simivscan thr=0.4 half=n v0=2 dv=0.01 nv=101 type=semblance weight=y nb=5 ref=${SOURCES[1]} | clip2 lower=0')else:Flow(scn,dat,'vscan half=n v0=2 dv=0.01 nv=101 weight=y type=%s nb=5 | clip2 lower=0'%typ)Plot(scn+'0',scn,'''grey color=j allpos=y title="%s" pclip=100 labelsz=14 labelfat=2 font=4 titlesz=20 titlefat=2'''%typ)pik=typ+'pik'Flow(pik,scn,'scale axis=2 | pick rect1=50')Plot(pik, ''' graph yreverse=y transp=y min2=2 max2=3 pad=n plotcol=7 plotfat=15 wanttitle=n wantaxis=n ''')Result(scn,[scn+'0',pik],'Overlay')nmo = typ + 'nmo'Flow(nmo,[dat,pik],'nmo half=n velocity=${SOURCES[1]} str=0.1 ')Result(nmo,'''grey title="%s"grid2=y gridcol=6 gridfat=7 g2num=0.5 clip=0.74 labelsz=14 labelfat=2 font=4 titlesz=20 titlefat=2''' % typ)

    inmo = typ + 'inmo'Flow(inmo,[nmo,pik],'inmo half=n velocity=${SOURCES[1]} str=0.4')Result(inmo,'''grey title="%s" clip=0.74 labelsz=14 labelfat=2 font=4 titlesz=20 titlefat=2''' % typ)

    #Flow('ref','cmpa','window n2=1')Flow('ref2','avo-abnmo','stack')#Flow('ref','synt','window n2=1')

    dat='cmpb'for typ1 in ('semblance','ab','weighted','similarity-weighted'):typ='avo-'+typ1scn=typ+'scn'

    if typ == 'avo-similarity-weighted':Flow(scn,[dat,'ref2'],'simivscan thr=0.1 half=n v0=2 dv=0.01 nv=101 weight=y type=avo nb=10 ref=${SOURCES[1]} | clip2 lower=0')elif typ=='avo-semblance':Flow(scn,dat,'vscan half=n v0=2 dv=0.01 nv=101 weight=y type=semb nb=10 | clip2 lower=0')elif typ == 'avo-weighted':Flow(scn,dat,'vscan half=n v0=2 dv=0.01 nv=101 weight=y type=weighted nb=10 nb=10| clip2 lower=0')else:Flow(scn,dat,'vscan half=n v0=2 dv=0.01 nv=101 weight=y type=avo nb=5 nb=10 | clip2 lower=0')

    Plot(scn+'0',scn,'''grey color=j allpos=y title="%s" pclip=100 labelsz=14 labelfat=2 font=4 titlesz=20 titlefat=2'''%typ)pik=typ+'pik'Flow(pik,scn,'scale axis=2 | pick rect1=50')Plot(pik, ''' graph yreverse=y transp=y min2=2 max2=3 pad=n plotcol=7 plotfat=15 wanttitle=n wantaxis=n ''')Result(scn,[scn+'0',pik],'Overlay')nmo = typ + 'nmo'Flow(nmo,[dat,pik],'nmo half=n velocity=${SOURCES[1]} str=0.1 ')Result(nmo,'''grey title="%s"grid2=y gridcol=6 gridfat=7 g2num=0.5 clip=0.74 labelsz=14 labelfat=2 font=4 titlesz=20 titlefat=2''' % typ)

    inmo = typ + 'inmo'Flow(inmo,[nmo,pik],'inmo half=n velocity=${SOURCES[1]} str=0.4')Result(inmo,'''grey title="%s" clip=0.74 labelsz=14 labelfat=2 font=4 titlesz=20 titlefat=2''' % typ)

    Result('synth-comp1','./Fig/cmpa.vpl ./Fig/semblancescn.vpl ./Fig/abscn.vpl ./Fig/similarity-weightedscn.vpl','SideBySideAniso')Result('synth-comp2','./Fig/cmpb.vpl ./Fig/avo-semblancescn.vpl ./Fig/avo-abscn.vpl ./Fig/avo-similarity-weightedscn.vpl','SideBySideAniso')

    #Result('comp2','./Fig/cmpa.vpl ./Fig/semblancenmo.vpl ./Fig/abnmo.vpl ./Fig/weightednmo.vpl','SideBySideAniso')#Result('comp3','./Fig/cmpa.vpl ./Fig/semblanceinmo.vpl ./Fig/abinmo.vpl ./Fig/weightedinmo.vpl','SideBySideAniso')

    #Result('comp4','./Fig/cmpb.vpl ./Fig/avo-semblancescn.vpl ./Fig/avo-abscn.vpl ./Fig/avo-weightedscn.vpl','SideBySideAniso')#Result('comp5','./Fig/cmpb.vpl ./Fig/avo-semblancenmo.vpl ./Fig/avo-abnmo.vpl ./Fig/avo-weightednmo.vpl','SideBySideAniso')#Result('comp6','./Fig/cmpb.vpl ./Fig/avo-semblanceinmo.vpl ./Fig/avo-abinmo.vpl ./Fig/avo-weightedinmo.vpl','SideBySideAniso')

    #Flow('test1','cmpa','vscan half=n avosemblance=n semblance=y v0=2 dv=0.01 nv=101 type=s | clip2 lower=0')#Flow('test2','cmpa','vscan half=n avosemblance=y semblance=y v0=2 dv=0.01 nv=101 type=a | clip2 lower=0')

    #Plot('test1',#'''#grey color=j allpos=y title="%s" pclip=100 labelsz=14 labelfat=2 font=4 titlesz=20 titlefat=2#''')#Plot('test2',#'''#grey color=j allpos=y title="%s" pclip=100 labelsz=14 labelfat=2 font=4 titlesz=20 titlefat=2#''')#Result('test','test1 test2','SideBySideAniso')

    Flow('vcomp','vrms avo-semblancepik avo-abpik avo-similarity-weightedpik','math output="input/1000" | cat axis=2 ${SOURCES[1:4]}')Result('vcomp','graph screenratio=0.6 dash=0,3,5,1 plotcol="7,3,5,2" title="Velocity comparison" label2=Velocity unit2="km/s" label1=Time unit1=s')

    End()

  • Chen et al. 10 Similarity-weighted semblance

    Figure 6: Comparison between semblance spectra for field data. Left: CMP gather. Mid-dle left: using traditional semblance. Middle right: using AB semblance. Right: usingsimilarity-weighted semblance.

    TCCS-9

    from rsf.proj import *

    # Donwload dataFetch('midpts.hh','midpts')

    # Select a CMP gather, muteFlow('bei','midpts.hh', ''' window n3=1 | dd form=native | mutter half=n v0=1.5 | put label1=Time unit1=s label2=Offset unit2=km | math output="input/4000000" ''')

    #Flow('refa','cmpa','window n2=1')Flow('refa','abnmo','snrstack')#Flow('refa','modl','window n3=1 | window n2=1')

    dat='bei'Result(dat,'grey title="CMP" clip=0.99 labelsz=14 labelfat=2 font=4 titlesz=20 titlefat=2')for typ in ('semblance','ab','weighted','similarity-weighted'):scn=typ+'scn'

    if typ == 'similarity-weighted':Flow(scn,[dat,'refa'],'simivscan thr=0.3 half=n v0=1.4 nv=111 dv=0.01 semblance=y type=%s ref=${SOURCES[1]} nb=10 | clip2 lower=0'%typ)else:Flow(scn,dat,'vscan half=n v0=1.4 nv=111 dv=0.01 semblance=y type=%s nb=10 | clip2 lower=0'%typ)

    if typ=='weighted':Plot(scn,scn,'''grey color=j allpos=y title="%s" pclip=80 labelsz=14 labelfat=2 font=4 titlesz=20 titlefat=2'''%typ)else:Plot(scn,scn,'''grey color=j allpos=y title="%s" scalebar=n pclip=100 clip=0.3 labelsz=14 labelfat=2 font=4 titlesz=20 titlefat=2'''%typ)pik=typ+'pik'Flow(pik,scn,'scale axis=2 | pick rect1=5')Plot(pik, ''' graph yreverse=y transp=y min2=1.4 max2=2.51 pad=n plotcol=7 plotfat=15 wanttitle=n wantaxis=n scalebar=n simbolfat=10 ''')Result(scn+'o',[scn,pik],'Overlay')

    ## Do NMOnmo = typ + 'nmo'Flow(nmo,[dat,pik],'nmo half=n velocity=${SOURCES[1]} str=0.1 ')Result(nmo,'''grey title="(%s)"grid2=y gridcol=6 gridfat=7 g2num=0.5 clip=0.99 labelsz=14 labelfat=2 font=4 titlesz=20 titlefat=2''' % typ)

    inmo = typ + 'inmo'Flow(inmo,[nmo,pik],'inmo half=n velocity=${SOURCES[1]} str=0.4')Result(inmo,'''grey title="(%s)" clip=0.99 labelsz=14 labelfat=2 font=4 titlesz=20 titlefat=2''' % typ)

    #Result('comp1','./Fig/bei.vpl ./Fig/semblancescn.vpl ./Fig/abscn.vpl ./Fig/weightedscn.vpl','SideBySideAniso')Result('comp1','./Fig/bei.vpl ./Fig/semblancescno.vpl ./Fig/abscno.vpl ./Fig/similarity-weightedscno.vpl','SideBySideAniso')#Result('comp2','./Fig/bei.vpl ./Fig/semblancenmo.vpl ./Fig/abnmo.vpl ./Fig/weightednmo.vpl','SideBySideAniso')#Result('comp3','./Fig/bei.vpl ./Fig/semblanceinmo.vpl ./Fig/abinmo.vpl ./Fig/weightedinmo.vpl','SideBySideAniso')

    End()

  • Chen et al. 11 Similarity-weighted semblance

    semblance. The stacked data using the proposed approach can obtain better stacked resultwith stronger stacked energy, which indicates a more precise picked velocity. The compar-ison between Figures 8a and 8b is not very obvious. However, when we zoomed two partsfrom the original stacked sections, as shown in Figures 8c and 8d, we can find significantimprovement. The two zoomed parts are highlighted by the two frame boxes in Figures 8aand 8b. In this example, the reference trace is chosen as the traditionally stacked trace.

    Figure 7: A prestack dataset from the Gulf of Mexico.

    DISCUSSION

    Velocity analysis is of exceptional importance to the whole seismic data processing tasksand the NMO based velocity picking can provide the very initial velocity model for allthe other velocity analysis approaches. Most of the current velocity-picking procedures arebased on manual endeavors and the resolution of the velocity spectrum greatly affects thefinally picked velocity. The above two reasons make the subject of this paper significant.Even with automatic picking algorithms, the proposed similarity-weighted semblance canstill be superior than the traditional semblance, which has been demonstrated by the thirdsynthetic and the second field data examples.

    When implementing the proposed algorithm, we also need to calculate the traditional

    TCCS-9

    from rsf.proj import *def Grey(data,other): Result(data,'grey label2=Midpoint unit2="km" clip=1.84785e+06 label1=Time unit1="s" title="" wherexlabel=t wanttitle=y wheretitle=b screenratio=1.4 max1=2.5 %s '%other)# Download dataFetch('beinew.HH','midpts')

    # Set dimensionsFlow('gulf','beinew.HH', ''' dd form=native | put label1=Time unit1=s label2=Half-Offset unit2=km label3=Midpoint unit3=km | window f2=4 ''')

    # DisplayResult('gulf', ''' window min1=0.5 max1=2.5 max2=1.5 |byte | transp plane=23 | grey3 flat=n frame1=500 frame2=160 frame3=3 title="Gulf of Mexico Data" point1=0.8 point2=0.8 ''')

    # Velocity scanFlow('vscan-gulf','gulf', 'vscan v0=1.5 dv=0.02 nv=51 semblance=y', split=[3,250], reduce='cat')

    Result('vscan-gulf', ''' byte allpos=y gainpanel=all pclip=100 | transp plane=23 | grey3 flat=n frame1=750 frame2=100 frame3=25 label1=Time unit1=s color=j label3=Velocity unit3=km/s label2=Midpoint unit2=km title="Velocity Scan (traditional)" point1=0.8 point2=0.8 ''')

    # Velocity pickingFlow('vnmo-gulf','vscan-gulf','pick rect1=5 rect2=5')

    Result('vnmo-gulf', ''' grey color=j allpos=y bias=1.5 clip=0.7 scalebar=y barreverse=y barunit=km/s label2=Midpoint unit2=km label1=Time unit1=s title="NMO Velocity" ''' )

    # Stacking##########

    Flow('nmo-gulf','gulf vnmo-gulf','nmo velocity=${SOURCES[1]}')Flow('stack-gulf','nmo-gulf','stack')

    # DMO########################Flow('nmo0-gulf','gulf vnmo-gulf','nmo velocity=${SOURCES[1]}')Flow('dstack-gulf','nmo0-gulf', ''' window f1=250 | logstretch | fft1 | transp plane=13 memsize=1000 | finstack | transp memsize=1000 | fft1 inv=y | logstretch inv=y | pad beg1=250 | put unit1=s ''')

    Plot('stack-gulf','grey title="Traditional Semblance"')Plot('dstack-gulf','grey title="DMO Stack"')Result('stackcomp','stack-gulf dstack-gulf','SideBySideAniso')

    ## Dix inversionFlow('semblance-gulf','vscan-gulf vnmo-gulf','slice pick=${SOURCES[1]}')Flow('vesti-gulf','vnmo-gulf semblance-gulf','dix weight=${SOURCES[1]} rect1=100 rect2=10')Flow('vestiz-gulf','vesti-gulf','time2depth velocity=${SOURCES[0]} intime=y') Result('vesti-gulf', ''' grey color=j allpos=y bias=1.5 clip=0.7 scalebar=y barreverse=y barunit=km/s label2=Midpoint unit2=km label1=Time unit1=s title="Interval Velocity" ''' )################################################################### Similarity-weighted semblance###############################################################Flow('stack-ref','stack-gulf','spray axis=2 n=48 d=0.0335 o3=0.132')

    Flow('simivscan-gulf','gulf stack-ref', 'simivscan thr=0.2 ref=${SOURCES[1]} v0=1.4 dv=0.01 nv=111 semblance=y type="similarity-weighted"', split=[3,250], reduce='cat')Result('simivscan-gulf', ''' byte allpos=y gainpanel=all pclip=100 | transp plane=23 | grey3 flat=n frame1=750 frame2=50 frame3=25 movie=2 label1=Time unit1=s color=j label3=Velocity unit3=km/s label2=Midpoint unit2=km title="Velocity Scan (new)" point1=0.8 point2=0.8 ''')

    # Velocity pickingFlow('simivnmo-gulf','simivscan-gulf','pick rect1=5 rect2=5')

    Result('simivnmo-gulf', ''' grey color=j allpos=y bias=1.5 clip=0.7 scalebar=y barreverse=y barunit=km/s label2=Midpoint unit2=km label1=Time unit1=s title="NMO Velocity" ''' )# Stacking##########

    Flow('siminmo-gulf','gulf simivnmo-gulf','nmo velocity=${SOURCES[1]}')Flow('simistack-gulf','siminmo-gulf','stack')

    # DMO########################Flow('siminmo0-gulf','gulf simivnmo-gulf','nmo velocity=${SOURCES[1]}')Flow('simidstack-gulf','siminmo0-gulf', ''' window f1=250 | logstretch | fft1 | transp plane=13 memsize=1000 | finstack | transp memsize=1000 | fft1 inv=y | logstretch inv=y | pad beg1=250 | put unit1=s ''')

    Plot('simistack-gulf','grey title="Similarity Semblance"')Plot('simidstack-gulf','grey title="DMO Stack"')Result('simistackcomp','simistack-gulf simidstack-gulf','SideBySideAniso')

    ## Dix inversionFlow('simisemblance-gulf','simivscan-gulf simivnmo-gulf','slice pick=${SOURCES[1]}')Flow('simivesti-gulf','simivnmo-gulf simisemblance-gulf','dix weight=${SOURCES[1]} rect1=100 rect2=10')Flow('simivestiz-gulf','simivesti-gulf','time2depth velocity=${SOURCES[0]} intime=y') Result('simivesti-gulf', ''' grey color=j allpos=y bias=1.5 clip=0.7 scalebar=y barreverse=y barunit=km/s label2=Midpoint unit2=km label1=Time unit1=s title="Interval Velocity" ''' ) Grey('stack-gulf','title="Traditional approach" min1=0.5')Grey('simistack-gulf','title="Proposed approach" min1=0.5')

    Flow('stack-A','stack-gulf','window min1=0.6 max1=0.8 min2=13.5 15.8')Flow('simistack-A','simistack-gulf','window min1=0.6 max1=0.8 min2=13.5 15.8')Grey('stack-A','screenratio=0.75 max1=0.8 ')Grey('simistack-A','screenratio=0.75 max1=0.8')

    Flow('stack-A','stack-gulf','window min1=0.6 max1=0.8 min2=13.5 max2=15.8')Flow('simistack-A','simistack-gulf','window min1=0.6 max1=0.8 min2=13.5 max2=15.8')Grey('stack-A','screenratio=0.75 max1=0.8 title="Traditional approach"')Grey('simistack-A','screenratio=0.75 max1=0.8 title="Proposed approach"')

    Flow('stack-B','stack-gulf','window min1=1.25 max1=1.5 min2=10 max2=12.5')Flow('simistack-B','simistack-gulf','window min1=1.25 max1=1.5 min2=10 max2=12.5')Grey('stack-B','screenratio=0.75 max1=1.5 title="Traditional Semblance" clip=3.84785e+06 color=g')Grey('simistack-B','screenratio=0.75 max1=1.5 title="Similarity Semblance" clip=3.84785e+06 color=g')

    ## Creating frameboxx=13.5y=0.6w=2.3w1=0.22

    Flow('frame.asc',None,'echo %s n1=10 data_format=ascii_float in=$TARGET'% \string.join(map(str,(x,y,x+w,y,x+w,y+w1,x,y+w1,x,y))))Plot('frame','frame.asc','''dd type=complex form=native |graph min1=7.705 max1=16.0465 min2=0 max2=2.5 pad=n plotfat=15 plotcol=2 screenratio=1.4wantaxis=n wanttitle=n yreverse=y ''')

    Result('stack','Fig/stack-gulf.vpl frame','Overlay')Result('simistack','Fig/simistack-gulf.vpl frame','Overlay')

    End()

  • Chen et al. 12 Similarity-weighted semblance

    (a) (b)

    (c) (d)

    Figure 8: (a) Stacked data using automatically picked NMO velocity from the tra-ditional semblance. (b) Stacked data using automatically picked NMO velocity fromthe similarity-weighted semblance. (c) Zoomed section from (a). (b) Zoomed sectionfrom (b). The two zoomed parts are highlighted by the frame boxes in (a) and (b).

    TCCS-9

    from rsf.proj import *def Grey(data,other): Result(data,'grey label2=Midpoint unit2="km" clip=1.84785e+06 label1=Time unit1="s" title="" wherexlabel=t wanttitle=y wheretitle=b screenratio=1.4 max1=2.5 %s '%other)# Download dataFetch('beinew.HH','midpts')

    # Set dimensionsFlow('gulf','beinew.HH', ''' dd form=native | put label1=Time unit1=s label2=Half-Offset unit2=km label3=Midpoint unit3=km | window f2=4 ''')

    # DisplayResult('gulf', ''' window min1=0.5 max1=2.5 max2=1.5 |byte | transp plane=23 | grey3 flat=n frame1=500 frame2=160 frame3=3 title="Gulf of Mexico Data" point1=0.8 point2=0.8 ''')

    # Velocity scanFlow('vscan-gulf','gulf', 'vscan v0=1.5 dv=0.02 nv=51 semblance=y', split=[3,250], reduce='cat')

    Result('vscan-gulf', ''' byte allpos=y gainpanel=all pclip=100 | transp plane=23 | grey3 flat=n frame1=750 frame2=100 frame3=25 label1=Time unit1=s color=j label3=Velocity unit3=km/s label2=Midpoint unit2=km title="Velocity Scan (traditional)" point1=0.8 point2=0.8 ''')

    # Velocity pickingFlow('vnmo-gulf','vscan-gulf','pick rect1=5 rect2=5')

    Result('vnmo-gulf', ''' grey color=j allpos=y bias=1.5 clip=0.7 scalebar=y barreverse=y barunit=km/s label2=Midpoint unit2=km label1=Time unit1=s title="NMO Velocity" ''' )

    # Stacking##########

    Flow('nmo-gulf','gulf vnmo-gulf','nmo velocity=${SOURCES[1]}')Flow('stack-gulf','nmo-gulf','stack')

    # DMO########################Flow('nmo0-gulf','gulf vnmo-gulf','nmo velocity=${SOURCES[1]}')Flow('dstack-gulf','nmo0-gulf', ''' window f1=250 | logstretch | fft1 | transp plane=13 memsize=1000 | finstack | transp memsize=1000 | fft1 inv=y | logstretch inv=y | pad beg1=250 | put unit1=s ''')

    Plot('stack-gulf','grey title="Traditional Semblance"')Plot('dstack-gulf','grey title="DMO Stack"')Result('stackcomp','stack-gulf dstack-gulf','SideBySideAniso')

    ## Dix inversionFlow('semblance-gulf','vscan-gulf vnmo-gulf','slice pick=${SOURCES[1]}')Flow('vesti-gulf','vnmo-gulf semblance-gulf','dix weight=${SOURCES[1]} rect1=100 rect2=10')Flow('vestiz-gulf','vesti-gulf','time2depth velocity=${SOURCES[0]} intime=y') Result('vesti-gulf', ''' grey color=j allpos=y bias=1.5 clip=0.7 scalebar=y barreverse=y barunit=km/s label2=Midpoint unit2=km label1=Time unit1=s title="Interval Velocity" ''' )################################################################### Similarity-weighted semblance###############################################################Flow('stack-ref','stack-gulf','spray axis=2 n=48 d=0.0335 o3=0.132')

    Flow('simivscan-gulf','gulf stack-ref', 'simivscan thr=0.2 ref=${SOURCES[1]} v0=1.4 dv=0.01 nv=111 semblance=y type="similarity-weighted"', split=[3,250], reduce='cat')Result('simivscan-gulf', ''' byte allpos=y gainpanel=all pclip=100 | transp plane=23 | grey3 flat=n frame1=750 frame2=50 frame3=25 movie=2 label1=Time unit1=s color=j label3=Velocity unit3=km/s label2=Midpoint unit2=km title="Velocity Scan (new)" point1=0.8 point2=0.8 ''')

    # Velocity pickingFlow('simivnmo-gulf','simivscan-gulf','pick rect1=5 rect2=5')

    Result('simivnmo-gulf', ''' grey color=j allpos=y bias=1.5 clip=0.7 scalebar=y barreverse=y barunit=km/s label2=Midpoint unit2=km label1=Time unit1=s title="NMO Velocity" ''' )# Stacking##########

    Flow('siminmo-gulf','gulf simivnmo-gulf','nmo velocity=${SOURCES[1]}')Flow('simistack-gulf','siminmo-gulf','stack')

    # DMO########################Flow('siminmo0-gulf','gulf simivnmo-gulf','nmo velocity=${SOURCES[1]}')Flow('simidstack-gulf','siminmo0-gulf', ''' window f1=250 | logstretch | fft1 | transp plane=13 memsize=1000 | finstack | transp memsize=1000 | fft1 inv=y | logstretch inv=y | pad beg1=250 | put unit1=s ''')

    Plot('simistack-gulf','grey title="Similarity Semblance"')Plot('simidstack-gulf','grey title="DMO Stack"')Result('simistackcomp','simistack-gulf simidstack-gulf','SideBySideAniso')

    ## Dix inversionFlow('simisemblance-gulf','simivscan-gulf simivnmo-gulf','slice pick=${SOURCES[1]}')Flow('simivesti-gulf','simivnmo-gulf simisemblance-gulf','dix weight=${SOURCES[1]} rect1=100 rect2=10')Flow('simivestiz-gulf','simivesti-gulf','time2depth velocity=${SOURCES[0]} intime=y') Result('simivesti-gulf', ''' grey color=j allpos=y bias=1.5 clip=0.7 scalebar=y barreverse=y barunit=km/s label2=Midpoint unit2=km label1=Time unit1=s title="Interval Velocity" ''' ) Grey('stack-gulf','title="Traditional approach" min1=0.5')Grey('simistack-gulf','title="Proposed approach" min1=0.5')

    Flow('stack-A','stack-gulf','window min1=0.6 max1=0.8 min2=13.5 15.8')Flow('simistack-A','simistack-gulf','window min1=0.6 max1=0.8 min2=13.5 15.8')Grey('stack-A','screenratio=0.75 max1=0.8 ')Grey('simistack-A','screenratio=0.75 max1=0.8')

    Flow('stack-A','stack-gulf','window min1=0.6 max1=0.8 min2=13.5 max2=15.8')Flow('simistack-A','simistack-gulf','window min1=0.6 max1=0.8 min2=13.5 max2=15.8')Grey('stack-A','screenratio=0.75 max1=0.8 title="Traditional approach"')Grey('simistack-A','screenratio=0.75 max1=0.8 title="Proposed approach"')

    Flow('stack-B','stack-gulf','window min1=1.25 max1=1.5 min2=10 max2=12.5')Flow('simistack-B','simistack-gulf','window min1=1.25 max1=1.5 min2=10 max2=12.5')Grey('stack-B','screenratio=0.75 max1=1.5 title="Traditional Semblance" clip=3.84785e+06 color=g')Grey('simistack-B','screenratio=0.75 max1=1.5 title="Similarity Semblance" clip=3.84785e+06 color=g')

    ## Creating frameboxx=13.5y=0.6w=2.3w1=0.22

    Flow('frame.asc',None,'echo %s n1=10 data_format=ascii_float in=$TARGET'% \string.join(map(str,(x,y,x+w,y,x+w,y+w1,x,y+w1,x,y))))Plot('frame','frame.asc','''dd type=complex form=native |graph min1=7.705 max1=16.0465 min2=0 max2=2.5 pad=n plotfat=15 plotcol=2 screenratio=1.4wantaxis=n wanttitle=n yreverse=y ''')

    Result('stack','Fig/stack-gulf.vpl frame','Overlay')Result('simistack','Fig/simistack-gulf.vpl frame','Overlay')

    End()

  • Chen et al. 13 Similarity-weighted semblance

    semblance in order to obtain a stacked reference trace. The inappropriate traditional stack-ing result will result in inappropriate calculation of the similarity-weighted semblance. Inpractice, we need to iterate several times to obtain an acceptable reference trace. Becauseof the iteration and the calculation of the local similarity, the proposed semblance willhave some extra computational cost. However, the computational efficiency is still accept-able, and considering that the semblance calculation can be parallelized CMP by CMP, thecomputational cost is not a serious issue.

    The proposed similarity-weighted semblance can be conveniently implemented based onthe traditional semblance calculation framework. The only change is to weight each traceusing the local similarity. The local similarity is a robust local attribute that can be easilycalculated and has found many applications in exploration geophysics field (Liu et al., 2009;Chen and Fomel, 2015). Thus, the proposed approach has the potential to be widely usedin the industry.

    CONCLUSIONS

    We have proposed a general formulation for the weighted semblance. The traditional sem-blance is no more than a weighted semblance with constant weight. The AB semblancecorresponds to a weighted semblance with a trend function derived from the data. With aweighting function using the local similarity between each trace and a reference trace, theacquired semblance spectra can get an obvious higher resolution, which is picking friendly.The proposed approach can also be combined with the AB semblance with an increasedresolution and ability for handling AVO anomalies. Three kinds of synthetic example andtwo field data examples demonstrate the performance of our proposed approach.

    ACKNOWLEDGMENTS

    We would like to thank Jingye Li, Jiang Yuan, Zhaoyu Jin, Keling Chen, Pan Deng, JamesRickett, Jonathan Blair Ajo-Franklin and two anonymous reviewers for helpful commentsand suggestions. Yangkang Chen would like to thank Sergey Fomel for inspiring discussionson the local similarity algorithm and the Texas Consortium for Computational Seismology(TCCS) for financial support. This paper and all the figures are prepared with the Mada-gascar software package, which is an open-source research environment for reproduciblecomputational experiments (Fomel et al., 2013).

    APPENDIX: REVIEW OF AB SEMBLANCE

    Suppose that the weight w(j, k) in equation 2 has a trend of trace amplitude a(j, k),

    w(j, k) = A(j) +B(j)φ(j, k), (A-1)

    where φ(j, k) is a known function, and A(j) and B(j) are two coefficients. In the simplestform, φ(j, k) can be chosen as the offset at trace k. In order to estimate A(j) and B(j), wecan turn to minimize the following objection function of misfit between the trend and trace

    TCCS-9

  • Chen et al. 14 Similarity-weighted semblance

    amplitude:

    Fj =N−1∑k=0

    (a(j, k)−A(j)−B(j)φ(j, k))2 . (A-2)

    Taking derivatives with respect to A(j) and B(j) in equation A-2, setting them to zero, andsolving the two linear equations, we can obtain the the following two least-squares fittingcoefficients:

    A(j) =

    N−1∑k=0

    φ(j, k)N−1∑k=0

    a(j, k)φ(j, k)−N−1∑k=0

    φ2(j, k)N−1∑k=0

    a(j, k)

    (N−1∑k=0

    φ(j, k)

    )2−N

    N−1∑k=0

    φ2(j, k)

    , (A-3)

    B(j) =

    N−1∑k=0

    φ(j, k)N−1∑k=0

    a(j, k)−NN−1∑k=0

    a(j, k)φ(j, k)

    (N−1∑k=0

    φ(j, k)

    )2−N

    N−1∑k=0

    φ2(j, k)

    . (A-4)

    Substituting w(j, k) = A(j) +B(j)φ(j, k) into equation 2 leads to the AB semblance.

    REFERENCES

    Chen, J., C. A. Zelt, and P. Jaiswal, 2013, A case history: Application of frequency-dependent traveltime tomography and full waveform inversion to a known near-surfacetarget: 83nd Annual International Meeting, SEG, Expanded Abstracts, 1743–1748.

    Chen, Y., and S. Fomel, 2015, Random noise attenuation using local signal-and-noise or-thogonalization: Geophysics, in print.

    Fomel, S., 2007, Local seismic attributes: Geophysics, 72, A29–A33.——–, 2009, Velocity analysis using AB semblance: Geophysical Prospecting, 57, 311–321.Fomel, S., and E. Landa, 2014, Structural uncertainty of time-migrated seismic images:

    Journal of Applied Geophysics, 101, 27–30.Fomel, S., P. Sava, I. Vlad, Y. Liu, and V. Bashkardin, 2013, Madagascar open-source

    software project: Journal of Open Research Software, 1, e8.Guitton, A., G. Ayeni, and E. Daz, 2012, Constrained full-waveform inversion by model

    reparameterization: Geophysics, 77, R117R127.Hale, D., 2009, Strcuture-oriented smoothing and semblance: Technical Report CWP-635,

    Center for Wave Phenomena, Colorado School of Mines.Li, S., 2013, Wave-equation migration velocity analysis by non-stationary focusing: 83nd

    Annual International Meeting, SEG, Expanded Abstracts, 1110–1115.Li, S., A. Vladimirsky, and S. Fomel, 2013, First-break traveltime tomography with the

    double-square-root eikonal equation: Geophysics, 78, U89U101.Liu, G., S. Fomel, L. Jin, and X. Chen, 2009, Stacking seismic data using local correlation:

    Geophysics, 74, V43–V48.Luo, S., and D. Hale, 2012, Velocity analysis using weighted semblance: Geophysics, 77,

    U15–U22.

    TCCS-9

  • Chen et al. 15 Similarity-weighted semblance

    Neidell, N. S., and M. T. Taner, 1971, Semblance and other coherency measures for multi-channel data: Geophysics, 36, 482–297.

    Noble, M., P. Thierry, C. Taillandier, and H. Calandra, 2010, High-performance 3D first-arrival traveltime tomography: The Leading Edge, 29, 86–93.

    Osypov, K., 2000, Robust refraction tomography: 70th Annnual International Meeting,SEG, Expanded Abstracts, 2032–2035.

    Rutherford, S. R., and R. H. Williams, 1989, Amplitude-versus-offset variations in gassands: Geophysics, 54, 680–688.

    Sarkar, D., J. P. Castagna, and W. Lamb, 2001, AVO and velocity analysis: Geophysics,66, 1284–1293.

    Sava, P., and B. Biondi, 2004a, Wave-equation migration velocity analysis - I: Theory:Geophysical Prospecting, 52, 593–606.

    ——–, 2004b, Wave-equation migration velocity analysis - II: Subsalt imaging examples:Geophysical Prospecting, 52, 607–623.

    Taner, M. T., and F. Koehler, 1969, Velocity spectra - digital computer derivation andapplications of velocity functions: Geophysics, 34, 859–881.

    Virieux, J., and S. Operto, 2009, An overview of full-waveform inversion in explorationgeophysics: Geophysics, 74, WCC1–WCC26.

    Zhou, H., L. Amundsen, and G. Zhang, 2012, Fundamental issues in full waveform inversion:82nd Annual International Meeting, SEG, Expanded Abstracts, 1–5.

    Zhu, X., D. P. Sixta, and B. G. Angstman, 1992, Tomostatics: turning-ray tomography +static corrections: The Leading Edge, 11, 15–23.

    TCCS-9