Was ich versuche zu tun, ist das lokale Minima in einer zufälligen Reihe eines Bildes zu finden (fertig), dann finden Sie die lokalen Minima in dieser Liste.
Ich habe den folgenden Code geschrieben, um eine Funktion zu verwenden, um die Minimalwerte in einer 1-d-Array zu finden:Versuchen, rekursiv zu verstehen, Mindestwert zu finden
import numpy as np
values = []
pixels = []
def find_minima(array):
'''
Takes a 1-d array as an argument, and returns a list of the
minimum values of the array, and the pixels at which the
minima occur
'''
# Find local minimum, and add to list of minimum-valued pixels
for i in range(1, len(array)-1):
if array[i-1] > array[i]:
if array[i+1] > array[i]:
values.append(array[i])
pixels.append([i])
else:
continue
return (values, pixels)
# Generate a random image
np.random.seed(seed=128)
side = 15
img = np.random.rand(side, side)
height = img.shape[0] # Inspect height of image
# Select row at random
index = np.random.randint(0, height)
row = img[index]
minimum_values, minimum_pixels = find_minima(row)
global_minimum_values, global_minimum_pixels = find_minima(minimum_values)
Das Programm funktioniert gut, bis ich versuche, die Liste der minimum_values
bereits gefunden passieren, zurück in die Funktion, um die Minima in dieser Liste zu finden.
Ich erwarte, dass die Variablenwerte wäre:
minimum_values = [0.2274, 0.6910, 0.2715, 0.3075]
minimum_pixels = [[1], [3], [7], [11]]
global_minimum_values = [0.2715]
global_minimum_pixels = [2]
sondern, heftet das Programm nur die globalen Minima auf der ursprünglichen Liste, so dass sie alle gleich:
minimum_values = [0.2274, 0.6910, 0.2715, 0.3075, 0.2715]
minimum_pixels = [[1], [3], [7], [11], [2]]
global_minimum_values = [0.2274, 0.6910, 0.2715, 0.3075, 0.2715]
global_minimum_pixels = [[1], [3], [7], [11], [2]]
Wie kann ich den Code ändern, um meine gewünschte Ausgabe zu produzieren?
Hinweis: Es gibt wahrscheinlich einfachere Möglichkeiten, dies zu tun, aber dieser Weg passt am besten zu den anderen Verarbeitungen, die ich tun muss. Daher möchte ich verstehen, warum sich dieser Code nicht so verhält, wie ich es erwarte.