-
Notifications
You must be signed in to change notification settings - Fork 1
/
utils.py
63 lines (51 loc) · 1.53 KB
/
utils.py
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
import sys
import numpy as np
from scipy import signal
import warnings
from enum import Enum
class Filter(Enum):
UNIFORM = 0
GAUSSIAN = 1
def _initial_check(GT,P):
assert GT.shape == P.shape, "Supplied images have different sizes " + \
str(GT.shape) + " and " + str(P.shape)
if GT.dtype != P.dtype:
msg = "Supplied images have different dtypes " + \
str(GT.dtype) + " and " + str(P.dtype)
warnings.warn(msg)
if len(GT.shape) == 2:
GT = GT[:,:,np.newaxis]
print(GT)
P = P[:,:,np.newaxis]
return GT.astype(np.float64),P.astype(np.float64)
def _get_sums(GT,P,win,mode='same'):
mu1,mu2 = (filter2(GT,win,mode),filter2(P,win,mode))
return mu1*mu1, mu2*mu2, mu1*mu2
def _get_sigmas(GT,P,win,mode='same',**kwargs):
if 'sums' in kwargs:
GT_sum_sq,P_sum_sq,GT_P_sum_mul = kwargs['sums']
else:
GT_sum_sq,P_sum_sq,GT_P_sum_mul = _get_sums(GT,P,win,mode)
return filter2(GT*GT,win,mode) - GT_sum_sq,\
filter2(P*P,win,mode) - P_sum_sq, \
filter2(GT*P,win,mode) - GT_P_sum_mul
def filterFaultyPixels(image_ls):
pass
def addUtilFunc():
pass
def fspecial(fltr,ws,**kwargs):
if fltr == Filter.UNIFORM:
return np.ones((ws,ws))/ ws**2
elif fltr == Filter.GAUSSIAN:
x, y = np.mgrid[-ws//2 + 1:ws//2 + 1, -ws//2 + 1:ws//2 + 1]
g = np.exp(-((x**2 + y**2)/(2.0*kwargs['sigma']**2)))
g[ g < np.finfo(g.dtype).eps*g.max() ] = 0
assert g.shape == (ws,ws)
den = g.sum()
if den !=0:
g/=den
#print(g)
return g
return None
def filter2(img,fltr,mode='same'):
return signal.convolve2d(img, np.rot90(fltr,2), mode=mode)