Spaces:
Running
Running
Commit
·
6e9b1b6
1
Parent(s):
a578853
Update
Browse files
app.py
CHANGED
@@ -7,16 +7,12 @@ from collections import defaultdict
|
|
7 |
from skimage.color import deltaE_ciede2000, rgb2lab
|
8 |
import zipfile
|
9 |
|
10 |
-
def DoG_filter(image, kernel_size, sigma, k_sigma, gamma):
|
11 |
-
|
12 |
-
|
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,10 +20,24 @@ def XDoG_filter(image, kernel_size, sigma, k_sigma, epsilon, phi, gamma):
|
|
24 |
e[e >= 1] = 1
|
25 |
return (e * 255).astype('uint8')
|
26 |
|
27 |
-
def
|
28 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
29 |
xdog_image = XDoG_filter(image, kernel_size, sigma, k_sigma, epsilon, phi, gamma)
|
30 |
-
|
|
|
|
|
31 |
|
32 |
|
33 |
|
@@ -151,14 +161,7 @@ class webui:
|
|
151 |
def __init__(self):
|
152 |
self.demo = gr.Blocks()
|
153 |
|
154 |
-
def main(self, image_path
|
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,7 +169,7 @@ class webui:
|
|
166 |
image.save(image_path)
|
167 |
image = Image.open(image_path).convert('RGBA')
|
168 |
rgb_image = image.convert('RGB')
|
169 |
-
lineart = process_XDoG(
|
170 |
replace_color_image = process_image(rgb_image, lineart).convert('RGBA')
|
171 |
|
172 |
if alpha:
|
@@ -194,45 +197,15 @@ class webui:
|
|
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)")
|
198 |
-
kernel_size_description = gr.Label("ガウシアンフィルタのカーネルサイズです。線の鋭さを設定します。0を選択するとOpenCVが自動でカーネルサイズを決定します。")
|
199 |
-
sigma = gr.Slider(0.1, 10.0, step=0.1, value=1.4, label="シグマ (sigma)")
|
200 |
-
sigma_description = gr.Label("ガウシアンフィルタの標準偏差。ぼかしの程度を制御します。")
|
201 |
-
k_sigma = gr.Slider(1.0, 3.0, step=0.1, value=1.6, label="k_シグマ (k_sigma)")
|
202 |
-
k_sigma_description = gr.Label("二つ目のガウシアンフィルタのシグマの倍率。線の太さが影響を受けます。")
|
203 |
-
epsilon = gr.Slider(-10, 10, value=0, label="イプシロン (epsilon)")
|
204 |
-
epsilon_description = gr.Label("XDoGフィルターの閾値パラメータ。線画の明瞭度やコントラストを調整します。")
|
205 |
-
phi = gr.Slider(1, 100, value=10, label="ファイ (phi)")
|
206 |
-
phi_description = gr.Label("タンジェントハイパーボリック関数の係数。閾値を超えた部分の鮮明さを高めます。")
|
207 |
-
gamma = gr.Slider(0.5, 1.5, step=0.1, value=0.98, label="ガンマ (gamma)")
|
208 |
-
gamma_description = gr.Label("DoGフィルタの強度調整パラメータ。主に線の明るさや暗さを調節します。")
|
209 |
submit = gr.Button(value="Start")
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
self.demo.add(sigma)
|
216 |
-
self.demo.add(sigma_description)
|
217 |
-
self.demo.add(k_sigma)
|
218 |
-
self.demo.add(k_sigma_description)
|
219 |
-
self.demo.add(epsilon)
|
220 |
-
self.demo.add(epsilon_description)
|
221 |
-
self.demo.add(phi)
|
222 |
-
self.demo.add(phi_description)
|
223 |
-
self.demo.add(gamma)
|
224 |
-
self.demo.add(gamma_description)
|
225 |
-
self.demo.add(submit)
|
226 |
-
|
227 |
-
with gr.Row():
|
228 |
-
with gr.Column():
|
229 |
-
with gr.Tab("output"):
|
230 |
-
output_0 = gr.Gallery(format="png")
|
231 |
-
output_file = gr.File()
|
232 |
-
|
233 |
submit.click(
|
234 |
self.main,
|
235 |
-
inputs=[input_image
|
236 |
outputs=[output_0, output_file]
|
237 |
)
|
238 |
|
|
|
7 |
from skimage.color import deltaE_ciede2000, rgb2lab
|
8 |
import zipfile
|
9 |
|
10 |
+
def DoG_filter(image, kernel_size=0, sigma=1.0, k_sigma=2.0, gamma=1.5):
|
11 |
+
g1 = cv2.GaussianBlur(image, (kernel_size, kernel_size), sigma)
|
12 |
+
g2 = cv2.GaussianBlur(image, (kernel_size, kernel_size), sigma * k_sigma)
|
|
|
|
|
|
|
|
|
13 |
return g1 - gamma * g2
|
14 |
|
15 |
+
def XDoG_filter(image, kernel_size=0, sigma=1.4, k_sigma=1.6, epsilon=0, phi=10, gamma=0.98):
|
16 |
epsilon /= 255
|
17 |
dog = DoG_filter(image, kernel_size, sigma, k_sigma, gamma)
|
18 |
dog /= dog.max()
|
|
|
20 |
e[e >= 1] = 1
|
21 |
return (e * 255).astype('uint8')
|
22 |
|
23 |
+
def binarize_image(image):
|
24 |
+
_, binarized = cv2.threshold(image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
|
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 |
+
binarized_image = binarize_image(xdog_image)
|
39 |
+
final_image = Image.fromarray(binarized_image)
|
40 |
+
return final_image
|
41 |
|
42 |
|
43 |
|
|
|
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 |
image.save(image_path)
|
170 |
image = Image.open(image_path).convert('RGBA')
|
171 |
rgb_image = image.convert('RGB')
|
172 |
+
lineart = process_XDoG(image_path).convert('L')
|
173 |
replace_color_image = process_image(rgb_image, lineart).convert('RGBA')
|
174 |
|
175 |
if alpha:
|
|
|
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.Row():
|
202 |
+
with gr.Column():
|
203 |
+
with gr.Tab("output"):
|
204 |
+
output_0 = gr.Gallery(format="png")
|
205 |
+
output_file = gr.File()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
206 |
submit.click(
|
207 |
self.main,
|
208 |
+
inputs=[input_image],
|
209 |
outputs=[output_0, output_file]
|
210 |
)
|
211 |
|