mirror of
https://github.com/furrysalamander/rubedo.git
synced 2025-09-26 23:29:12 +08:00
42 lines
1.3 KiB
Python
42 lines
1.3 KiB
Python
import numpy as np
|
|
from constants import *
|
|
|
|
def brightest_average(pixel_values: np.ndarray):
|
|
brightest_pixels = np.argsort(pixel_values)[-3:]
|
|
line_brightest_x = FRAME_SIZE_X - np.average(brightest_pixels)
|
|
return line_brightest_x
|
|
|
|
|
|
def weighted_average(pixel_values: np.ndarray):
|
|
normalized_values = pixel_values / 255
|
|
adjusted_values = normalized_values ** 100
|
|
x_values = np.arange(adjusted_values.size)
|
|
if adjusted_values.max() == 0:
|
|
# FIXME: I need an appropriate solution for what to do if there are no non-zero values.
|
|
return 70
|
|
return FRAME_SIZE_X - np.average(x_values, weights=adjusted_values)
|
|
|
|
|
|
def first_non_zero(pixel_values: np.ndarray):
|
|
try:
|
|
return np.nonzero(pixel_values)[0][0]
|
|
except:
|
|
print()
|
|
|
|
|
|
def count_non_zero(pixel_values: np.ndarray):
|
|
return np.count_nonzero(pixel_values)
|
|
|
|
|
|
def compute_x_value(pixel_values: np.ndarray):
|
|
algorithms = {
|
|
"brightest_avg": brightest_average,
|
|
"weighted_avg": weighted_average,
|
|
"first_non_zero": first_non_zero,
|
|
"count_non_zero": count_non_zero,
|
|
}
|
|
# return algorithms["brightest_avg"](pixel_values)
|
|
# return algorithms["count_non_zero"](pixel_values)
|
|
# return algorithms["first_non_zero"](pixel_values)
|
|
return algorithms["weighted_avg"](pixel_values)
|