Skip to content

Commit 9d72693

Browse files
author
Yutai
committed
changed around demo names, added dim mismatch bug fix to sig detectors
1 parent 3286bd0 commit 9d72693

34 files changed

+243
-166
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
# hsi_toolkit_py
22
GatorSense Hyperspectral Image Analysis Toolkit - Python Implementation
3+
4+
Hyperspectral image format: height x width x bands

signature_detectors/abd_detector.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ def abd_detector(hsi_img, tgt_sig, ems, mask = None):
2121
6/2/2018 - Edited by Alina Zare
2222
12/2018 - Python Implementation by Yutai Zhou
2323
"""
24+
if tgt_sig.ndim == 1:
25+
tgt_sig = tgt_sig[:, np.newaxis]
26+
2427
abd_out, kwargsout = img_det(abd_helper,hsi_img,tgt_sig,mask,ems = ems);
2528

2629
return abd_out

signature_detectors/ace_detector.py

Lines changed: 37 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -4,44 +4,47 @@
44
import numpy as np
55

66
def ace_detector(hsi_img, tgt_sig, mask = None, mu = None, sig_inv = None):
7-
"""
8-
Squared Adaptive Cosine/Coherence Estimator
9-
10-
Inputs:
11-
hsi_image - n_row x n_col x n_band hyperspectral image
12-
tgt_sig - target signature (n_band x 1 - column vector)
13-
mask - binary image limiting detector operation to pixels where mask is true
14-
if not present or empty, no mask restrictions are used
15-
mu - background mean (n_band x 1 column vector)
16-
sig_inv - background inverse covariance (n_band x n_band matrix)
17-
18-
Outputs:
19-
ace_out - detector image
20-
mu - mean of input data
21-
sig_inv - inverse covariance of input data
22-
23-
8/8/2012 - Taylor C. Glenn
24-
6/2/2018 - Edited by Alina Zare
25-
10/2018 - Python Implementation by Yutai Zhou
26-
"""
27-
ace_out, kwargsout = img_det(ace_det_helper, hsi_img, tgt_sig, mask, mu = mu, sig_inv = sig_inv)
28-
return ace_out, kwargsout['mu'], kwargsout['sig_inv']
7+
"""
8+
Squared Adaptive Cosine/Coherence Estimator
9+
10+
Inputs:
11+
hsi_image - n_row x n_col x n_band hyperspectral image
12+
tgt_sig - target signature (n_band x 1 - column vector)
13+
mask - binary image limiting detector operation to pixels where mask is true
14+
if not present or empty, no mask restrictions are used
15+
mu - background mean (n_band x 1 column vector)
16+
sig_inv - background inverse covariance (n_band x n_band matrix)
17+
18+
Outputs:
19+
ace_out - detector image
20+
mu - mean of input data
21+
sig_inv - inverse covariance of input data
22+
23+
8/8/2012 - Taylor C. Glenn
24+
6/2/2018 - Edited by Alina Zare
25+
10/2018 - Python Implementation by Yutai Zhou
26+
"""
27+
if tgt_sig.ndim == 1:
28+
tgt_sig = tgt_sig[:, np.newaxis]
29+
30+
ace_out, kwargsout = img_det(ace_det_helper, hsi_img, tgt_sig, mask, mu = mu, sig_inv = sig_inv)
31+
return ace_out, kwargsout['mu'], kwargsout['sig_inv']
2932

3033
def ace_det_helper(hsi_data, tgt_sig, kwargs):
31-
mu = np.mean(hsi_data, axis = 1) if kwargs['mu'] is None else kwargs['mu']
32-
sig_inv = np.linalg.pinv(np.cov(hsi_data.T, rowvar = False)) if kwargs['sig_inv'] is None else kwargs['sig_inv']
34+
mu = np.mean(hsi_data, axis = 1) if kwargs['mu'] is None else kwargs['mu']
35+
sig_inv = np.linalg.pinv(np.cov(hsi_data.T, rowvar = False)) if kwargs['sig_inv'] is None else kwargs['sig_inv']
3336

34-
mu = np.reshape(mu, (len(mu), 1), order='F')
35-
s = tgt_sig - mu
36-
z = hsi_data - mu
37+
mu = np.reshape(mu, (len(mu), 1), order='F')
38+
s = tgt_sig - mu
39+
z = hsi_data - mu
3740

38-
st_sig_inv = s.T @ sig_inv
39-
st_sig_inv_s = s.T @ sig_inv @ s
41+
st_sig_inv = s.T @ sig_inv
42+
st_sig_inv_s = s.T @ sig_inv @ s
4043

41-
A = np.sum(st_sig_inv @ z, 0)
42-
B = st_sig_inv_s
43-
C = np.sum(z * (sig_inv @ z), 0)
44+
A = np.sum(st_sig_inv @ z, 0)
45+
B = st_sig_inv_s
46+
C = np.sum(z * (sig_inv @ z), 0)
4447

45-
ace_data = A * A / (B * C)
48+
ace_data = A * A / (B * C)
4649

47-
return ace_data.T.squeeze(), {'mu':mu, 'sig_inv': sig_inv}
50+
return ace_data.T.squeeze(), {'mu':mu, 'sig_inv': sig_inv}

signature_detectors/ace_local_detector.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ def ace_local_detector(hsi_img, tgt_sig, mask = None, guard_win = 2, bg_win = 4,
2727
mask = np.ones([n_row, n_col]) if mask is None else mask
2828
reg = beta * np.eye(n_band)
2929

30+
if tgt_sig.ndim == 1:
31+
tgt_sig = tgt_sig[:, np.newaxis]
32+
33+
3034
out, kwargsout = rx_det(ace_local_helper, hsi_img, tgt_sig, mask = mask, guard_win = guard_win, bg_win = bg_win, reg = reg)
3135
return out, kwargsout
3236

signature_detectors/ace_rt_detector.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ def ace_rt_detector(hsi_img, tgt_sig, mask = None, mu = None, sig_inv = None):
2424
6/2/2018 - Edited by Alina Zare
2525
11/2018 - Python Implementation by Yutai Zhou
2626
"""
27+
if tgt_sig.ndim == 1:
28+
tgt_sig = tgt_sig[:, np.newaxis]
29+
2730
ace_rt_out, kwargsout = img_det(ace_rt_helper, hsi_img, tgt_sig, mask, mu = mu, sig_inv = sig_inv)
2831
return ace_rt_out, kwargsout['mu'], kwargsout['sig_inv']
2932

