A "Таблица поиска" , или LUT - это небольшая таблица, обычно с 256 записями в ней.Он используется для применения «точечных процессов» к изображениям, т. Е. Когда новое значение после обработки каждого пикселя зависит только от предыдущего значения в этой точке (а не от любых соседних пикселей).
Вместо загрузки математических выражений или if
операторов для каждого из 12 миллионов пикселей на вашем изображении, вы просто используете текущее 8-битное значение каждого пикселя в качестве индекса в таблице поиска, чтобы найти новое значение дляэтот пиксель.Обычно это намного быстрее, чем останавливать ваш ЦП с помощью операторов if
, поскольку это просто операция индексации в таблице.Это также очень просто реализовать в оборудовании на высокой скорости.
Вы можете использовать его для порогового изображения, или для изменения контрастности в изображении, или для экономии места.В этой последней технике вы в основном создаете изображение с палитрой из 256 цветов, а затем вместо сохранения 3 байтов для каждого пикселя (т. Е. R, G и B), вы просто сохраняете 1 байт и используете этот байт для ".посмотрите " цвет - и, как по волшебству, ваше изображение составляет 1/3 размера.
Вот небольшой пример, я делаю LUT со всеми элементами ниже 64 черными и всеми элементами вышеэто в белый, а затем применить его к изображению в оттенках серого.Впоследствии я добавил красную рамку, чтобы вы могли видеть размер изображения на белом фоне переполнения стека:
#!/usr/local/bin/python3
import numpy as np
from PIL import Image
# Open the input image as numpy array, convert to greyscale
npImage=np.array(Image.open("grey.png").convert("L"))
# Make a LUT (Look-Up Table) to translate image values
LUT=np.zeros(256,dtype=np.uint8)
for idx in range(64,255):
# All pixels > 64 become white
LUT[idx]=255
# Apply LUT
npImage = LUT[npImage]
# Apply LUT and save resulting image
Image.fromarray(npImage).save('result.png')
Начальное изображение:
Изображение результата:
Вот еще один пример, когда я заставляю LUT работать в обратном направлении, поэтому оно инвертирует изображение.
#!/usr/local/bin/python3
import numpy as np
from PIL import Image
# Open the input image as numpy array, convert to greyscale
npImage=np.array(Image.open("grey.png").convert("L"))
# Make a LUT (Look-Up Table) to translate image values to their inverse/negative
# i.e. 0 input maps to 255 output
# 1 input maps to 254 output
LUT = np.arange(255,-1,-1,dtype=np.uint8)
# Apply LUT
npImage = LUT[npImage]
# Apply LUT and save resulting image
Image.fromarray(npImage).save('result.png')
Ключевые слова : Python, Numpy, изображение, обработка изображений, LUT, справочная таблица, поиск, отрицание,обратный, порог