tori29umai commited on
Commit
2354769
·
1 Parent(s): 2e1c1e0
Files changed (1) hide show
  1. app.py +31 -31
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=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,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 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,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(image_path).convert('L')
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.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
 
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__":