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