Расчет числовых характеристик алгоритма
Написана программа с интерфейсом на 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