Почему выходное изображение черное после нормализации? - PullRequest
0 голосов
/ 05 ноября 2019

У меня есть много изображений в градациях серого, которые я хочу нормализовать, используя среднее значение и стандартное отклонение. Я использую следующий процесс:

  1. Рассчитать среднее значение изображения и стандартное отклонение.

  2. Вычесть среднее значение из изображения.

  3. Разделите полученное изображение на стандартное отклонение.

Однако в результате я получил черное изображение. Что не так в моем коде?

    import cv2

    img = cv2.imread('E.png')   # read an image 
    gray_image = cv2.cvtColor(img , cv2.COLOR_BGR2GRAY)  # converting the image to grayscale image
    img = cv2.resize(gray_image, (60, 60))  # Resize the image to the size 60x60 pixels

    cv2.imwrite("Grayscale Image.png",img)  #To write the result  

    mean, stdDev = cv2.meanStdDev(img)  #Get Mean and Standard-deviation
    image = (img-mean)/stdDev  #Normalization process

    cv2.imwrite("Normalized Image.png",image)  #To write the result 

Входное изображение: i1

Вывод в оттенках серого: i2

Нормализованный вывод изображения: i3

1 Ответ

3 голосов
/ 05 ноября 2019

При сохранении изображения необходимо учитывать тип данных. Чтобы сохранить нормализованное изображение в формате png, необходимо масштабировать нормализованные значения до целочисленного диапазона (например, [0, 255]) или использовать формат изображения, который поддерживает формат с плавающей запятой.

При использовании нормализации z-счета (как в вашем коде), вы можете сохранить его как png с помощью

image -= image.min() 
image /= image.max()

image *= 255 # [0, 255] range
cv2.imwrite("Normalized Image.png", image)
...