added eps control to FS nodes and fixed eps bug in colormatch and restoredetail

This commit is contained in:
spacepxl
2024-06-03 00:23:38 -04:00
parent f2f6a99a82
commit fcbce8aac1
+21 -21
View File
@@ -408,8 +408,8 @@ class ColorMatchImage:
CATEGORY = "image/filters"
def batch_normalize(self, images, reference, blur_type, blur_size, factor):
t = images.detach().clone()
ref = reference.detach().clone()
t = images.detach().clone() + 0.1
ref = reference.detach().clone() + 0.1
if ref.shape[0] < t.shape[0]:
ref = ref[0].unsqueeze(0).repeat(t.shape[0], 1, 1, 1)
@@ -426,20 +426,19 @@ class ColorMatchImage:
d = blur_size * 2 + 1
if blur_type == "blur":
blurred = cv_blur_tensor(torch.clamp(t, 0.001, 1), d, d)
blurred_ref = cv_blur_tensor(torch.clamp(ref, 0.001, 1), d, d)
blurred = cv_blur_tensor(t, d, d)
blurred_ref = cv_blur_tensor(ref, d, d)
elif blur_type == "guidedFilter":
t_clamp = torch.clamp(t, 0.001, 1)
ref_clamp = torch.clamp(ref, 0.001, 1)
blurred = guided_filter_tensor(t_clamp, t_clamp, d, 0.01)
blurred_ref = guided_filter_tensor(ref_clamp, ref_clamp, d, 0.01)
blurred = guided_filter_tensor(t, t, d, 0.01)
blurred_ref = guided_filter_tensor(ref, ref, d, 0.01)
for i in range(t.shape[0]):
for c in range(3):
t[i,:,:,c] /= blurred[i,:,:,c]
t[i,:,:,c] *= blurred_ref[i,:,:,c]
t = torch.lerp(images, t, factor)
t = t - 0.1
torch.clamp(torch.lerp(images, t, factor), 0, 1)
return (t,)
class RestoreDetail:
@@ -462,8 +461,8 @@ class RestoreDetail:
CATEGORY = "image/filters"
def batch_normalize(self, images, detail, mode, blur_type, blur_size, factor):
t = images.detach().clone()
ref = detail.detach().clone()
t = images.detach().clone() + 0.1
ref = detail.detach().clone() + 0.1
if ref.shape[0] < t.shape[0]:
ref = ref[0].unsqueeze(0).repeat(t.shape[0], 1, 1, 1)
@@ -471,19 +470,18 @@ class RestoreDetail:
d = blur_size * 2 + 1
if blur_type == "blur":
blurred = cv_blur_tensor(torch.clamp(t, 0.001, 1), d, d)
blurred_ref = cv_blur_tensor(torch.clamp(ref, 0.001, 1), d, d)
blurred = cv_blur_tensor(t, d, d)
blurred_ref = cv_blur_tensor(ref, d, d)
elif blur_type == "guidedFilter":
t_clamp = torch.clamp(t, 0.001, 1)
ref_clamp = torch.clamp(ref, 0.001, 1)
blurred = guided_filter_tensor(ref_clamp, t_clamp, d, 0.01)
blurred_ref = guided_filter_tensor(ref_clamp, ref_clamp, d, 0.01)
blurred = guided_filter_tensor(t, t, d, 0.01)
blurred_ref = guided_filter_tensor(ref, ref, d, 0.01)
if mode == "multiply":
t = (ref / blurred_ref) * blurred
else:
t = (ref - blurred_ref) + blurred
t = t - 0.1
t = torch.clamp(torch.lerp(images, t, factor), 0, 1)
return (t,)
@@ -725,6 +723,7 @@ class FrequencyCombine:
"high_frequency": ("IMAGE", ),
"low_frequency": ("IMAGE", ),
"mode": (["subtract", "divide"],),
"eps": ("FLOAT", {"default": 0.1, "min": 0.01, "max": 0.99, "step": 0.01}),
},
}
@@ -733,12 +732,12 @@ class FrequencyCombine:
CATEGORY = "image/filters"
def filter_image(self, high_frequency, low_frequency, mode):
def filter_image(self, high_frequency, low_frequency, mode, eps):
t = low_frequency.detach().clone()
if mode == "subtract":
t = t + high_frequency - 0.5
else:
t = (high_frequency * 2) * (t + 0.01) - 0.01
t = (high_frequency * 2) * (t + eps) - eps
return (torch.clamp(t, 0, 1),)
class FrequencySeparate:
@@ -749,6 +748,7 @@ class FrequencySeparate:
"original": ("IMAGE", ),
"low_frequency": ("IMAGE", ),
"mode": (["subtract", "divide"],),
"eps": ("FLOAT", {"default": 0.1, "min": 0.01, "max": 0.99, "step": 0.01}),
},
}
@@ -758,12 +758,12 @@ class FrequencySeparate:
CATEGORY = "image/filters"
def filter_image(self, original, low_frequency, mode):
def filter_image(self, original, low_frequency, mode, eps):
t = original.detach().clone()
if mode == "subtract":
t = t - low_frequency + 0.5
else:
t = ((t + 0.01) / (low_frequency + 0.01)) * 0.5
t = ((t + eps) / (low_frequency + eps)) * 0.5
return (t,)
class RemapRange: