diff --git a/merger/InteractiveMergerSubprocessor.py b/merger/InteractiveMergerSubprocessor.py index 58db0c1..0bbb259 100644 --- a/merger/InteractiveMergerSubprocessor.py +++ b/merger/InteractiveMergerSubprocessor.py @@ -331,6 +331,8 @@ class InteractiveMergerSubprocessor(Subprocessor): 'x' : lambda cfg,shift_pressed: cfg.toggle_mask_mode(), 'c' : lambda cfg,shift_pressed: cfg.toggle_color_transfer_mode(), 'n' : lambda cfg,shift_pressed: cfg.toggle_sharpen_mode(), + '9' : lambda cfg,shift_pressed: cfg.add_pre_sharpen_power(1), + '8' : lambda cfg,shift_pressed: cfg.add_pre_sharpen_power(-1), } self.masked_keys = list(self.masked_keys_funcs.keys()) diff --git a/merger/MergeMasked.py b/merger/MergeMasked.py index d9e2bd1..4464c35 100644 --- a/merger/MergeMasked.py +++ b/merger/MergeMasked.py @@ -60,6 +60,10 @@ def MergeMaskedFace (predictor_func, predictor_input_shape, dst_face_mask_a_0 = cv2.warpAffine( img_face_mask_a, face_mat, (output_size, output_size), flags=cv2.INTER_CUBIC ) dst_face_mask_a_0 = np.clip(dst_face_mask_a_0, 0, 1) + + if cfg.pre_sharpen_power != 0: + dst_face_bgr = cv2.addWeighted(dst_face_bgr, 1.0 + (0.05 * cfg.pre_sharpen_power), cv2.GaussianBlur(dst_face_bgr, (0, 0), 1.0), -(0.05 * cfg.pre_sharpen_power), 0) + dst_face_bgr = np.clip(dst_face_bgr, 0, 1, out=dst_face_bgr) predictor_input_bgr = cv2.resize (dst_face_bgr, (input_size,input_size) ) diff --git a/merger/MergerConfig.py b/merger/MergerConfig.py index e95bb6a..989dfe0 100644 --- a/merger/MergerConfig.py +++ b/merger/MergerConfig.py @@ -114,6 +114,7 @@ class MergerConfigMasked(MergerConfig): image_denoise_power = 0, bicubic_degrade_power = 0, color_degrade_power = 0, + pre_sharpen_power = 0, **kwargs ): @@ -142,6 +143,7 @@ class MergerConfigMasked(MergerConfig): self.image_denoise_power = image_denoise_power self.bicubic_degrade_power = bicubic_degrade_power self.color_degrade_power = color_degrade_power + self.pre_sharpen_power = pre_sharpen_power def copy(self): return copy.copy(self) @@ -187,6 +189,9 @@ class MergerConfigMasked(MergerConfig): def add_bicubic_degrade_power(self, diff): self.bicubic_degrade_power = np.clip ( self.bicubic_degrade_power+diff, 0, 100) + + def add_pre_sharpen_power(self, diff): + self.pre_sharpen_power = np.clip ( self.pre_sharpen_power+diff, 0, 200) def ask_settings(self): s = """Choose mode: \n""" @@ -215,6 +220,9 @@ class MergerConfigMasked(MergerConfig): self.blur_mask_modifier = np.clip ( io.input_int ("Choose blur mask modifier", 0, add_info="0..400"), 0, 400) self.motion_blur_power = np.clip ( io.input_int ("Choose motion blur power", 0, add_info="0..100"), 0, 100) + self.pre_sharpen_power = np.clip (io.input_int ("Choose pre_sharpen power", 0, help_message="Can enhance results by pre sharping before feeding it to the network.", add_info="0..100" ), 0, 200) + + self.output_face_scale = np.clip (io.input_int ("Choose output face scale modifier", 0, add_info="-50..50" ), -50, 50) if 'raw' not in self.mode: @@ -249,7 +257,8 @@ class MergerConfigMasked(MergerConfig): self.super_resolution_power == other.super_resolution_power and \ self.image_denoise_power == other.image_denoise_power and \ self.bicubic_degrade_power == other.bicubic_degrade_power and \ - self.color_degrade_power == other.color_degrade_power + self.color_degrade_power == other.color_degrade_power and \ + self.pre_sharpen_power == other.pre_sharpen_power return False @@ -284,7 +293,9 @@ class MergerConfigMasked(MergerConfig): r += (f"""image_denoise_power: {self.image_denoise_power}\n""" f"""bicubic_degrade_power: {self.bicubic_degrade_power}\n""" f"""color_degrade_power: {self.color_degrade_power}\n""") - + + r += f"""pre_sharpen_power: {self.pre_sharpen_power}\n""" + r += "================" return r