|
|
|
|
@ -609,6 +609,18 @@ def ideal_low_filter(img, D0):
|
|
|
|
|
return filter_img
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def ideal_high_pass_filter(img, D0):
|
|
|
|
|
h, w = img.shape[:2]
|
|
|
|
|
filter_img = np.zeros((h, w))
|
|
|
|
|
u = np.fix(h / 2)
|
|
|
|
|
v = np.fix(w / 2)
|
|
|
|
|
for i in range(h):
|
|
|
|
|
for j in range(w):
|
|
|
|
|
d = np.sqrt((i - u) ** 2 + (j - v) ** 2)
|
|
|
|
|
filter_img[i, j] = 0 if d < D0 else 1
|
|
|
|
|
return filter_img
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def butterworth_low_filter(img, D0, rank):
|
|
|
|
|
"""
|
|
|
|
|
生成一个Butterworth低通滤波器(并返回)
|
|
|
|
|
@ -624,6 +636,21 @@ def butterworth_low_filter(img, D0, rank):
|
|
|
|
|
return filter_img
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def butterworth_high_pass_filter(img, D0, rank):
|
|
|
|
|
"""
|
|
|
|
|
生成一个Butterworth低通滤波器(并返回)
|
|
|
|
|
"""
|
|
|
|
|
h, w = img.shape[:2]
|
|
|
|
|
filter_img = np.zeros((h, w))
|
|
|
|
|
u = np.fix(h / 2)
|
|
|
|
|
v = np.fix(w / 2)
|
|
|
|
|
for i in range(h):
|
|
|
|
|
for j in range(w):
|
|
|
|
|
d = np.sqrt((i - u) ** 2 + (j - v) ** 2)
|
|
|
|
|
filter_img[i, j] = 1 / (1 + ((D0 / d) ** (2 * rank)))
|
|
|
|
|
return filter_img
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def gauss_low_pass_filter(img, d0):
|
|
|
|
|
"""
|
|
|
|
|
生成一个指数低通滤波器(并返回)
|
|
|
|
|
@ -639,7 +666,22 @@ def gauss_low_pass_filter(img, d0):
|
|
|
|
|
return filter_img
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def filter_use(img, filter):
|
|
|
|
|
def gauss_high_pass_filter(img, d0):
|
|
|
|
|
"""
|
|
|
|
|
生成一个指数低通滤波器(并返回)
|
|
|
|
|
"""
|
|
|
|
|
h, w = img.shape[:2]
|
|
|
|
|
filter_img = np.zeros((h, w))
|
|
|
|
|
u = np.fix(h / 2)
|
|
|
|
|
v = np.fix(w / 2)
|
|
|
|
|
for i in range(h):
|
|
|
|
|
for j in range(w):
|
|
|
|
|
d = np.sqrt((i - u) ** 2 + (j - v) ** 2)
|
|
|
|
|
filter_img[i, j] = 1 - np.exp(-0.5 * (d ** 2) / (d0 ** 2))
|
|
|
|
|
return filter_img
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def filter_use_smooth(img, filter):
|
|
|
|
|
"""
|
|
|
|
|
将图像img与滤波器filter结合,生成对应的滤波图像
|
|
|
|
|
"""
|
|
|
|
|
@ -654,6 +696,18 @@ def filter_use(img, filter):
|
|
|
|
|
return f_origin
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def filter_use_sharpen(img, filter):
|
|
|
|
|
f = np.fft.fft2(img)
|
|
|
|
|
f_center = np.fft.fftshift(f)
|
|
|
|
|
# 应用滤波器进行反变换
|
|
|
|
|
S = np.multiply(f_center, filter) # 频率相乘——l(u,v)*H(u,v)
|
|
|
|
|
f_origin = np.fft.ifftshift(S) # 将低频移动到原来的位置
|
|
|
|
|
f_origin = np.fft.ifft2(f_origin) # 使用ifft2进行傅里叶的逆变换
|
|
|
|
|
f_origin = np.abs(f_origin) # 设置区间
|
|
|
|
|
f_origin = f_origin / np.max(f_origin.all())
|
|
|
|
|
return f_origin
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@csrf_exempt
|
|
|
|
|
def smooth(request):
|
|
|
|
|
if request.method == 'POST':
|
|
|
|
|
@ -662,18 +716,46 @@ def smooth(request):
|
|
|
|
|
img = cv2.imread(PREFIX + image, 0)
|
|
|
|
|
# frequency domain
|
|
|
|
|
fd = para['fd']
|
|
|
|
|
smooth_type = para['type']
|
|
|
|
|
filter = para['filter']
|
|
|
|
|
if fd:
|
|
|
|
|
if smooth_type == 'ideal_low_pass_filter':
|
|
|
|
|
if filter == 'ideal_low_pass_filter':
|
|
|
|
|
d0 = para.get('d0', 20)
|
|
|
|
|
img = filter_use_smooth(img, ideal_low_filter(img, d0))
|
|
|
|
|
elif filter == 'butterworth_low_pass_filter':
|
|
|
|
|
d0 = para.get('d0', 20)
|
|
|
|
|
rank = para.get('rank', 2)
|
|
|
|
|
img = filter_use_smooth(img, butterworth_low_filter(img, d0, rank))
|
|
|
|
|
elif filter == 'gauss_low_pass_filter':
|
|
|
|
|
d0 = para.get('d0', 20)
|
|
|
|
|
img = filter_use(img, ideal_low_filter(img, d0))
|
|
|
|
|
elif smooth_type == 'butterworth_low_pass_filter':
|
|
|
|
|
img = filter_use_smooth(img, gauss_low_pass_filter(img, d0))
|
|
|
|
|
else:
|
|
|
|
|
return 0
|
|
|
|
|
filename = getImageName() + DEFAULT_FORMAT
|
|
|
|
|
cv2.imwrite(PREFIX + filename, img)
|
|
|
|
|
return HttpResponse(filename)
|
|
|
|
|
return HttpResponse('请使用POST方法')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@csrf_exempt
|
|
|
|
|
def sharpen(request):
|
|
|
|
|
if request.method == 'POST':
|
|
|
|
|
para = json.loads(request.body)
|
|
|
|
|
image = para['img']
|
|
|
|
|
img = cv2.imread(PREFIX + image, 0)
|
|
|
|
|
# frequency domain
|
|
|
|
|
fd = para['fd']
|
|
|
|
|
filter = para['filter']
|
|
|
|
|
if fd:
|
|
|
|
|
if filter == 'ideal_high_pass_filter':
|
|
|
|
|
d0 = para.get('d0', 40)
|
|
|
|
|
img = filter_use_sharpen(img, ideal_high_pass_filter(img, d0))
|
|
|
|
|
elif filter == 'butterworth_high_pass_filter':
|
|
|
|
|
d0 = para.get('d0', 20)
|
|
|
|
|
rank = para.get('rank', 2)
|
|
|
|
|
img = filter_use(img, butterworth_low_filter(img, d0, rank))
|
|
|
|
|
elif smooth_type == 'gauss_low_pass_filter':
|
|
|
|
|
img = filter_use_sharpen(img, butterworth_high_pass_filter(img, d0, rank))
|
|
|
|
|
elif filter == 'gauss_high_pass_filter':
|
|
|
|
|
d0 = para.get('d0', 20)
|
|
|
|
|
img = filter_use(img, gauss_low_pass_filter(img, d0))
|
|
|
|
|
img = filter_use_sharpen(img, gauss_high_pass_filter(img, d0))
|
|
|
|
|
else:
|
|
|
|
|
return 0
|
|
|
|
|
filename = getImageName() + DEFAULT_FORMAT
|
|
|
|
|
|