Рубрики
Без рубрики

Извилисток в Python, test_code_ # 001

Дескриптор изображения в Python. Помечено с питоном, почерком, Numpy, Computery.

Извилистость может быть определена как «Имеет нерегулярные изгибы, кривые и волнения и по-разному. “ Так что расчет дескриптора (и индекс) может представлять емкость этого образца (человек) произвести извилистость (Вообще один рассчитал среднее и СТД, я не буду углубиться в эти расчеты) Отказ Другой (Лично) Определение, которое мне нравится, это «если я возьму этот момент, как далеко может двигаться без изменения его направления» (и, возможно, это определение было реализовано) .

В целом это решение требует двоичного изображения (почерк) Отказ Процедура создает копийный слой (что я называю тягой) А затем, в зависимости от подключения, отправьте, чтобы вычислить бинарную матрицу в рекурсивный путь.

Этот код рассматривает подключение к 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”