File size: 1,483 Bytes
077a255
b6d8eef
 
0e089a6
c472fe6
077a255
eb570bb
0e089a6
 
 
c472fe6
0e089a6
 
c472fe6
0e089a6
c472fe6
0e089a6
c472fe6
 
0e089a6
077a255
c472fe6
eb570bb
0e089a6
eb570bb
 
 
 
 
 
c472fe6
 
0e089a6
 
 
f964bf0
 
 
 
0e089a6
c472fe6
 
eb570bb
288f88f
 
 
eb570bb
0e089a6
 
288f88f
 
 
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
import gradio as gr
import deepinv as dinv
import torch
import numpy as np
import PIL.Image


def pil_to_torch(image):
    image = np.array(image)
    image = image.transpose((2, 0, 1))
    image = torch.tensor(image).float() / 255
    return image.unsqueeze(0)


def torch_to_pil(image):
    image = image.squeeze(0).cpu().detach().numpy()
    image = image.transpose((1, 2, 0))
    image = (image * 255).astype(np.uint8)
    image = PIL.Image.fromarray(image)
    return image


def image_mod(image, noise_level, denoiser):
    image = pil_to_torch(image)
    if denoiser == 'DnCNN':
        denoiser = dinv.models.DnCNN()
    elif denoiser == 'MedianFilter':
        denoiser = dinv.models.MedianFilter()
    else:
        raise ValueError("Invalid denoiser")
    noisy = image + torch.randn_like(image) * noise_level
    estimated = denoiser(image, noise_level)
    return torch_to_pil(noisy), torch_to_pil(estimated)


input_image = gr.Image(label='Input Image')
output_images = gr.Image(label='Denoised Image')
noise_image = gr.Image(label='Noisy Image')
input_image_output = gr.Image(label='Input Image')

noise_levels = gr.Dropdown(choices=[0.1, 0.2, 0.3, 0.4, 0.5], value=0.1, label='Noise Level')

denoiser = gr.Dropdown(choices=['DnCNN', 'MedianFilter'], value=0.1, label='DnCNN')

demo = gr.Interface(
    image_mod,
    inputs=[input_image, noise_levels, denoiser],
    outputs=[noise_image, output_images],
    title="Image Denoising with DeepInverse",
)

demo.launch()