From f791cc31d7dc3f21735a73e34d777d08a2cc59e2 Mon Sep 17 00:00:00 2001
From: Narayana Rao Bhogapurapu <narayanarao.bhogapurapu@gmail.com>
Date: Sun, 13 Oct 2024 22:30:09 -0700
Subject: [PATCH] mask update

---
 src/ich/__pycache__/algo.cpython-310.pyc     | Bin 7801 -> 0 bytes
 src/ich/__pycache__/args_in.cpython-310.pyc  | Bin 5238 -> 0 bytes
 src/ich/__pycache__/plotting.cpython-310.pyc | Bin 3114 -> 0 bytes
 src/ich/__pycache__/rst_io.cpython-310.pyc   | Bin 1807 -> 0 bytes
 src/ich/__pycache__/utils.cpython-310.pyc    | Bin 2947 -> 0 bytes
 src/ich/algo.py                              |  14 +++---
 src/ich/args_in.py                           |  32 ++++++++++++-
 src/ich/utils.py                             |  48 ++++++++++++++++++-
 8 files changed, 85 insertions(+), 9 deletions(-)
 delete mode 100644 src/ich/__pycache__/algo.cpython-310.pyc
 delete mode 100644 src/ich/__pycache__/args_in.cpython-310.pyc
 delete mode 100644 src/ich/__pycache__/plotting.cpython-310.pyc
 delete mode 100644 src/ich/__pycache__/rst_io.cpython-310.pyc
 delete mode 100644 src/ich/__pycache__/utils.cpython-310.pyc

diff --git a/src/ich/__pycache__/algo.cpython-310.pyc b/src/ich/__pycache__/algo.cpython-310.pyc
deleted file mode 100644
index 646093577efcb78c07a364cf7c0abfe40b23e6a8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 7801
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

diff --git a/src/ich/__pycache__/args_in.cpython-310.pyc b/src/ich/__pycache__/args_in.cpython-310.pyc
deleted file mode 100644
index 28a51a332587afa620a45f2625518e47917a22bf..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5238
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

diff --git a/src/ich/__pycache__/plotting.cpython-310.pyc b/src/ich/__pycache__/plotting.cpython-310.pyc
deleted file mode 100644
index 18e6f194e092817b5c38a3f9c23a05a84bf490af..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3114
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

