dl

Deep learning based operators
from matplotlib import pyplot as plt
import zarr
import colorcet
import moraine.cli as mc
from moraine.utils_ import is_cuda_available
import numpy as np
import holoviews as hv
from bokeh.models import WheelZoomTool
from holoviews import opts
hv.extension('bokeh')
hv.output(widget_location='bottom')
rslc_zarr = zarr.open('../CLI/raw/rslc.zarr/',mode='r')
ref_ = rslc_zarr[:,:,7]
sec_ = rslc_zarr[:,:,13]
#filtered_intf = _cli_n2f_cpu(ref,sec,depths=(10,10))
filtered_intf = _cli_n2f_np_in_gpu(ref_,sec_,depths=(0,0))
#filtered_intf = _cli_n2f_np_in_gpu(ref,sec,chunks=(2000,2000),depths=(0,0))
CPU times: user 3.44 s, sys: 565 ms, total: 4 s
Wall time: 998 ms

source

n2f

 n2f (rslc:str, intf:str, image_pairs:numpy.ndarray, chunks:tuple=None,
      out_chunks:tuple=None, depths:tuple=(0, 0), model:str=None,
      cuda:bool=False, processes=None, n_workers=None,
      threads_per_worker=None, rmm_pool_size=0.9, **dask_cluster_arg)

Noise2Fringe interferogram filtering.

Type Default Details
rslc str input: rslc stack, shape (nlines, width, nimages)
intf str output: filtered intfergrams stack, shape (nlines, width, nimage_pairs )
image_pairs ndarray input: image pairs
chunks tuple None parallel processing azimuth/range chunk size, optional. Default: rslc.chunks[:2]
out_chunks tuple None output chunks
depths tuple (0, 0) width of the boundary
model str None path to the model in onnx format, use the model comes with this package by default
cuda bool False if use cuda for processing, false by default
processes NoneType None use process for dask worker over thread, the default is True for cpu, only applied if cuda==False
n_workers NoneType None number of dask worker, the default is 1 for cpu, number of GPUs for cuda
threads_per_worker NoneType None number of threads per dask worker, the default is 1 for cpu, only applied if cuda==False
rmm_pool_size float 0.9 set the rmm pool size, only applied when cuda==True
dask_cluster_arg VAR_KEYWORD
logger = mc.get_logger()
rslc = './raw/rslc.zarr/'
intf = './dl/n2f_intf.zarr'
rslc_zarr = zarr.open(rslc,mode='r')
tnet = mr.TempNet.from_bandwidth(rslc_zarr.shape[-1], 1)
n2f(rslc,intf,tnet.image_pairs,chunks=(2500,1834))
2025-09-20 00:03:10 - log_args - INFO - running function: n2f
2025-09-20 00:03:10 - log_args - INFO - fetching args:
2025-09-20 00:03:10 - log_args - INFO - rslc = './raw/rslc.zarr/'
2025-09-20 00:03:10 - log_args - INFO - intf = './dl/n2f_intf.zarr'
2025-09-20 00:03:10 - log_args - INFO - image_pairs = array([[ 0,  1],
       [ 1,  2],
       [ 2,  3],
       [ 3,  4],
       [ 4,  5],
       [ 5,  6],
       [ 6,  7],
       [ 7,  8],
       [ 8,  9],
       [ 9, 10],
       [10, 11],
       [11, 12],
       [12, 13],
       [13, 14],
       [14, 15],
       [15, 16]], dtype=int32)
