Как я могу заставить этот алгоритм повторяться для разных значений dx, dy и сохранять значения в массиве - PullRequest
0 голосов
/ 28 июня 2019

the image

Я хочу, чтобы тот же алгоритм повторялся в диапазоне значений DX, DY вместо меня, устанавливая значения внутри функции перевода.

Изображение, которое я использовал, является простым двоичным изображением абстрактной формы.Мне нужен массив расстояний, которые рассчитываются по разным значениям dx, dy

. Я считаю, что я пытаюсь использовать некоторую форму грубой силы, чтобы найти наиболее оптимальный dx, dy, который дает наилучшеерасстояние

import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
from scipy.spatial import distance
import scipy.misc
im = scipy.misc.imread(r'C:\Users\mbore\Pictures\irregular1.png', flatten=False, mode='L')


def ellipse(x, y):
    value = (x*x) + (y*y)/3
    if (value >= 600):
        return 0
    else:
        return 1

def translate(x, y):
    DX = 45
    DY = 75
    return (x- DX, y - DY)

def rotate(x, y):
    theta = np.radians(45)
    matrix = np.array([[np.cos(theta), -np.sin(theta)], [np.sin(theta), np.cos(theta)]])
    return np.dot(matrix, (x,y))

data = np.zeros((100,100))

for i in range(0, 100):
    for j in range(0, 100):
        (x, y) = translate(i,j)
        (x, y) = rotate(x, y)
        data[i,j] = ellipse(x, y)
        #np.append(data,ellipse(x,y))


plt.imshow(data, cmap="gray")
plt.show()


plt.imshow(im)
plt.show()

counter = 0 #tracking white
counter1 = 0 #tracking black 

#getting the dimensions of the image -> y
yDim = im.shape[0]

#getting the dimensions of the image -> x
xDim = im.shape[1]

for i in range(yDim):
    for j in range (xDim): 
        if np.any(im[i,j]) == 0:
            counter += 1
        else: 
            counter1 += 1

#initialize empty array this array will receive all the white pixels 
a = np.empty([100,100])

for i in range(yDim):
    for j in range (xDim): 
        if np.any(im[i,j]) == 0:
            np.append(a,im[i,j],axis=None)

#spatial distance 
a = a.flatten()
data = data.flatten()

distance = distance.hamming(data,a)
print (distance)

1 Ответ

0 голосов
/ 28 июня 2019

Я не совсем понимаю ваш вопрос (и, возможно, вы могли бы задать его более широко, например, часть прорисовки не имеет ничего общего с основной проблемой), но если вы просто хотите запустить этот код для других параметров, вы можете расширить свою функциюдля генерации DX и DY:

def translate(x, y, DX, DY):
    return (x- DX, y - DY)

DX_DY_list = [(1,1),(2,3),(3,4)]

for DX, DY in DX_DY_list:

    result  = translate(1, 2, DX, DY)               
    print(result)     

другим (немного более продвинутым) способом было бы обобщить код и использовать argparse , поскольку я считаю его очень полезным инструментомдля исследования параметров.

...