Я обрезал ваше изображение следующим образом - пожалуйста, не публикуйте изображения с осями и метками, если люди должны их обработать!
Я тогда использовать функцию Scipy cdist()
. Итак, сначала создайте список всех белых пикселей на изображении, затем вычислите расстояние от начала координат в верхнем левом углу до каждого пикселя в списке. Затем найдите минимальное значение.
#!/usr/bin/env python3
import numpy as np
from PIL import Image
from scipy.spatial.distance import cdist
# Open image in greyscale and make into Numpy array
im = Image.open('curve.png').convert('L')
na = np.array(im)
# Get coordinates of white pixels
whites = np.where(na>127)
# Get distance from [0,0] to each white pixel
distances = cdist([(0,0)],np.transpose(whites))
# Index of nearest
ind = distances.argmin()
# Distance of nearest
d = distances[0,ind]
# Coords of nearest
x, y = whites[0][ind], whites[1][ind]
print(f'distance [{x},{y}] = {d}')
Пример вывода
distance [159,248] = 294.5929394944828
Если я нарисую радиус красного круга = 294 с центром в начале координат и синим кругом в центре по этим координатам x, y:
Ключевые слова : Python, обработка изображения, ближайший белый пиксель, ближайший черный пиксель ближайший пиксель переднего плана, ближайший пиксель фона, Numpy, cdist ()