2025-09-20 00:03:10 - log_args - INFO - chunks = (2500, 1834)
2025-09-20 00:03:10 - log_args - INFO - out_chunks = None
2025-09-20 00:03:10 - log_args - INFO - depths = (0, 0)
2025-09-20 00:03:10 - log_args - INFO - model = None
2025-09-20 00:03:10 - log_args - INFO - cuda = False
2025-09-20 00:03:10 - log_args - INFO - processes = None
2025-09-20 00:03:10 - log_args - INFO - n_workers = None
2025-09-20 00:03:10 - log_args - INFO - threads_per_worker = None
2025-09-20 00:03:10 - log_args - INFO - rmm_pool_size = 0.5
2025-09-20 00:03:10 - log_args - INFO - dask_cluster_arg = {}
2025-09-20 00:03:10 - log_args - INFO - fetching args done.
2025-09-20 00:03:10 - zarr_info - INFO - ./raw/rslc.zarr/ zarray shape, chunks, dtype: (2500, 1834, 17), (1000, 1000, 1), complex64
2025-09-20 00:03:10 - n2f - INFO - processing azimuth chunk size: 2500
2025-09-20 00:03:10 - n2f - INFO - processing range chunk size: 1834
2025-09-20 00:03:10 - n2f - INFO - starting dask cluster.
2025-09-20 00:03:12 - n2f - INFO - dask cluster started.
2025-09-20 00:03:12 - dask_cluster_info - INFO - dask cluster: LocalCluster(dashboard_link='http://127.0.0.1:8787/status', workers=1, threads=1, memory=1.95 TiB)
2025-09-20 00:03:12 - darr_info - INFO - rslc dask array shape, chunksize, dtype: (2500, 1834, 17), (2500, 1834, 1), complex64
2025-09-20 00:03:12 - n2f - INFO - got filtered interferograms.
2025-09-20 00:03:12 - darr_info - INFO - intf dask array shape, chunksize, dtype: (2500, 1834, 16), (2500, 1834, 1), complex64
2025-09-20 00:03:12 - n2f - INFO - saving filtered interferograms.
2025-09-20 00:03:12 - zarr_info - INFO - ./dl/n2f_intf.zarr zarray shape, chunks, dtype: (2500, 1834, 16), (1000, 1000, 1), complex64
2025-09-20 00:03:12 - n2f - INFO - computing graph setted. doing all the computing.
2025-09-20 00:04:28 - n2f - INFO - computing finished.leted |  1min 16.7s
2025-09-20 00:04:30 - n2f - INFO - dask cluster closed.
CPU times: user 3.34 s, sys: 2.36 s, total: 5.7 s
Wall time: 1min 19s

source

n2ft

 n2ft (x:str, y:str, rslc:str, intf:str, image_pairs:numpy.ndarray,
       chunks:int=None, out_chunks:int=None, k:int=128, model:str=None,
       cuda:bool=False, processes=None, n_workers=None,
       threads_per_worker=None, rmm_pool_size=0.9, **dask_cluster_arg)

Noise2Fringe interferogram filtering.

Type Default Details
x str input: x coordinate, e.g., longitude, shape (n,)
y str input: y coordinate, e.g., latitude, shape (n,)
rslc str input: rslc stack, shape (n, nimages)
intf str output: filtered intfergrams stack, shape (n, nimage_pairs )
image_pairs ndarray input: image pairs
chunks int None parallel processing point chunk size, optional. Default: rslc.chunks[0]
out_chunks int None output point chunk size, Default: rslc.chunks[0]
k int 128 halo size for chunkwise processing
model str None path to the model in onnx format, use the model comes with this package by default
cuda bool False if use cuda for processing, false by default
processes NoneType None use process for dask worker over thread, the default is True for cpu, only applied if cuda==False
n_workers NoneType None number of dask worker, the default is 1 for cpu, number of GPUs for cuda
threads_per_worker NoneType None number of threads per dask worker, the default is 1 for cpu, only applied if cuda==False
rmm_pool_size float 0.9 set the rmm pool size, only applied when cuda==True
dask_cluster_arg VAR_KEYWORD

Usage:

