улучшение производительности Python - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь получить значения интенсивности из изображения RGB на основе этой формулы:

И мой код:

def normalize(image):       #normalize values to between 0 and 1
    image -= image.min()
    image /= image.max()

    image = np.uint8(image * 255)   #convert values to uint8 between 0-255
    return image


def custom_intensity(image):
    h, w, c = image.shape

    intensity = np.zeros((h, w))

    image = image.astype(float)

    for i in range(h):
        for j in range(w):
            divider = image[i, j, 0] + image[i, j, 1] + image[i, j, 2]
            if(divider == 0):
                intensity[i, j] == 0
            else:
                intensity[i, j] = image[i, j, 0] * (image[i, j, 0] / divider) + \
                                  image[i, j, 1] * (image[i, j, 1] / divider) + \
                                  image[i, j, 2] * (image[i, j, 2] / divider)


    intensity = normalize(intensity)
    return intensity

, который работаетхорошо но медленноЯ новичок в Python, поэтому не мог улучшить это дальше.Как я могу сделать этот код более эффективным?

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Попробуйте это:

image += (pow(10, -6), pow(10, -6), pow(10, -6))
intensity = (pow(image[:, :, 0], 2) + pow(image[:, :, 1], 2) + pow(image[:, :, 2], 2)) \
            / (image[:, :, 0] + image[:, :, 1] + image[:, :, 2])
0 голосов
/ 13 декабря 2018

Вам не нужно быть экспертом в Python.

Упростите ваше уравнение:

(R**2 + G**2 + B**2) / (R+G+B)
...