среднее значение люминесценции в зависимости от расстояния до центра изображения

Я хотел бы вычислить среднее значение люминесценции в зависимости от расстояния до центра изображения. Подход, о котором я думаю, заключается в том, чтобы

  1. вычислить расстояние между пикселями в изображении и центре изображения
  2. сгруппировать пиксели с одинаковым расстоянием
  3. вычислить среднее значение пикселей для каждой группы
  4. график зависимости расстояния от средней интенсивности

Для вычисления первого шага я использую эту функцию:

dist_img = np.zeros(gray.shape, dtype=np.uint8)
for y in range(0, h):
    for x in range(0, w):
        cy = gray.shape[0]/2
        cx = gray.shape[1]/2

        dist = math.sqrt(((x-cx)**2)+((y-cy)**2))
        dist_img[y,x] = dist

К сожалению, id дает результат, отличный от того, который я вычисляю здесь.

distance = math.sqrt(((1 - gray.shape[0]/2)**2 )+((1 - gray.shape[1]/2 )**2))

когда я проверяю его на пиксель (1,1), я получаю 20 из первого кода и 3605 из второго. Я был бы признателен за предложения о том, как исправить цикл, и подсказки о том, как начать с других точек. Или, может быть, есть другой способ добиться того, чего я хотел бы.


person A.Klim    schedule 19.07.2018    source источник


Ответы (1)


Вы настраиваете dist_img с np.uint8 dtype. Это 8-битное целое число без знака может соответствовать значениям от 0 до 255, поэтому 3605 не может быть правильно представлено. Используйте более высокую разрядность для вашего dtype дальнего изображения, например np.uint32.

distance = math.sqrt(((1 - gray.shape[0]/2)**2 )+((1 - gray.shape[1]/2 )**2))

Осторожно: gray.shape даст вам (высота, ширина) или (y, x). Другой код правильно присваивает gray.shape[0]/2 центру y, этот смешивает его и использует высоту для координаты x.

Ваш алгоритм кажется достаточно хорошим, я бы посоветовал вам придерживаться его. Вы можете добиться чего-то похожего на первые два шага, преобразовав изображение в полярное пространство (например, с помощью OpenCV linearToPolar), но это может быть сложнее отлаживать.

person w-m    schedule 19.07.2018