base = '../Tutorials/CLI/ps_processing/'
ps_can_rslc = base+'hix/ps_can_rslc.zarr/'
ps_can_lon = base+'hix/ps_can_lon.zarr'
ps_can_lat = base+'hix/ps_can_lat.zarr'
ps_can_filtered_intf = './dl/ps_can_n2ft_intf.zarr'
ps_can_rslc_zarr = zarr.open(ps_can_rslc,mode='r')
tnet = mr.TempNet.from_bandwidth(ps_can_rslc_zarr.shape[-1], 1)
n2ft(ps_can_lon, ps_can_lat, ps_can_rslc, ps_can_filtered_intf, tnet.image_pairs, chunks=50000)
2025-09-20 00:04:31 - log_args - INFO - running function: n2ft
2025-09-20 00:04:31 - log_args - INFO - fetching args:
2025-09-20 00:04:31 - log_args - INFO - x = '../Tutorials/CLI/ps_processing/hix/ps_can_lon.zarr'
2025-09-20 00:04:31 - log_args - INFO - y = '../Tutorials/CLI/ps_processing/hix/ps_can_lat.zarr'
2025-09-20 00:04:31 - log_args - INFO - rslc = '../Tutorials/CLI/ps_processing/hix/ps_can_rslc.zarr/'
2025-09-20 00:04:31 - log_args - INFO - intf = './dl/ps_can_n2ft_intf.zarr'
2025-09-20 00:04:31 - log_args - INFO - image_pairs = array([[ 0,  1],
       [ 1,  2],
       [ 2,  3],
       [ 3,  4],
       [ 4,  5],
       [ 5,  6],
       [ 6,  7],
       [ 7,  8],
       [ 8,  9],
       [ 9, 10],
       [10, 11],
       [11, 12],
       [12, 13],
       [13, 14],
       [14, 15],
       [15, 16]], dtype=int32)
2025-09-20 00:04:31 - log_args - INFO - chunks = 50000
2025-09-20 00:04:31 - log_args - INFO - out_chunks = None
2025-09-20 00:04:31 - log_args - INFO - k = 128
2025-09-20 00:04:31 - log_args - INFO - model = None
2025-09-20 00:04:31 - log_args - INFO - cuda = False
2025-09-20 00:04:31 - log_args - INFO - processes = None
2025-09-20 00:04:31 - log_args - INFO - n_workers = None
2025-09-20 00:04:31 - log_args - INFO - threads_per_worker = None
2025-09-20 00:04:31 - log_args - INFO - rmm_pool_size = 0.5
2025-09-20 00:04:31 - log_args - INFO - dask_cluster_arg = {}
2025-09-20 00:04:31 - log_args - INFO - fetching args done.
2025-09-20 00:04:31 - n2ft - INFO - load coordinates
2025-09-20 00:04:31 - n2ft - INFO - Done
2025-09-20 00:04:31 - zarr_info - INFO - ../Tutorials/CLI/ps_processing/hix/ps_can_rslc.zarr/ zarray shape, chunks, dtype: (43201, 17), (20000, 1), complex64
2025-09-20 00:04:31 - n2ft - INFO - processing point chunk size: 50000
2025-09-20 00:04:31 - n2ft - INFO - distributing every processing chunk with halo data
2025-09-20 00:04:35 - n2ft - INFO - processing chunk size with halo data: [43201]
2025-09-20 00:04:35 - n2ft - INFO - starting dask cluster.
2025-09-20 00:04:36 - n2ft - INFO - dask cluster started.
2025-09-20 00:04:36 - dask_cluster_info - INFO - dask cluster: LocalCluster(dashboard_link='http://127.0.0.1:8787/status', workers=1, threads=1, memory=1.95 TiB)
2025-09-20 00:04:36 - darr_info - INFO - rslc dask array shape, chunksize, dtype: (43201, 17), (43201, 1), complex64
2025-09-20 00:04:36 - n2ft - INFO - got filtered interferograms.
2025-09-20 00:04:36 - darr_info - INFO - intf dask array shape, chunksize, dtype: (43201, 16), (43201, 1), complex64
2025-09-20 00:04:36 - n2ft - INFO - saving filtered interferograms.
2025-09-20 00:04:36 - zarr_info - INFO - ./dl/ps_can_n2ft_intf.zarr zarray shape, chunks, dtype: (43201, 16), (20000, 1), complex64
2025-09-20 00:04:36 - n2ft - INFO - computing graph setted. doing all the computing.
2025-09-20 00:05:03 - n2ft - INFO - computing finished.eted | 26.5s
2025-09-20 00:05:04 - n2ft - INFO - dask cluster closed.
CPU times: user 6.12 s, sys: 583 ms, total: 6.7 s
Wall time: 33 s
if is_cuda_available():
    n2ft(ps_can_lon, ps_can_lat, ps_can_rslc, ps_can_filtered_intf, tnet.image_pairs, chunks=50000, cuda=True)
