forked from uritsky/QRaFT
-
Notifications
You must be signed in to change notification settings - Fork 0
/
FILTER_FEATURES_MANUAL.pro
74 lines (65 loc) · 2.31 KB
/
FILTER_FEATURES_MANUAL.pro
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
function FILTER_FEATURES_MANUAL, FEATURES, IMG_enh, P, w=w
;+
; NAME:
; FILTER_FEATURES_MANUAL
;
; PURPOSE:
; Interactive manual filtration (removal) of unreliable coronal features
; Filtration is performed based on a decision-making by a human operator
; through a series of mouse clicks.
;
; The function provides on-screen instructions on how to process the features.
;
; It is recommended to use this function _after_ the automatic filtration
; function FILTER_FEATURES(), to ensure that all the features returned by
; this code package are valid.
;
; CALLING SEQUENCE:
; FEATURES_filtered = FILTER_FEATURES_MANUAL(FEATURES, w=w)
;
; INPUTS:
; FEATURES - array of IDL structures containing locations of the detected features
;
; OUTPUTS:
; FEATURES_filtered - array of IDL structures of manually filtered features
; w - array positions of the filtered features in the original (non-filtered) array FEATURES
;
; RESTRICTIONS:
; none
;
; EXAMPLE:
; FEATURES_filtered = FILTER_FEATURES_MANUAL(FEATURES)
;
; where FEATURES is an array of features detected in image IMG via a chain of
; processing steps implemented by this code package
; (see PROCESS_FILE.pro for more details).
;
;
; MODIFICATION HISTORY:
; V. Uritsky, 2019-2022
;-
;----------------------------------------------------------------
;i_arr = [0]
ii = intarr(n_elements(FEATURES)) & ii[*]=1
w = indgen(n_elements(FEATURES))
!mouse.button=1
WHILE(!MOUSE.BUTTON NE 4) DO BEGIN
CURSOR,X,Y,/Data,/DOWN
if !MOUSE.BUTTON EQ 1 THEN begin
c = find_closest_feature(FEATURES[w], X,Y)
;=============================
; for old IDL:
if n_elements(i_arr) eq 0 then i_arr=[w[c.i]] else $
i_arr=[i_arr,w[c.i]]
;=============================
;PRINT,'X = ', string(X, format = '(D30.20)'), ' Y = ', string(Y, format = '(D30.20)'), c.i, 'Chi-SQ = ', features[c.i].chisq
if n_elements(i_arr) ne 0 then ii[i_arr] = 0
w = where(ii ne 0)
PLOT_FEATURES, IMG_enh, FEATURES[w], P, range=minmax(P.blob_detect_thresholds), /old
endif
ENDWHILE
;ii = intarr(n_elements(FEATURES)) & ii[*]=1
;if n_elements(i_arr) ne 0 then ii[i_arr] = 0
w = where(ii ne 0)
return, FEATURES[w]
End