Нейросетевая обработка изображений
Загрузка изображения
import matplotlib.pyplot as plt
from PIL import Image, ImageDraw
import numpy as np
dirname = '/content/drive/My Drive/Colab Notebooks/pypractik/'
fname = dirname + 'pic1.jpg'
image = Image.open(fname)
width, height = image.size
pix = image.load()
pix # PixelAccess
pix[250, 250] # доступ к пикселю
rgb_array = np.asarray(image) # преобразование изображение в np array
print(rgb_array.shape)
plt.imshow(rgb_array[150:300,:,:]) # Обрезка изображения
Нормировка яркостей
Для обработки нейросетями на вход надо подавать тензора с вещественнымми нормированными числами
Для экономии памяти при работе с большими массивами используют float32
rgb_array_norm = rgb_array / 255
rgb_array_norm = rgb_array_norm.astype('float32')
Добавление шума
Сгенирируем равномерный шум в интервале от -0.3 до 0.3
noise = np.random.random(size=rgb_array_norm.shape) * 0.6 - 0.3
noise.min(), noise.max() # (-0.29999818241053866, 0.29999963775079413)
rgb_array_noise = rgb_array_norm + noise
rgb_array_noise[rgb_array_noise < 0 ] = 0.0
rgb_array_noise[rgb_array_noise > 1.0 ] = 1.0
Сравним изображения
plt.imshow(np.concatenate([rgb_array_norm, rgb_array_noise], axis=1))
Создание картинки из тензора
def triangle(width):
height = int(np.sqrt(3)/2 * width)
middle = int(width/2)
step = np.sqrt(3)/3
white_color = np.array([255, 255, 255])
blue_color = np.array([0, 100, 200])
rgb_array = np.full(shape=(height,width,3), fill_value=255, dtype=np.uint8)
for i in range(height):
rgb_array[i:i+1, middle-int(i*step):middle+int(i*step), :] = blue_color
for i in range(int(height/2)):
rgb_array[height-i:height-i+1, middle-int(i*step):middle+int(i*step), :] = white_color
return rgb_array
im_array = triangle(width=500)
plt.imshow(im_array)