signature_detectors/ace_rt_max_detector.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ def ace_rt_max_detector(hsi_img, tgt_sig, mask = None, mu = None, sig_inv = None
2525
6/2/2018 - Edited by Alina Zare
2626
11/2018 - Python Implementation by Yutai Zhou
2727
"""
28+
if tgt_sig.ndim == 1:
29+
tgt_sig = tgt_sig[:, np.newaxis]
30+
2831
ace_rt_max_out, kwargsout = img_det(ace_rt_max_helper, hsi_img, tgt_sig, mask, mu = mu, sig_inv = sig_inv)
2932
return ace_rt_max_out, kwargsout['mu'], kwargsout['sig_inv']
3033

signature_detectors/ace_ss_detector.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ def ace_ss_detector(hsi_img, tgt_sig, mask = None, mu = None, sig_inv = None):
2020
6/2/2018 - Edited by Alina Zare
2121
11/2018 - Python Implementation by Yutai Zhou
2222
"""
23+
if tgt_sig.ndim == 1:
24+
tgt_sig = tgt_sig[:, np.newaxis]
25+
2326
ace_ss_out, kwargsout = img_det(ace_ss_helper, hsi_img, tgt_sig, mask, mu = mu, sig_inv = sig_inv)
2427
return ace_ss_out
2528

0 commit comments

Comments
 (0)