tori29umai commited on
Commit
6e9b1b6
·
1 Parent(s): a578853
Files changed (1) hide show
  1. app.py +29 -56
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
- 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,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 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,14 +161,7 @@ class webui:
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,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(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,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
- self.demo.add(input_image)
213
- self.demo.add(kernel_size)
214
- self.demo.add(kernel_size_description)
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, kernel_size, sigma, k_sigma, epsilon, phi, gamma],
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