Расчет числовых характеристик алгоритма

Рейтинг: 0Ответов: 0Опубликовано: 22.04.2023

Написана программа с интерфейсом на Python в ходе отчетной работы. В данной программе реализован алгоритм попиксельного сравнения изображений. Отличия в изображениях выделяются. В алгоритме нет ничего сложного, он достаточно прост. Для отчетной работе необходимо привести какие-нибудь вычисления. Вопрос заключается в следующем: Какие числовые характеристики можно рассчитать на основе написанного алгоритма? Можно определить сложность алгоритма O(), однако это делается без формул и особых вычислений. Мне нужны хотя бы какие-нибудь вычисления математического аппарата алгоритма или инженерного типа. Что можете посоветовать? Буду благодарен за любую литературу или сайты, где приводятся примеры каких-нибудь вычислений на основе написанных алгоритмов. Код алгоритма(алгоритм реализован в analyze и region_analyze):

class ImageCompare():
def __init__(self):
    self.COLS = 192
    self.ROWS = 256
    self.region_diff = 1

# Анализ региона
def region_analyze(self, image_reference, image_target, x, y, width, height):
    region_status = 0
    for x_cord in range(x, x + width):
        for y_cord in range(y, y + height):
            try:
                pixel_reference = image_reference.getpixel((x_cord, y_cord))
                pixel_target = image_target.getpixel((x_cord, y_cord))
                if pixel_reference != pixel_target:
                    region_status = region_status + 1
                    if region_status > self.region_diff:
                        return False
            except:
                return None
    return True

# Анализ картинок
def analyze(self, image_ref, image_target, path, start, end, image_size_x, image_size_y):
    col=self.COLS
    row=self.ROWS
    count = 0
    reference = Image.open(os.path.join(path, image_ref))
    target = Image.open(os.path.join(path, image_target))
    width, height = reference.size
    block_width = width // col
    block_height = height // row

    has_diff = False
    start_x = self.min(start.x, end.x)
    end_x = self.max(start.x, end.x)
    start_y = self.min(image_size_y - start.y, image_size_y - end.y)
    end_y = self.max(image_size_y - start.y, image_size_y - end.y)

    if image_size_x == int(768 / 2) and image_size_y == int(1024 / 2): 
        n = 2
    else:
        n = 2.301
    for x in range(math.ceil(start_x * n), math.ceil(end_x * n) - (block_width + 1), block_width + 1):
        for y in range(math.ceil(start_y * n), math.ceil(end_y * n) - (block_height + 1), block_height + 1):
            region_status = self.region_analyze(reference, target, x, y, block_width, block_height)
            if not region_status:
                count = count + 1
                has_diff = True
                draw = ImageDraw.Draw(target)
                draw.rectangle((x - 1, y - 1, x + block_width, y + block_height), outline="red")
    return target, has_diff

# Минимум
def min(self, x, y):
    if x >= y:
        return y
    else:
        return x

# Максимум
def max(self, x, y):
    if x >= y:
        return x
    else:
        return y

Ответы

Ответов пока нет.