Serg4451D commited on
Commit
ca0a7fb
·
verified ·
1 Parent(s): 76c4f8b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +26 -11
app.py CHANGED
@@ -1,17 +1,18 @@
1
  import gradio as gr
2
  import cv2
3
  import numpy as np
4
- from PIL import Image
5
 
6
- def compress_and_enhance(img, mode):
7
  """
8
  Сжимает изображение, уменьшая его в 2 раза по ширине, высоте или обоим измерениям,
9
- затем увеличивает обратно с помощью интерполяции Ланцоша и применяет
10
- алгоритм нерезкого маскирования для повышения резкости.
11
 
12
  Args:
13
  img: Изображение в формате PIL Image.
14
  mode: Режим сжатия ("Width", "Height", "Both").
 
15
 
16
  Returns:
17
  Обработанное изображение в формате PIL Image.
@@ -37,26 +38,39 @@ def compress_and_enhance(img, mode):
37
  else:
38
  resized_img = img
39
 
 
 
 
 
 
 
 
40
  # Нерезкое маскирование (Unsharp Masking)
41
- blurred = cv2.GaussianBlur(resized_img, (0, 0), 3)
42
- sharpened = cv2.addWeighted(resized_img, 1.5, blurred, -0.5, 0)
 
 
 
 
 
43
 
44
- return Image.fromarray(sharpened)
45
 
46
- def process_image(img, mode):
47
  """
48
  Обрабатывает изображение.
49
 
50
  Args:
51
  img: Изображение.
52
  mode: Режим сжатия.
 
53
 
54
  Returns:
55
  Обработанное изображение в формате PIL Image или None.
56
  """
57
  if img is not None:
58
  pil_img = Image.fromarray(img.astype('uint8'), 'RGB')
59
- return compress_and_enhance(pil_img, mode)
60
  else:
61
  return None
62
 
@@ -65,11 +79,12 @@ iface = gr.Interface(
65
  fn=process_image,
66
  inputs=[
67
  gr.Image(type="numpy", label="Upload Image"),
68
- gr.Radio(choices=["Width", "Height", "Both"], label="Compression Mode", value="Both")
 
69
  ],
70
  outputs=gr.Image(type="pil", label="Processed Image"),
71
  title="Image Compression and Enhancement",
72
- description="Compresses an image by downsampling either its width, height, or both, then upscales it using Lanczos resampling and applies unsharp masking for quality enhancement.",
73
  )
74
 
75
  iface.launch()
 
1
  import gradio as gr
2
  import cv2
3
  import numpy as np
4
+ from PIL import Image, ImageEnhance
5
 
6
+ def compress_and_enhance(img, mode, denoise_strength):
7
  """
8
  Сжимает изображение, уменьшая его в 2 раза по ширине, высоте или обоим измерениям,
9
+ затем увеличивает обратно с помощью интерполяции Ланцоша, применяет
10
+ агрессивное шумоподавление и корректирует насыщенность.
11
 
12
  Args:
13
  img: Изображение в формате PIL Image.
14
  mode: Режим сжатия ("Width", "Height", "Both").
15
+ denoise_strength: Сила шумоподавления (от 0 до 10, где 0 - нет шумоподавления, 10 - максимальное).
16
 
17
  Returns:
18
  Обработанное изображение в формате PIL Image.
 
38
  else:
39
  resized_img = img
40
 
41
+ # Агрессивное шумоподавление (Non-Local Means Denoising)
42
+ if denoise_strength > 0:
43
+ # h values from 3 (very low) to 10 (very high)
44
+ denoised_img = cv2.fastNlMeansDenoisingColored(resized_img, None, h=denoise_strength, templateWindowSize=7, searchWindowSize=21)
45
+ else:
46
+ denoised_img = resized_img
47
+
48
  # Нерезкое маскирование (Unsharp Masking)
49
+ blurred = cv2.GaussianBlur(denoised_img, (0, 0), 3)
50
+ sharpened = cv2.addWeighted(denoised_img, 1.5, blurred, -0.5, 0)
51
+
52
+ # Коррекция насыщенности
53
+ pil_img = Image.fromarray(sharpened)
54
+ enhancer = ImageEnhance.Color(pil_img)
55
+ enhanced_img = enhancer.enhance(1.2) # Увеличение насыщенности на 20%
56
 
57
+ return enhanced_img
58
 
59
+ def process_image(img, mode, denoise_strength):
60
  """
61
  Обрабатывает изображение.
62
 
63
  Args:
64
  img: Изображение.
65
  mode: Режим сжатия.
66
+ denoise_strength: Сила шумоподавления.
67
 
68
  Returns:
69
  Обработанное изображение в формате PIL Image или None.
70
  """
71
  if img is not None:
72
  pil_img = Image.fromarray(img.astype('uint8'), 'RGB')
73
+ return compress_and_enhance(pil_img, mode, denoise_strength)
74
  else:
75
  return None
76
 
 
79
  fn=process_image,
80
  inputs=[
81
  gr.Image(type="numpy", label="Upload Image"),
82
+ gr.Radio(choices=["Width", "Height", "Both"], label="Compression Mode", value="Both"),
83
+ gr.Slider(minimum=0, maximum=10, step=1, label="Denoise Strength", value=0)
84
  ],
85
  outputs=gr.Image(type="pil", label="Processed Image"),
86
  title="Image Compression and Enhancement",
87
+ description="Compresses an image, applies aggressive denoising, and enhances saturation. Adjust the denoise strength for smoother results.",
88
  )
89
 
90
  iface.launch()