Различия в цветовом пространстве 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 объясняет последнюю часть вашего вопроса.

Другие вопросы по тегам