DORIS coregpm problem with PALSAR images

I came across a problem at the coregpm step when processing ALOS/PALSAR SAR interferograms with DORIS.  Most of the pairs coregistered OK, however I would get a few bad pairs that refused to coregister correctly. The problem was that too many fine correlation observations were thrown away at the coregistration parameters step, causing the interferogram to be coherent only at the bottom of the image. The problem demonstrates itself with the following messages:


DEBUG   : Window 2154: estimated coherence   = 0.47
DEBUG   : Window 2154: sigma(estimated shift) for coherent cross-correlation = 0.0130739 [pixel]
DEBUG   : Window 2154: sigma(estimated shift) = 0.0269695 [pixel]
DEBUG   : Window 2155: estimated coherence   = 0.67
DEBUG   : Window 2155: sigma(estimated shift) for coherent cross-correlation = 0.00771344 [pixel]
DEBUG   : Window 2155: sigma(estimated shift) = 0.0133268 [pixel]
INFO    : coregpm: max(abs(N*inv(N)-I)) = nan
INFO    : coregpm: overallmodeltest Lines = -nan
INFO    : coregpm: overallmodeltest Pixels = -nan
INFO    : maximum wtest statistic azimuth = nan for window number: 40
INFO    : maximum wtest statistic range   = nan for window number: 40
INFO    : Detected outlier:  summed sqr.wtest = -nan; observation: 0; window number: 40
PROGRESS: Start iteration 1
PROGRESS: Start iteration 1
INFO    : Removing observation 0 from observation vector.
INFO    : coregpm: polynomial normalized by factors: 1 18432 1 9344 to [-2,2]

DEBUG   : Setting up design matrix for LS adjustment
DEBUG   : coregpm: (-1.72503, 1.42931): yL=40.31 yP=-99.31
DEBUG   : coregpm: (-1.72503, 1.50551): yL=40.47 yP=-99.41

My first attempt to fixing this problem was increasing the cpm_degree, which is normally set at 2. I went up to degree 5, without any luck. Today I was looking at the DORIS source code and the nan (not-a-number) values in the above message caught my eye. I am still not certain what the cause of these nan values are, but I thought it may be due to the weighting somehow. The default value for cpm_weight is "Bamler", for Richard Bamler's papers presented at IGARSS conference in 2000. Setting the cpm_weight to "none" thus making all observation weighted uniformly solved the problem of estimating coregistration parameters described above. I also tested the linear and quadratic weighting as well, and they perform well as you can see below.

Seems like there is a bug in the code where the weighting for Bamler method is calculated. However, I could not find which part of the code is causing these nan values yet.

The data is over LA, from track 216, frame 660. I noticed the same issue with PALSAR data over King George Island, in Antarctica.

For completeness I ran the coregpm and coherence steps for possible values of cpm_weight, and I am displaying the results below. For coregpm, I am only showing the second temporary plot (dummy2*.ps). You may think that it should be possible to stop DORIS from removing too many point by decreasing the cpm_maxiter setting. I tried that as well and even though more points are left, I was not able to get a good interferogram.

cpm_weight=bamler

cpm_weight=bamlercoherence for cpm_weight=bamler

cpm_weight=quadratic

cpm_weight=quadratic coherence for cpm_weight=quadratic

cpm_weight=linear

cpm_weight=linear coherence for cpm_weight=linear

cpm_weight=none

cpm_weight=none Coherence for cpm_weight=none

 

Here are the settings for fine coregistration, coregistration parameters, resample and coherence steps used in this analysis.

fc_acc=32 32
fc_initoff=coarsecorr
fc_method=magfft
fc_nwin=4000
fc_osfactor=32
fc_winsize=64 64
cpm_degree=2
cpm_dump=off
cpm_k_alpha=1.97
cpm_maxiter=4000
cpm_threshold=0.4
cpm_weight="AS GIVEN ABOVE"
rs_dbow=1216 17216 672 8672
rs_dbow_geo=0 0 0 0
rs_method=knab6p
rs_out_format=cr4
rs_shiftazi=on
coh_method=refphase_only
coh_multilook=1 1
coh_winsize=5 5

Update (20 February 2012):

Discussing the matter with Mahmut Arikan at TU-Delft and further investigation into the matter revealed that there were two observation windows with correlations higher than 1.00 in the result of fine_corr step:

Number  posL    posP    offsetL offsetP correlation
...
3287 14306  8430     40.16   -100.19   0.41
3288 14306  8608     70.59   -129.56   1.01
3290 14485  1066     38.66    -93.69   0.57
...
3651 15914  2050     38.88    -94.72   0.63
3652 15914  2228     38.88    -94.53   1.02
3653 15914  2405     38.94    -94.97   0.84

Setting the correlation values of these points to something very small by hand (like 0.01), I was able to run the coregpm step with cpm_weight="bamler" and produce the following results:

cpm_weight=bamler, fine coregistration results edited manually.

cpm_weight=bamlercoherence for cpm_weight=bamler

 

References:

- R. Bamler, "Interferometric Stereo Radargrammetry: Absolute Height Determination from ERS-ENVISAT Interferograms", IGARSS 2000