forked from pohuigin/smart_library
-
Notifications
You must be signed in to change notification settings - Fork 1
/
ar_pslmask.pro
87 lines (55 loc) · 1.53 KB
/
ar_pslmask.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
75
76
77
78
79
80
81
82
83
84
85
86
87
;Create a PSL mask, given some LOS B input data
;
;Example: pslmask=ar_psl(datasm,radius=smoothhwhm,thresh=thresh)
;
;RADIUS = dilation radius in pixels
;THRESH = magnetic threshold in G
;STATUS = 0 - initialised value
; 1 - a PSL detection was found
; 2 - no positive or negative pixels found above threshold
; 3 - no overlap between dilated positive and negative masks
function ar_pslmask, data, radius=inrad, thresh=inthresh, status=status, dothin=dothin
status=0
if n_elements(inrad) eq 1 then rad=inrad else rad=5.
if n_elements(inthresh) eq 1 then thresh=inthresh else thresh=100.
imgsz=size(data,/dim)
blank=fltarr(imgsz[0],imgsz[1])
;make a negative and positive mask
wpos=where(data gt thresh)
wneg=where(data lt -thresh)
if wpos[0] eq -1 or wneg[0] eq -1 then begin
status=2
return,blank
endif
posmsk=blank
posmsk[wpos]=1.
negmsk=blank
negmsk[wneg]=1.
;dilate the polarity masks
posmskgrw=ar_grow(posmsk, radius=rad)
negmskgrw=ar_grow(negmsk, radius=rad)
;Determine the overlap of the two masks
ovrmsk=posmskgrw+negmskgrw
wover=where(ovrmsk eq 2)
if wover[0] eq -1 then begin
status=3
return,blank
endif
outmsk=blank
outmsk[wover]=1.
if keyword_Set(dothin) then begin
outmsk=fix(thin(outmsk)>0<1)
; sepblob=label_region(outmsk)
; outmskthin=blank
; for i=1,max(sepblob) do begin
; wthis=where(sepblob eq i)
; thisthin=blank
; thisthin[wthis]=1
; outmskthin=outmskthin+thin(thisthin) ;,/prune
;Prune only works for closed paths :/ ...can't use.
; endfor
; outmsk=outmskthin
endif
status=1
return, outmsk
end