【ControlNet】【canny2image】エッジ検出の設定をいじってみる

はじめに

以前「ControlNet」の「canny2image」と「pose2image」使い方を紹介しました。
touch-sp.hatenablog.com

canny2image


pose2image





今回は「canny2image」におけるエッジ検出の設定についていろいろ試してみました。

といっても「low_threshold」と「high_threshold」を変更しただけです。

いっきに25枚の画像を出力してくれるPythonスクリプトを書きました。

結果


上から下に向けて「low_threshold」を50→100→150→200→250と変更しています。

左から右に向けて「high_threshold」を50→100→150→200→250と変更しています。

左上と右下をつなぐ線を境に対称になっています。実質15種類の画像になります。

指や髪などのエッジが正確に検出されているかをみながら一番良いものを選ぶのがよさそうです。

Pythonスクリプト

import os
from PIL import Image
import numpy as np
from annotator.util import resize_image, HWC3
from annotator.canny import CannyDetector
from argparse import ArgumentParser
parser = ArgumentParser()
parser.add_argument(
    '--image',
    required=True,
    type=str,
    help='original image'
)
args = parser.parse_args()
original_image = np.array(Image.open(args.image))
threshold_list = [50, 100, 150, 200, 250]
image_resolution = 512
apply_canny = CannyDetector()
img = resize_image(HWC3(original_image), image_resolution)
H, W, C = img.shape
os.makedirs('results', exist_ok=True)
for low_threshold in threshold_list:
    for high_threshold in threshold_list:
        detected_map = apply_canny(img, low_threshold, high_threshold)
        detected_map = HWC3(detected_map)
        pil_image_detected_map = Image.fromarray(255 - detected_map)
        pil_image_detected_map.save(os.path.join('results', f'{low_threshold}_{high_threshold}.png'))

関連記事

つづきの記事を書きました。
touch-sp.hatenablog.com