Извилистость может быть определена как «Имеет нерегулярные изгибы, кривые и волнения и по-разному. “ Так что расчет дескриптора (и индекс) может представлять емкость этого образца (человек) произвести извилистость (Вообще один рассчитал среднее и СТД, я не буду углубиться в эти расчеты) Отказ Другой (Лично) Определение, которое мне нравится, это «если я возьму этот момент, как далеко может двигаться без изменения его направления» (и, возможно, это определение было реализовано) .
В целом это решение требует двоичного изображения (почерк) Отказ Процедура создает копийный слой (что я называю тягой) А затем, в зависимости от подключения, отправьте, чтобы вычислить бинарную матрицу в рекурсивный путь.
Этот код рассматривает подключение к 4, а к 8, и я думаю, что это может быть улучшение на подключении к 16.
- К 4: горизонтальный и вертикальный.
- К 8: 4 плюс их диагонали (в 45 °).
- (к 16, каждые 22 °)
Но для проблемы, которую был создан этот код, результаты в тестовых наборах не указывают на необходимость расширения подключения
Код
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import math import numpy as np def __conect(image, pos, vect): limits = np.shape(image) if pos[0] < 0 or pos[0] == limits[0] or pos[1]< 0 or pos[1] == limits[1]: return 0 elif image[pos]: return 1+__conect(image,(pos[0]+vect[0],pos[1]+vect[1]),vect) return 0 def conect(image, label=4): draft = np.zeros(np.shape(image)).astype(int) image = image.astype(bool) pos=np.where(image==True) for i in range(len(pos[0])): weights = [] if label in [4, 8]: weights.append(__conect(image,(pos[0][i],pos[1][i]+1),(0,1))+__conect(image,(pos[0][i],pos[1][i]-1),(0,-1))) #vertical weights.append(__conect(image,(pos[0][i]+1,pos[1][i]),(1,0))+__conect(image,(pos[0][i]-1,pos[1][i]),(-1,0))) #horizontal if label in [8]: weights.append(__conect(image,(pos[0][i]+1,pos[1][i]+1),(1,1))+__conect(image,(pos[0][i]-1,pos[1][i]-1),(-1,-1))) #slash weights.append(__conect(image,(pos[0][i]-1,pos[1][i]+1),(-1,1))+__conect(image,(pos[0][i]+1,pos[1][i]-1),(+1,-1))) #backsalsh draft[pos[0][i],pos[1][i]]= 1+max(weights) return draft
Мне нравится рассматривать это пример названия (Необязательно) Аргументы, рекурсия и перемещение через двоичную матрицу без Двойной ** для **.
Вход
image = np.array([[0,0,0,0,0,0,0], [0,1,0,0,0,0,0], [0,1,1,1,1,1,0], [0,1,1,1,1,1,0], [0,1,1,1,1,1,0], [0,1,1,1,1,1,0], [0,0,0,0,0,1,1]]) print("Original: \n", image) print("Connect 4 (by default):\n", conect(image)) print("Connect set in 8:\n", conect(image, label=8))
Вывод
Original: [[0 0 0 0 0 0 0] [0 1 0 0 0 0 0] [0 1 1 1 1 1 0] [0 1 1 1 1 1 0] [0 1 1 1 1 1 0] [0 1 1 1 1 1 0] [0 0 0 0 0 1 1]] Connect 4 (by default): [[0 0 0 0 0 0 0] [0 5 0 0 0 0 0] [0 5 5 5 5 5 0] [0 5 5 5 5 5 0] [0 5 5 5 5 5 0] [0 5 5 5 5 5 0] [0 0 0 0 0 5 2]] Connect set in 8: [[0 0 0 0 0 0 0] [0 6 0 0 0 0 0] [0 5 6 5 5 5 0] [0 5 5 6 5 5 0] [0 5 5 5 6 5 0] [0 5 5 5 5 6 0] [0 0 0 0 0 5 6]]
Мой «Тестовые коды» Они являются небольшими разделами кода, чтобы попробовать то, что, возможно, я не знаю, или я не хочу тестировать в основном проекте, из-за необходимых нужд итерации работать хорошо. Обычно связаны с некоторым текущим проектом (Работа) иногда есть что-то еще (Отладка, печать, алгоритмы, эффективность и т. Д…) . У меня много этих файлов (называется тест # .py или удалить # .py) Итак, я постараюсь объяснить, почему я думаю, что они интересны, и я надеюсь, что для вас тоже. Если вы считаете, что у меня был плохой английский, прошу прощения, это не мой родной язык.
Оригинал: “https://dev.to/elem3ntal/tortuosity-in-python-testcode001-2epa”