Skip to content

Commit 35364e8

Browse files
author
arch
committed
add evenly intermediate points
1 parent 2b3a41d commit 35364e8

File tree

3 files changed

+33
-1
lines changed

3 files changed

+33
-1
lines changed

funscript_editor/algorithms/funscriptgenerator.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -861,6 +861,9 @@ def determine_change_points(self, metric: str) -> dict:
861861
if self.params.additional_points == 'distance_minimization':
862862
additional_points_algorithms.append(Signal.AdditionalPointAlgorithm.distance_minimization)
863863

864+
if self.params.additional_points == 'evenly_intermediate':
865+
additional_points_algorithms.append(Signal.AdditionalPointAlgorithm.evenly_intermediate)
866+
864867
signal = Signal(self.video_info.fps)
865868
decimate_indexes = signal.decimate(
866869
self.score[metric],

funscript_editor/algorithms/signal.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ class AdditionalPointAlgorithm(enum.Enum):
4141
""" Available additional point algorithms for the decimate process """
4242
high_second_derivative = 1
4343
distance_minimization = 2
44+
evenly_intermediate = 3
4445

4546

4647
@staticmethod
@@ -326,6 +327,31 @@ def get_edge_points(self, signal: list, base_points: list, threshold: float = 25
326327
return edge_points
327328

328329

330+
def get_evenly_intermediate_points(self, signal: list, base_points: list) -> list:
331+
""" Get an aditional evenly intermediated point between 2 base points
332+
333+
Args:
334+
signal (list): the predicted signal
335+
base_points (list): current base points
336+
337+
Returns:
338+
list: list with index of the evenly intermediated points (additional points)
339+
"""
340+
if len(base_points) < 2:
341+
return []
342+
343+
base_points.sort()
344+
additional_points = []
345+
for i in range(len(base_points) - 1):
346+
diff = base_points[i+1] - base_points[i]
347+
if diff < 3:
348+
continue
349+
350+
additional_points.append(base_points[i] + round(diff/2))
351+
352+
self.logger.info("Found {} evenly intermediate point candidates".format(len(additional_points)))
353+
return additional_points
354+
329355

330356
def get_local_min_max_points(self, signal: list, filter_len: int = 1) -> list:
331357
""" Get the local max and min positions in given signal
@@ -579,6 +605,8 @@ def decimate(self,
579605
additional_indexes = self.get_high_second_derivative_points(signal, alpha = self.params.high_second_derivative_points_threshold)
580606
elif algo == self.AdditionalPointAlgorithm.distance_minimization:
581607
additional_indexes = self.get_edge_points(signal, decimated_indexes, threshold = self.params.distance_minimization_threshold)
608+
elif algo == self.AdditionalPointAlgorithm.evenly_intermediate:
609+
additional_indexes = self.get_evenly_intermediate_points(signal, decimated_indexes)
582610
else:
583611
raise NotImplementedError("Selected Additional Points Algorithm is not implemented")
584612

funscript_editor/ui/settings_dialog.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,8 @@ def __setup_combo_boxes(self):
158158
self.ui.additionalPointsComboBox.addItems([
159159
"None",
160160
"High Second Derivative",
161-
"Distance Minimization"
161+
"Distance Minimization",
162+
"Evenly intermediate"
162163
])
163164

164165
self.ui.processingSpeedComboBox.addItems([

0 commit comments

Comments
 (0)