2025-09-20 00:05:04 - log_args - INFO - running function: n2ft
2025-09-20 00:05:04 - log_args - INFO - fetching args:
2025-09-20 00:05:04 - log_args - INFO - x = '../Tutorials/CLI/ps_processing/hix/ps_can_lon.zarr'
2025-09-20 00:05:04 - log_args - INFO - y = '../Tutorials/CLI/ps_processing/hix/ps_can_lat.zarr'
2025-09-20 00:05:04 - log_args - INFO - rslc = '../Tutorials/CLI/ps_processing/hix/ps_can_rslc.zarr/'
2025-09-20 00:05:04 - log_args - INFO - intf = './dl/ps_can_n2ft_intf.zarr'
2025-09-20 00:05:04 - log_args - INFO - image_pairs = array([[ 0,  1],
       [ 1,  2],
       [ 2,  3],
       [ 3,  4],
       [ 4,  5],
       [ 5,  6],
       [ 6,  7],
       [ 7,  8],
       [ 8,  9],
       [ 9, 10],
       [10, 11],
       [11, 12],
       [12, 13],
       [13, 14],
       [14, 15],
       [15, 16]], dtype=int32)
2025-09-20 00:05:04 - log_args - INFO - chunks = 50000
2025-09-20 00:05:04 - log_args - INFO - out_chunks = None
2025-09-20 00:05:04 - log_args - INFO - k = 128
2025-09-20 00:05:04 - log_args - INFO - model = None
2025-09-20 00:05:04 - log_args - INFO - cuda = True
2025-09-20 00:05:04 - log_args - INFO - processes = None
2025-09-20 00:05:04 - log_args - INFO - n_workers = None
2025-09-20 00:05:04 - log_args - INFO - threads_per_worker = None
2025-09-20 00:05:04 - log_args - INFO - rmm_pool_size = 0.5
2025-09-20 00:05:04 - log_args - INFO - dask_cluster_arg = {}
2025-09-20 00:05:04 - log_args - INFO - fetching args done.
2025-09-20 00:05:04 - n2ft - INFO - load coordinates
2025-09-20 00:05:04 - n2ft - INFO - Done
2025-09-20 00:05:04 - zarr_info - INFO - ../Tutorials/CLI/ps_processing/hix/ps_can_rslc.zarr/ zarray shape, chunks, dtype: (43201, 17), (20000, 1), complex64
2025-09-20 00:05:04 - n2ft - INFO - processing point chunk size: 50000
2025-09-20 00:05:04 - n2ft - INFO - distributing every processing chunk with halo data
2025-09-20 00:05:04 - n2ft - INFO - processing chunk size with halo data: [43201]
2025-09-20 00:05:04 - n2ft - INFO - starting dask cluster.
2025-09-20 00:05:09 - n2ft - INFO - dask cluster started.
2025-09-20 00:05:09 - dask_cluster_info - INFO - dask cluster: LocalCUDACluster(dashboard_link='http://127.0.0.1:8787/status', workers=8, threads=8, memory=1.95 TiB)
2025-09-20 00:05:09 - darr_info - INFO - rslc dask array shape, chunksize, dtype: (43201, 17), (43201, 1), complex64
2025-09-20 00:05:09 - n2ft - INFO - got filtered interferograms.
2025-09-20 00:05:09 - darr_info - INFO - intf dask array shape, chunksize, dtype: (43201, 16), (43201, 1), complex64
2025-09-20 00:05:09 - n2ft - INFO - saving filtered interferograms.
2025-09-20 00:05:10 - zarr_info - INFO - ./dl/ps_can_n2ft_intf.zarr zarray shape, chunks, dtype: (43201, 16), (20000, 1), complex64
2025-09-20 00:05:10 - n2ft - INFO - computing graph setted. doing all the computing.
2025-09-20 00:05:15 - n2ft - INFO - computing finished.eted |  5.3s
2025-09-20 00:05:17 - n2ft - INFO - dask cluster closed.
CPU times: user 1.54 s, sys: 410 ms, total: 1.95 s
Wall time: 13 s
ps_can_x = base+'hix/ps_can_e.zarr'
ps_can_y = base+'hix/ps_can_n.zarr'
ps_can_filtered_intf_pyramid_dir = './dl/ps_can_n2ft_intf_pyramid'
dates = ["20210802", "20210816", "20210830", "20210913", "20211011", "20211025", "20220606", "20220620",
         "20220704", "20220718", "20220801", "20220815", "20220829", "20220912", "20220926", "20221010",
         "20221024",]
