Exemplo n.º 1
0
def main(args):
    # Load the stack
    stack = ice.Stack(args.stackfile)

    # Convert fps to interval (ms)
    interval = 1000 / args.fps
    cmap = ice.get_cmap(args.cmap)

    fig, ax = plt.subplots(figsize=(7, 11))
    ax.set_xlabel('X (m)')
    ax.set_ylabel('Y (m)')
    fig.set_tight_layout(True)

    # Calculate frames
    print('Creating frames for animation:')
    ims = []
    for i in tqdm(range(len(stack._datasets['data']))):
        ims.append(frame(i, stack, ax, cmap, args.clim))

    # Add colorbar
    '''
    cbar = plt.colorbar(ims[0][0], ax=ax)
    cbar.set_label('Velocity (m/day')
    '''

    # Create animation
    print('Saving animation to', args.save)
    anim = animation.ArtistAnimation(fig, ims, interval=interval, repeat=True)
    anim.save(args.save, dpi=args.dpi)
Exemplo n.º 2
0
def main(args):

    # Load the raster
    r = ice.Raster(args.rasterfile, band=args.band)

    fig, ax = plt.subplots()
    vmin, vmax = args.clim
    cmap = ice.get_cmap(args.cmap)
    im = ax.imshow(r.data, aspect='auto', vmin=vmin, vmax=vmax, cmap=cmap,
                   extent=args.xscale*r.hdr.extent)
    cbar = plt.colorbar(im, ax=ax, pad=0.02)

    plt.tight_layout()
    plt.show()
Exemplo n.º 3
0
def main(args):

    # Load the stack
    stack = ice.Stack(args.stackfile)

    # Check if requested dataset is 2D. If so, view it directly
    if stack[args.key].ndim == 2:
        mean = stack[args.key][()]
    # Otherwise, compute mean
    else:
        mean = stack.mean(key=args.key)

    # Load reference SAR image
    if args.ref is not None:
        sar = ice.Raster(rasterfile=args.ref)
        if sar.hdr != stack.hdr:
            sar.resample(stack.hdr)
        db = 10.0 * np.log10(sar.data)
        low = np.percentile(db.ravel(), 5)
        high = np.percentile(db.ravel(), 99.9)
    else:
        db = None

    fig, ax = plt.subplots()
    vmin, vmax = args.clim
    cmap = ice.get_cmap(args.cmap)
    if db is not None:
        ref = ax.imshow(db,
                        aspect='auto',
                        cmap='gray',
                        vmin=low,
                        vmax=high,
                        extent=stack.hdr.extent)
    im = ax.imshow(mean,
                   aspect='auto',
                   vmin=vmin,
                   vmax=vmax,
                   cmap=cmap,
                   extent=stack.hdr.extent,
                   alpha=args.alpha)
    cbar = plt.colorbar(im, ax=ax, pad=0.02)
    cbar.set_label(args.key)

    plt.show()

    if args.save is not None:
        out = ice.Raster(data=mean, hdr=stack.hdr)
        out.write_gdal(args.save, epsg=args.save_epsg)
Exemplo n.º 4
0
def main(args):

    # Load the stack
    stack = ice.Stack(args.stackfile)

    # Get frame
    if args.frame == 'initial':
        mean = stack.slice(0, key=args.key)
    elif args.frame == 'final':
        mean = stack.slice(stack.Nt - 1, key=args.key)
    elif args.frame == 'mean':
        mean = stack.mean(key=args.key)
    elif args.frame == 'std':
        mean = stack.std(key=args.key)
    else:
        raise ValueError('Unsupported frame type.')

    # If model directory is given, load model stack (full fit)
    mstack = None
    if args.mfile is not None:
        mstack = ice.Stack(args.mfile)

    # Load reference SAR image
    if args.ref is not None:
        sar = ice.Raster(rasterfile=args.ref)
        if sar.hdr != stack.hdr:
            sar.resample(stack.hdr)
        db = 10.0 * np.log10(sar.data.astype(np.float32))
        low = np.percentile(db.ravel(), 5)
        high = np.percentile(db.ravel(), 99.9)
    else:
        db = None

    # Initialize image plot
    fig, ax = plt.subplots()
    vmin, vmax = args.clim
    cmap = ice.get_cmap(args.cmap)
    if db is not None:
        ref = ax.imshow(db,
                        aspect='auto',
                        cmap='gray',
                        vmin=low,
                        vmax=high,
                        extent=stack.hdr.extent)
    im = ax.imshow(mean,
                   aspect='auto',
                   vmin=vmin,
                   vmax=vmax,
                   cmap=cmap,
                   extent=stack.hdr.extent,
                   alpha=args.alpha)
    cbar = plt.colorbar(im, ax=ax, pad=0.02)
    cbar.set_label(args.key)

    # Initialize plot for time series for a given pixel
    pts, axts = plt.subplots(figsize=(10, 6))

    # Define action for clicking on deformation map
    def printcoords(event):

        if event.inaxes != ax:
            return

        # Get cursor coordinates
        y, x = event.ydata, event.xdata

        # Print out pixel locaton
        i, j = stack.hdr.xy_to_imagecoord(x, y)
        print('Row: %d Col: %d' % (i, j))

        # Get time series for cursor location
        d = stack.timeseries(xy=(x, y), key=args.key)

        # Plot data and fit
        axts.clear()
        if args.sigma:
            w = stack.timeseries(xy=(x, y), key='weights')
            sigma = 1.0 / w
            axts.errorbar(stack.tdec, d, yerr=sigma, fmt='o')
        else:
            axts.plot(stack.tdec, d, 'o')

        if mstack is not None:
            fit = mstack.timeseries(xy=(x, y), key=args.mkey)
            axts.plot(mstack.tdec, fit, 'o')

        axts.set_xlabel('Year')
        axts.set_ylabel('Velocity')

        pts.canvas.draw()

    cid = fig.canvas.mpl_connect('button_press_event', printcoords)
    plt.show()
    fig.canvas.mpl_disconnect(cid)
