Различия в цветовом пространстве Python OpenCV между LAB и Grayscale
Насколько я понимаю, при преобразовании изображения из BGR в LAB L-компонент должен был представлять компонент изображения в градациях серого. Однако при преобразовании из BGR в оттенки серого ожидаемые значения не совпадают. Например,
img1 = cv2.cvtColor(img, cv2.COLOR_BGR2LAB)
print img1[0][0]
img2 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
print img2[0][0]
Первый пиксель в моем изображении в LAB производит [168 133 162], а второй - 159. У меня сложилось впечатление, что они должны быть как-то эквивалентны (что подтверждается тем фактом, что константа COLOR_LAB2GRAY отсутствует).
Может кто-то уточнить и объяснить, почему это так? Мое понимание LAB неверно или я просто что-то неправильно использую в своем коде?
Если они действительно разные, то какой из них лучше использовать? Остальная часть моего приложения манипулирует изображениями в модели LAB, поэтому я испытываю желание использовать L-компонент в качестве базовой линии в градациях серого, но некоторые области выглядят светлее, чем должны быть… в отличие от сценария BGR2GRAY. Мысли?
1 ответ
Серый = 0,299R + 0,587G + 0,114В
Но преобразование из RGB в L канал LAB отличается. (которая является нелинейной функцией)
Точное преобразование можно найти здесь.
И нелинейность преобразования LAB объясняет последнюю часть вашего вопроса.