mc.pc_pyramid(ps_can_filtered_intf, ps_can_filtered_intf_pyramid_dir, x=ps_can_x, y=ps_can_y, ras_resolution=20)
2025-09-20 00:05:17 - log_args - INFO - running function: pc_pyramid
2025-09-20 00:05:17 - log_args - INFO - fetching args:
2025-09-20 00:05:17 - log_args - INFO - pc = './dl/ps_can_n2ft_intf.zarr'
2025-09-20 00:05:17 - log_args - INFO - out_dir = './dl/ps_can_n2ft_intf_pyramid'
2025-09-20 00:05:17 - log_args - INFO - x = '../Tutorials/CLI/ps_processing/hix/ps_can_e.zarr'
2025-09-20 00:05:17 - log_args - INFO - y = '../Tutorials/CLI/ps_processing/hix/ps_can_n.zarr'
2025-09-20 00:05:17 - log_args - INFO - yx = None
2025-09-20 00:05:17 - log_args - INFO - ras_resolution = 20
2025-09-20 00:05:17 - log_args - INFO - ras_chunks = (256, 256)
2025-09-20 00:05:17 - log_args - INFO - pc_chunks = 65536
2025-09-20 00:05:17 - log_args - INFO - processes = False
2025-09-20 00:05:17 - log_args - INFO - n_workers = 1
2025-09-20 00:05:17 - log_args - INFO - threads_per_worker = 2
2025-09-20 00:05:17 - log_args - INFO - dask_cluster_arg = {}
2025-09-20 00:05:17 - log_args - INFO - fetching args done.
2025-09-20 00:05:17 - pc_pyramid - INFO - clean out dir
2025-09-20 00:05:17 - zarr_info - INFO - ./dl/ps_can_n2ft_intf.zarr zarray shape, chunks, dtype: (43201, 16), (20000, 1), complex64
2025-09-20 00:05:17 - pc_pyramid - INFO - rendering point cloud data coordinates:
2025-09-20 00:05:17 - pc_pyramid - INFO - rasterizing point cloud data to grid with bounds: [np.float64(-16498455.50940282), np.float64(8649634.094942318), np.float64(-16470215.50940282), np.float64(8674894.094942318)].
2025-09-20 00:05:17 - zarr_info - INFO - dl/ps_can_n2ft_intf_pyramid/x.zarr zarray shape, chunks, dtype: (43201,), (65536,), float64
2025-09-20 00:05:17 - zarr_info - INFO - dl/ps_can_n2ft_intf_pyramid/y.zarr zarray shape, chunks, dtype: (43201,), (65536,), float64
2025-09-20 00:05:17 - pc_pyramid - INFO - pc data coordinates rendering ends.
2025-09-20 00:05:17 - zarr_info - INFO - dl/ps_can_n2ft_intf_pyramid/idx_0.zarr zarray shape, chunks, dtype: (1264, 1413), (256, 256), int64
2025-09-20 00:05:19 - zarr_info - INFO - dl/ps_can_n2ft_intf_pyramid/idx_1.zarr zarray shape, chunks, dtype: (632, 707), (256, 256), int64
2025-09-20 00:05:19 - zarr_info - INFO - dl/ps_can_n2ft_intf_pyramid/idx_2.zarr zarray shape, chunks, dtype: (316, 354), (256, 256), int64
2025-09-20 00:05:19 - zarr_info - INFO - dl/ps_can_n2ft_intf_pyramid/idx_3.zarr zarray shape, chunks, dtype: (158, 177), (256, 256), int64
2025-09-20 00:05:19 - zarr_info - INFO - dl/ps_can_n2ft_intf_pyramid/idx_4.zarr zarray shape, chunks, dtype: (79, 89), (256, 256), int64
2025-09-20 00:05:19 - zarr_info - INFO - dl/ps_can_n2ft_intf_pyramid/idx_5.zarr zarray shape, chunks, dtype: (40, 45), (256, 256), int64
2025-09-20 00:05:19 - zarr_info - INFO - dl/ps_can_n2ft_intf_pyramid/idx_6.zarr zarray shape, chunks, dtype: (20, 23), (256, 256), int64
2025-09-20 00:05:19 - zarr_info - INFO - dl/ps_can_n2ft_intf_pyramid/idx_7.zarr zarray shape, chunks, dtype: (10, 12), (256, 256), int64
2025-09-20 00:05:19 - zarr_info - INFO - dl/ps_can_n2ft_intf_pyramid/idx_8.zarr zarray shape, chunks, dtype: (5, 6), (256, 256), int64
2025-09-20 00:05:19 - zarr_info - INFO - dl/ps_can_n2ft_intf_pyramid/idx_9.zarr zarray shape, chunks, dtype: (3, 3), (256, 256), int64
2025-09-20 00:05:19 - zarr_info - INFO - dl/ps_can_n2ft_intf_pyramid/idx_10.zarr zarray shape, chunks, dtype: (2, 2), (256, 256), int64
2025-09-20 00:05:19 - pc_pyramid - INFO - rasterized idx rendering ends
2025-09-20 00:05:19 - pc_pyramid - INFO - dask local cluster started to render pc data.
2025-09-20 00:05:19 - dask_cluster_info - INFO - dask cluster: LocalCluster(dashboard_link='http://10.211.48.19:8787/status', workers=1, threads=2, memory=1.95 TiB)
2025-09-20 00:05:19 - zarr_info - INFO - dl/ps_can_n2ft_intf_pyramid/pc.zarr zarray shape, chunks, dtype: (43201, 16), (65536, 1), complex64
2025-09-20 00:05:19 - zarr_info - INFO - dl/ps_can_n2ft_intf_pyramid/0.zarr zarray shape, chunks, dtype: (1264, 1413, 16), (256, 256, 1), complex64
2025-09-20 00:05:19 - zarr_info - INFO - dl/ps_can_n2ft_intf_pyramid/1.zarr zarray shape, chunks, dtype: (632, 707, 16), (256, 256, 1), complex64
2025-09-20 00:05:19 - zarr_info - INFO - dl/ps_can_n2ft_intf_pyramid/2.zarr zarray shape, chunks, dtype: (316, 354, 16), (256, 256, 1), complex64
2025-09-20 00:05:19 - zarr_info - INFO - dl/ps_can_n2ft_intf_pyramid/3.zarr zarray shape, chunks, dtype: (158, 177, 16), (256, 256, 1), complex64
2025-09-20 00:05:19 - zarr_info - INFO - dl/ps_can_n2ft_intf_pyramid/4.zarr zarray shape, chunks, dtype: (79, 89, 16), (256, 256, 1), complex64
2025-09-20 00:05:19 - zarr_info - INFO - dl/ps_can_n2ft_intf_pyramid/5.zarr zarray shape, chunks, dtype: (40, 45, 16), (256, 256, 1), complex64
2025-09-20 00:05:19 - zarr_info - INFO - dl/ps_can_n2ft_intf_pyramid/6.zarr zarray shape, chunks, dtype: (20, 23, 16), (256, 256, 1), complex64
2025-09-20 00:05:19 - zarr_info - INFO - dl/ps_can_n2ft_intf_pyramid/7.zarr zarray shape, chunks, dtype: (10, 12, 16), (256, 256, 1), complex64
2025-09-20 00:05:19 - zarr_info - INFO - dl/ps_can_n2ft_intf_pyramid/8.zarr zarray shape, chunks, dtype: (5, 6, 16), (256, 256, 1), complex64
2025-09-20 00:05:19 - zarr_info - INFO - dl/ps_can_n2ft_intf_pyramid/9.zarr zarray shape, chunks, dtype: (3, 3, 16), (256, 256, 1), complex64
2025-09-20 00:05:19 - zarr_info - INFO - dl/ps_can_n2ft_intf_pyramid/10.zarr zarray shape, chunks, dtype: (2, 2, 16), (256, 256, 1), complex64
2025-09-20 00:05:20 - pc_pyramid - INFO - computing graph setted. doing all the computing.
2025-09-20 00:05:22 - pc_pyramid - INFO - computing finished.  1.8s
2025-09-20 00:05:22 - pc_pyramid - INFO - dask cluster closed.
rslc_pyramid_dir = base+'hix/ps_can_rslc_pyramid'

