File size: 2,836 Bytes
bb7f1f4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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

import gradio as gr
import numpy as np
import cv2
import modules.scripts as scripts

from modules import images
from modules.shared import opts

from cv2.ximgproc import guidedFilter
from modules.processing import process_images


class Script(scripts.Script):
    def title(self):
        return "AdverseCleaner"

    def show(self, is_img2img):
        return True

    def ui(self, is_img2img):
        info = gr.Markdown('''
        ### Bilateral Filter
        ''')
        bilateral_steps = gr.Slider(minimum=1, maximum=128, step=1,
                                    value=64, label="Bilateral Steps")
        diameter = gr.Slider(minimum=1, maximum=30, step=1,
                             value=5, label="Diameter")
        sigma_color = gr.Slider(minimum=1, maximum=30,
                                step=1, value=8, label="SigmaColor")
        sigma_space = gr.Slider(minimum=1, maximum=30,
                                step=1, value=8, label="SigmaSpace")
        info2 = gr.Markdown('''
        ### Guided Filter
        ''')
        guided_steps = gr.Slider(minimum=1, maximum=64, step=1,
                                 value=4, label="Guided Steps")
        radius = gr.Slider(minimum=1, maximum=30, step=1,
                           value=4, label="Radius")
        eps = gr.Slider(minimum=1, maximum=30, step=1,
                        value=16, label="Accuracy")
        return [info, bilateral_steps, diameter, sigma_color, sigma_space, info2, guided_steps, radius, eps]

    def run(self, p, _, bilateral_steps, diameter, sigma_color, sigma_space, __, guided_steps, radius, eps):
        from PIL import Image
        has_grid = False

        proc = process_images(p)
        unwanted_grid_because_of_img_count = len(
            proc.images) < 2 and opts.grid_only_if_multiple
        if (opts.return_grid or opts.grid_save) and not p.do_not_save_grid and not unwanted_grid_because_of_img_count:
            has_grid = True


        def process(im,i):
            outpath = p.outpath_grids if has_grid and i == 0 else p.outpath_samples
            img = cv2.cvtColor(
                np.array(im), cv2.COLOR_RGB2BGR).astype(np.float32)
            y = img.copy()
            for _ in range(bilateral_steps):
                y = cv2.bilateralFilter(y, diameter, sigma_color, sigma_space)

            for _ in range(guided_steps):
                y = guidedFilter(img, y, radius, eps)

            out_image = Image.fromarray(cv2.cvtColor(
                y.clip(0, 255).astype(np.uint8), cv2.COLOR_BGR2RGB))
            images.save_image(out_image, outpath, "img_", proc.seed +
                              i, proc.prompt, "png", info=proc.info, p=p)
            return out_image

        for i in range(len(proc.images)):
            proc.images.append(process(proc.images[i], i))
        return proc