diff --git a/src/ich/__pycache__/rst_io.cpython-310.pyc b/src/ich/__pycache__/rst_io.cpython-310.pyc
deleted file mode 100644
index 2518670d4097a85851354dd8f474301d7307a88e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1807
zcmb_d&2Aev5Z+&Dz54M_oZlv?8lXT`phn^ZDB?CnQp<4zxN=~-DL@EVP`k85o4eeS
zR9qYDTd#cwxwkw(k9~zc0MT1dd4--jq}oJ54!v|2ocU(B9Fg<QP`uTO9e9p@{hj<)
zcbq?sG5>gAJcc3v0FgP!$=u9iE^@8*kY}}ze5(T#SRJC!>KdwB9iau#K8y1PYPcpw
zz?yjrwJi2nJ6}Xg7Kdy(UqLGt*Vv_e6|GuaXP5IU=!(S=yP97^*DPLO*Yg|bhQ%@a
zAis%jTHIi_@>}SZ#ZB<vMz;aCvi467`Y>C}mOyv1<!lA?N13<pbT6HK5pN2D70Eih
z=p2kEogPU$>z{Y-J=l0~cVqowXZ`N_{WyM%Cu+>aMyHPjKE(w{9>0e4IQ_1xgHeVV
z=msqm5hZ635KJ%4K`!*U$T6d5#uYPK2r?2xO0e25DLF~7Oooi7$HsFh$HyeWKN6XM
z3oATiW?3{6G|RvQ9H<{M6SqG5u_ATNHvV}6&_0Y!7_tLGIa9ZCF5Gjsa;HEXAg}VK
z{)KbyS3ab`>%TSux`8mX>tMGeg>G#VwTC4f=4)JJy0J%a_C!7raQ1GXgG0)Q_A;r1
zp_%rv5U(7u3hV#c+1wa>Cy9`QVmRg_TuuaxL64`CoD@n9wyFANG91uCVv!tj$b?G9
zgpS5)AVoT$>3AT(MfqBJsw3bgONO+#2C-!XB6edpasyXf0V6d>{r54mX4s=w0PN8{
zIIv&2N8Z3Y56(mILDhn<R@IJz%BjLC$UNm7g(D~Pe}NkPxprQ!>eE`~PwN+uIM)Fy
z0&C%o6`O=we<OqV(`E$`t=+nCpyC`zYuMM}_5nRS6iwJl*FRg@-2L|X-q!y9qu$oj
zohJudXALlW&o&Qs_a3dEMQCU1#n#TFhlW{RD#{D_s%<$DEr_5)ImRW?i@;1z(3il>
zX&>iA*Jkyr8{55u<SFA=-Cx&>`$TOMejsomA;-C0_Ku?kUpyE5h@|GHEa7uz8)kb%
zrh?j?h_=~5{Jo%x*doyJQ#O&~O`ML&t4J)tGzw2lfugz~hdlsd*{lgt&Y(;LKaskY
z*?prrpD6RGEtr|OY`$GMG4T^c4{w7hS3txb@a^4n+wjKTlH2q|7u@gh4!78hcLm_T
zc%Qz*`$hP_@a^|eu+@L@%+f8c!#2dnMwq5}|BO)4pTWf38CU1e_$kbF@927xWIRn0
z9bqvlv5?SoTxwsQN*$eGQP5%p$yF4}AS@<1G>li2x>iC{VyV3{(;=55!e^}=%9NI;
z!t{(@&ao;PSBws!&kTZPGwqj5>G<uuFn7v33xHEDqzH|_VS}zog_RUF<5`i%G{+;d
zHc^zV*{T(WAAL11S)w>+$5hERd&ik;?Vd1QtCwei=5A220DfWqszk#G)A5#mVe&JV
mS({^9LeZBw&nAp~Wv(=N2Snh0Qd{zx?wfZGM_yEGF8&SWJKcx?

diff --git a/src/ich/__pycache__/utils.cpython-310.pyc b/src/ich/__pycache__/utils.cpython-310.pyc
deleted file mode 100644
index eb73f28196990210072efb2325d07b429e471dad..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2947
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

diff --git a/src/ich/algo.py b/src/ich/algo.py
index b820617..24dfd42 100644
--- a/src/ich/algo.py
+++ b/src/ich/algo.py
@@ -248,6 +248,7 @@ def process_block(i, j, cohArray, lidarArray, initial_ws, htl, htg, parm_):
         cohBlock = cohArray[start_i:end_i, start_j:end_j]
 
         if np.count_nonzero(~np.isnan(cohBlock)) <5:
+            # print('no coh')
             count = np.count_nonzero(~np.isnan(lidarBlock))
             s_parm = 0
             c_parm = 0
@@ -259,22 +260,23 @@ def process_block(i, j, cohArray, lidarArray, initial_ws, htl, htg, parm_):
             return start_i, end_i, start_j, end_j, s_parm, c_parm, rmse_parm, ht, count
         
         # elif (np.isfinite(lidarBlock).any() and np.count_nonzero(~np.isnan(lidarBlock)) > 1) or max(lidarBlock.shape)>512:
-        elif (np.isfinite(lidarBlock).any() and np.count_nonzero(~np.isnan(lidarBlock)) > 1) or max(lidarBlock.shape)>512:
+        elif (np.isfinite(lidarBlock).any() and np.count_nonzero(~np.isnan(lidarBlock)) > 3) or max(lidarBlock.shape)>512:
 
             parm = cal_(cohBlock, lidarBlock, htl, htg)
             mask = np.where(~np.isnan(lidarBlock), 1, 0)
 
-            if np.all(np.array(parm) == 0):
-                parm = parm_.copy()
-                del parm_
+            # if np.all(np.array(parm) == 0):
+            #     parm = parm_.copy()
+            #     del parm_
             if lidarBlock.shape[0]*lidarBlock.shape[1]>initial_ws*initial_ws:
                 # mask[np.shape(mask)[0]//2,np.shape(mask)[1]//2]=1
+                print('blank_blocks',lidarBlock.shape,parm)
                 np.fill_diagonal(mask, 1)
                 mask = np.flipud(mask)
                 np.fill_diagonal(mask, 1)
 
-            s_parm = np.full(lidarBlock.shape, parm[1]) * mask
-            c_parm = np.full(lidarBlock.shape, parm[2]) * mask
+            s_parm = np.full(lidarBlock.shape, parm[1]) 
+            c_parm = np.full(lidarBlock.shape, parm[2]) 
             rmse_parm = np.full(lidarBlock.shape, parm[4])
             count = np.count_nonzero(~np.isnan(lidarBlock))
 
diff --git a/src/ich/args_in.py b/src/ich/args_in.py
index 498c3a1..e4891bd 100644
--- a/src/ich/args_in.py
+++ b/src/ich/args_in.py
@@ -28,7 +28,7 @@ from sklearn.model_selection import train_test_split
 from plotting import density_scatter, plot_data, rmse
 from algo import arc_sinc_fast,arc_sinc, arc_sinc_, cal_, dynamicWindow
 from rst_io import read_bin, write_tif, write_bin
-from utils import blockshaped, unblockshaped, unpad, spatial_intp_lin, split_sample
+from utils import blockshaped, unblockshaped, unpad, spatial_intp_lin, split_sample, spatial_intp_idw
 
 # Initialize EMPatches instance
 emp = EMPatches()
@@ -148,6 +148,26 @@ def rvog_inverse(args):
     t1 = time.time()
     s, c, rmse__, ht_, count = dynamicWindow(cor, lidar_ht_cal, args.window_size, args.htl, args.htg)
 
+    temp_lidar = blockshaped(lidar_ht_cal, args.window_size, args.window_size)
+    temp_mask = np.zeros(temp_lidar.shape)
+    
+    for win in tqdm(range(np.shape(temp_lidar)[0])):
+        mask = temp_lidar[win,:,:].copy()
+        mask[~np.isnan(mask)] = 1 
+        temp_mask[win,:,:] = mask
+        if np.all(temp_lidar[win,:,:]==0) or np.all(np.isnan(temp_lidar[win,:,:])):
+            mask = np.zeros(temp_mask[win,:,:].shape)
+            np.fill_diagonal(mask, 1)
+            mask = np.flipud(mask)
+            np.fill_diagonal(mask, 1)
+            temp_mask[win,:,:] = mask
+
+    temp_mask = unblockshaped(temp_mask, rows,cols)
+
+    s = s*temp_mask
+    c = c*temp_mask
+
+
     # Mask out invalid values
     ht_[ht_ == 0] = np.nan
     s[s == 0] = np.nan
@@ -171,10 +191,18 @@ def rvog_inverse(args):
     t2 = time.time()
     print("[2/3] Generating height map... ",end=" ")
 
-    # Interpolate calibration parameters
+    # # Interpolate calibration parameters
     ci = spatial_intp_lin(c)
     si = spatial_intp_lin(s)
 
+    # # Interpolate calibration parameters
+    # ci = spatial_intp_idw(c)
+    # si = spatial_intp_idw(s)
+    
+    # # Interpolate calibration parameters
+    # ci = spatial_intp_kriging(c)
+    # si = spatial_intp_kriging(s)
+    
     # Clip extreme values
     si[si > 1.6] = 1.6
     ci[ci > 16] = 16
diff --git a/src/ich/utils.py b/src/ich/utils.py
index 337b4cb..5a6882d 100644
--- a/src/ich/utils.py
+++ b/src/ich/utils.py
@@ -21,7 +21,7 @@ from scipy.interpolate import griddata
 from tqdm import tqdm
 from scipy.interpolate import interpn
 from sklearn.model_selection import train_test_split
-
+# from pykrige.ok import OrdinaryKriging
 
 def blockshaped(arr, nrows, ncols):
     """
@@ -73,6 +73,52 @@ def spatial_intp_lin(array):
 
     return intp
 
+
+# def spatial_intp_kriging(array):
+#     x = np.arange(0, array.shape[1])
+#     y = np.arange(0, array.shape[0])
+#     # Mask invalid values
+#     array = np.ma.masked_invalid(array)
+#     xx, yy = np.meshgrid(x, y)
+    
+#     # Get only the valid values
+#     x1 = xx[~array.mask]
+#     y1 = yy[~array.mask]
+#     newarr = array[~array.mask]
+    
+#     # Perform ordinary kriging
+#     OK = OrdinaryKriging(x1, y1, newarr, variogram_model='linear', verbose=False, enable_plotting=False)
+#     z, ss = OK.execute('grid', x, y)
+    
+#     return z
+
+def spatial_intp_idw(array, power=0.5):
+    x = np.arange(0, array.shape[1])
+    y = np.arange(0, array.shape[0])
+    # Mask invalid values
+    array = np.ma.masked_invalid(array)
+    xx, yy = np.meshgrid(x, y)
+    
+    # Get only the valid values
+    x1 = xx[~array.mask]
+    y1 = yy[~array.mask]
+    newarr = array[~array.mask]
+    
+    # Function to compute IDW
+    def idw(xi, yi, x1, y1, values, power):
+        dist = np.sqrt((x1 - xi) ** 2 + (y1 - yi) ** 2)
+        # Handle case where distance is zero
+        if np.any(dist == 0):
+            return values[dist == 0][0]
+        weights = 1 / (dist ** power)
+        return np.sum(weights * values) / np.sum(weights)
+    
+    # Apply IDW for each point in the grid
+    idw_values = np.array([[idw(i, j, x1, y1, newarr, power) for i in x] for j in y])
+    
+    return idw_values
+
+
 def split_sample(a,frac=0.3):
     """
     Returns calibration and validation 2d arrays 
-- 
GitLab