Таблица прямого просмотра (LUT) и обратного LUT, что это?а почему это используется? - PullRequest
0 голосов
/ 05 марта 2019

Я смотрю на некоторые строительные коды вида (экрана) для рисования графических интерфейсов, например, для преобразования искаженного вида объектива в плоский вид. В этом я натолкнулся на термины «вперед» и «назад» и не понимаю, что это такое и почему оно используется? Может кто-нибудь объяснить мне или дать несколько указаний, где я могу узнать о них?

1 Ответ

0 голосов
/ 05 марта 2019

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')

Начальное изображение:

enter image description here

Изображение результата:

enter image description here


Вот еще один пример, когда я заставляю 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')

enter image description here

Ключевые слова : Python, Numpy, изображение, обработка изображений, LUT, справочная таблица, поиск, отрицание,обратный, порог

...