ps_can_intf_plot = mc.pc_plot(rslc_pyramid_dir,post_proc_ras='intf_seq', post_proc_pc='intf_seq',n_kdim=1,level_increase=0)
ps_can_filtered_intf_plot = mc.pc_plot(ps_can_filtered_intf_pyramid_dir,post_proc_ras='phase', post_proc_pc='phase',level_increase=0)
ps_can_intf_plot = ps_can_intf_plot.redim(
    i=hv.Dimension('i', label='Interferogram', range=(0,15), value_format=(lambda i: dates[i]+'_'+dates[i+1])),
    x=hv.Dimension('r', label='Range'),
    y=hv.Dimension('az',label='Azimuth'),
    z=hv.Dimension('Phase',range=(-np.pi,np.pi))
)
ps_can_filtered_intf_plot = ps_can_filtered_intf_plot.redim(
    i=hv.Dimension('i', label='Interferogram', range=(0,15), value_format=(lambda i: dates[i]+'_'+dates[i+1])),
    x=hv.Dimension('r', label='Range'),
    y=hv.Dimension('az',label='Azimuth'),
    z=hv.Dimension('Phase',range=(-np.pi,np.pi))
)

Specify plotting options and plot:

hv.output(widget_location='bottom')
ps_can_intf_plot.opts(
    opts.Image(
        cmap='colorwheel',width=600, height=400, colorbar=True,
        default_tools=['pan',WheelZoomTool(zoom_on_axis=False),'save','reset','hover'],
        active_tools=['wheel_zoom']
    ),
    opts.Points(
        color='Phase', cmap='colorwheel',width=600, height=400, colorbar=True,
        default_tools=['pan',WheelZoomTool(zoom_on_axis=False),'save','reset','hover'],
        active_tools=['wheel_zoom']
    )
)

ps_can_filtered_intf_plot.opts(
    opts.Image(
        cmap='colorwheel',width=600, height=400, colorbar=True,
        default_tools=['pan',WheelZoomTool(zoom_on_axis=False),'save','reset','hover'],
        active_tools=['wheel_zoom']
    ),
    opts.Points(
        color='Phase', cmap='colorwheel',width=600, height=400, colorbar=True,
        default_tools=['pan',WheelZoomTool(zoom_on_axis=False),'save','reset','hover'],
        active_tools=['wheel_zoom']
    )
)
ps_can_intf_plot+ps_can_filtered_intf_plot