Exemplo n.º 5
0
def main(args):
    # Load Stack
    stack = ice.Stack(args.stackfile)

    # Load reference SAR image
    if args.ref is not None:
        sar = ice.Raster(rasterfile=args.ref)
        if sar.hdr != stack.hdr:
            sar.resample(stack.hdr)
        db = 10.0 * np.log10(sar.data)
        low = np.percentile(db.ravel(), 5)
        high = np.percentile(db.ravel(), 99.9)
    else:
        db = None

    # Set up animation
    fig, ax = plt.subplots(figsize=args.figsize)
    data = stack._datasets[args.key]
    cmap = ice.get_cmap(args.cmap)

    # Add ref image if using
    if db is not None:
        ax.imshow(db,
                  aspect='auto',
                  cmap='gray',
                  vmin=low,
                  vmax=high,
                  extent=stack.hdr.extent)

    # Extract reference frame if index provided
    if args.rel_index is not None:
        data_ref = data[args.rel_index]
    else:
        data_ref = 0.0

    im = ax.imshow(data[0] - data_ref,
                   extent=stack.hdr.extent,
                   cmap=cmap,
                   clim=args.clim,
                   alpha=args.alpha)

    # Create title
    datestr = ice.tdec2datestr(stack.tdec[0])
    tx = ax.set_title(args.title + ' ' + datestr, fontweight='bold')

    ax.set_xlabel(args.xlabel)
    ax.set_ylabel(args.ylabel)

    # Add colorbar
    div = make_axes_locatable(ax)
    cax = div.append_axes('right', '5%', '5%')
    cb = fig.colorbar(im, cax=cax)
    cb.set_label(args.clabel)

    # Update the frame
    def animate(i):
        im.set_data(data[i] - data_ref)
        datestr = ice.tdec2datestr(stack.tdec[i])
        tx.set_text(args.title + ' ' + datestr)

    fig.set_tight_layout(True)

    print('Generating animation and saving to', args.save)
    interval = 1000 / args.fps  # Convert fps to interval in milliseconds
    anim = animation.FuncAnimation(fig,
                                   animate,
                                   interval=interval,
                                   frames=len(data),
                                   repeat=True)
    anim.save(args.save, dpi=args.dpi)

    if args.show:
        plt.show()
Exemplo n.º 6
0
def main(args):

    # Load the raster
    raster = ice.Raster(rasterfile=args.rasterfile)

    # Load reference SAR image
    if args.ref is not None:
        sar = ice.Raster(rasterfile=args.ref)
        if sar.hdr != raster.hdr:
            sar.resample(raster.hdr)
        db = 10.0 * np.log10(sar.data)
        low = np.percentile(db.ravel(), 5)
        high = np.percentile(db.ravel(), 99.9)
    else:
        db = None

    fig, ax = plt.subplots()
    vmin, vmax = args.clim
    cmap = ice.get_cmap(args.cmap)
    if db is not None:
        ref = ax.imshow(db, aspect='auto', cmap='gray', vmin=low, vmax=high,
                        extent=raster.hdr.extent)
    im = ax.imshow(raster.data, aspect='auto', vmin=vmin, vmax=vmax, cmap=cmap,
                   extent=raster.hdr.extent, alpha=args.alpha)

    # Define action for clicking on deformation map
    xpts = []; ypts = []
    def printcoords(event):

        global line

        if event.inaxes != ax:
            return

        # Get cursor coordinates if left-click
        if event.button == 1:
            y, x = event.ydata, event.xdata
            xpts.append(x)
            ypts.append(y)

            if line is None:
                line, = ax.plot(xpts, ypts, '-o')
            else:
                line.set_xdata(xpts)
                line.set_ydata(ypts)

        # Right-click clear the points
        elif event.button == 3:
            xpts.clear()
            ypts.clear()
            line.set_xdata(xpts)
            line.set_ydata(ypts)
           
        fig.canvas.draw() 

    cid = fig.canvas.mpl_connect('button_press_event', printcoords)
    plt.show()
    fig.canvas.mpl_disconnect(cid)

    # Save the points
    np.savetxt(args.output, np.column_stack((xpts, ypts)))