Spaces:
Running
Running
tori29umai
commited on
Commit
·
2354769
1
Parent(s):
2e1c1e0
Update
Browse files
app.py
CHANGED
@@ -7,12 +7,16 @@ from collections import defaultdict
|
|
7 |
from skimage.color import deltaE_ciede2000, rgb2lab
|
8 |
import zipfile
|
9 |
|
10 |
-
def DoG_filter(image, kernel_size
|
11 |
-
|
12 |
-
|
|
|
|
|
|
|
|
|
13 |
return g1 - gamma * g2
|
14 |
|
15 |
-
def XDoG_filter(image, kernel_size
|
16 |
epsilon /= 255
|
17 |
dog = DoG_filter(image, kernel_size, sigma, k_sigma, gamma)
|
18 |
dog /= dog.max()
|
@@ -20,24 +24,10 @@ def XDoG_filter(image, kernel_size=0, sigma=1.4, k_sigma=1.6, epsilon=0, phi=10,
|
|
20 |
e[e >= 1] = 1
|
21 |
return (e * 255).astype('uint8')
|
22 |
|
23 |
-
def
|
24 |
-
|
25 |
-
return binarized
|
26 |
-
|
27 |
-
|
28 |
-
def process_XDoG(image_path):
|
29 |
-
kernel_size=0
|
30 |
-
sigma=1.4
|
31 |
-
k_sigma=1.6
|
32 |
-
epsilon=0
|
33 |
-
phi=10
|
34 |
-
gamma=0.98
|
35 |
-
|
36 |
-
image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
|
37 |
xdog_image = XDoG_filter(image, kernel_size, sigma, k_sigma, epsilon, phi, gamma)
|
38 |
-
|
39 |
-
final_image = Image.fromarray(binarized_image)
|
40 |
-
return final_image
|
41 |
|
42 |
|
43 |
|
@@ -161,7 +151,14 @@ class webui:
|
|
161 |
def __init__(self):
|
162 |
self.demo = gr.Blocks()
|
163 |
|
164 |
-
def main(self, image_path):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
165 |
image = Image.open(image_path).convert('RGBA')
|
166 |
#拡張子を取り除いたファイル名を取得
|
167 |
image_name = os.path.splitext(image_path)[0]
|
@@ -169,7 +166,7 @@ class webui:
|
|
169 |
image.save(image_path)
|
170 |
image = Image.open(image_path).convert('RGBA')
|
171 |
rgb_image = image.convert('RGB')
|
172 |
-
lineart = process_XDoG(
|
173 |
replace_color_image = process_image(rgb_image, lineart).convert('RGBA')
|
174 |
|
175 |
if alpha:
|
@@ -197,19 +194,22 @@ class webui:
|
|
197 |
with gr.Row():
|
198 |
with gr.Column():
|
199 |
input_image = gr.Image(type='filepath', image_mode="RGBA", label="Original Image")
|
|
|
|
|
|
|
|
|
|
|
|
|
200 |
submit = gr.Button(value="Start")
|
201 |
-
with gr.
|
202 |
-
|
203 |
-
|
204 |
-
output_0 = gr.Gallery(format="png")
|
205 |
-
output_file = gr.File()
|
206 |
submit.click(
|
207 |
self.main,
|
208 |
-
inputs=[input_image],
|
209 |
-
outputs=[
|
210 |
)
|
211 |
|
212 |
-
self.demo.queue()
|
213 |
self.demo.launch(share=share)
|
214 |
|
215 |
if __name__ == "__main__":
|
|
|
7 |
from skimage.color import deltaE_ciede2000, rgb2lab
|
8 |
import zipfile
|
9 |
|
10 |
+
def DoG_filter(image, kernel_size, sigma, k_sigma, gamma):
|
11 |
+
if kernel_size == 0:
|
12 |
+
kernel_size = None # OpenCVにカーネルサイズを自動で決定させる
|
13 |
+
else:
|
14 |
+
kernel_size = (kernel_size, kernel_size)
|
15 |
+
g1 = cv2.GaussianBlur(image, kernel_size, sigma)
|
16 |
+
g2 = cv2.GaussianBlur(image, kernel_size, sigma * k_sigma)
|
17 |
return g1 - gamma * g2
|
18 |
|
19 |
+
def XDoG_filter(image, kernel_size, sigma, k_sigma, epsilon, phi, gamma):
|
20 |
epsilon /= 255
|
21 |
dog = DoG_filter(image, kernel_size, sigma, k_sigma, gamma)
|
22 |
dog /= dog.max()
|
|
|
24 |
e[e >= 1] = 1
|
25 |
return (e * 255).astype('uint8')
|
26 |
|
27 |
+
def process_XDoG(image, kernel_size, sigma, k_sigma, epsilon, phi, gamma):
|
28 |
+
image = cv2.cvtColor(np.array(image), cv2.COLOR_RGB2GRAY)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
29 |
xdog_image = XDoG_filter(image, kernel_size, sigma, k_sigma, epsilon, phi, gamma)
|
30 |
+
return Image.fromarray(xdog_image).convert('L')
|
|
|
|
|
31 |
|
32 |
|
33 |
|
|
|
151 |
def __init__(self):
|
152 |
self.demo = gr.Blocks()
|
153 |
|
154 |
+
def main(self, image_path, kernel_size, sigma, k_sigma, epsilon, phi, gamma):
|
155 |
+
kernel_size = int(kernel_size)
|
156 |
+
sigma = float(sigma)
|
157 |
+
k_sigma = float(k_sigma)
|
158 |
+
epsilon = int(epsilon)
|
159 |
+
phi = int(phi)
|
160 |
+
gamma = float(gamma)
|
161 |
+
|
162 |
image = Image.open(image_path).convert('RGBA')
|
163 |
#拡張子を取り除いたファイル名を取得
|
164 |
image_name = os.path.splitext(image_path)[0]
|
|
|
166 |
image.save(image_path)
|
167 |
image = Image.open(image_path).convert('RGBA')
|
168 |
rgb_image = image.convert('RGB')
|
169 |
+
lineart = process_XDoG(image, kernel_size, sigma, k_sigma, epsilon, phi, gamma).convert('L')
|
170 |
replace_color_image = process_image(rgb_image, lineart).convert('RGBA')
|
171 |
|
172 |
if alpha:
|
|
|
194 |
with gr.Row():
|
195 |
with gr.Column():
|
196 |
input_image = gr.Image(type='filepath', image_mode="RGBA", label="Original Image")
|
197 |
+
kernel_size = gr.Dropdown(choices=[0, 1, 3, 5, 7, 9], value=0, label="カーネルサイズ (kernel_size)", description="ガウシアンフィルタのカーネルサイズです。0を選択するとOpenCVが自動でカーネルサイズを決定します。奇数値を選ぶとより鋭い線が得られます。")
|
198 |
+
sigma = gr.Slider(0.1, 10.0, step=0.1, value=1.4, label="シグマ (sigma)", description="ガウシアンフィルタの標準偏差。ぼかしの程度を制御します。")
|
199 |
+
k_sigma = gr.Slider(1.0, 3.0, step=0.1, value=1.6, label="k_シグマ (k_sigma)", description="二つ目のガウシアンフィルタのシグマの倍率。線の太さが影響を受けます。")
|
200 |
+
epsilon = gr.Slider(-10, 10, value=0, label="イプシロン (epsilon)", description="XDoGフィルターの閾値パラメータ。線画の明瞭度やコントラストを調整します。")
|
201 |
+
phi = gr.Slider(1, 100, value=10, label="ファイ (phi)", description="タンジェントハイパーボリック関数の係数。閾値を超えた部分の鮮明さを高めます。")
|
202 |
+
gamma = gr.Slider(0.5, 1.5, step=0.1, value=0.98, label="ガンマ (gamma)", description="DoGフィルタの強度調整パラメータ。主に線の明るさや暗さを調節します。")
|
203 |
submit = gr.Button(value="Start")
|
204 |
+
with gr.Column():
|
205 |
+
output_image = gr.Image(label="Processed Image")
|
206 |
+
|
|
|
|
|
207 |
submit.click(
|
208 |
self.main,
|
209 |
+
inputs=[input_image, kernel_size, sigma, k_sigma, epsilon, phi, gamma],
|
210 |
+
outputs=[output_image]
|
211 |
)
|
212 |
|
|
|
213 |
self.demo.launch(share=share)
|
214 |
|
215 |
if __name__ == "__main__":
|