Что такое цветовая матрица в объекте RawPy?

Я читаю изображение DNG размером 3120 x 4208 от RawPy .

dng = rawpy.imread("TestImages/IMG_20200108_161323.dng")

При отладке я увидел, что у dng есть поле с именем color_matrix - массив с размером 3x4, он выглядит так:

[[ 0.24399559  0.57969594  0.1763085   0.        ]
 [-0.00469256  0.96858126  0.03611127  0.        ]
 [-0.00366105 -0.06751718  1.0711782   0.        ]]

, Согласно документу RawPy :

Цветовая матрица, считанная из файла для одних камер, рассчитанная для других. Тип возврата: ndarray формы (3,4)

После поиска я до сих пор не понимаю это поле. Не могли бы вы объяснить это для меня, пожалуйста? Спасибо за чтение.

Всего 1 ответ


Цветовая матрица такая:

A B C D
E F G H
I J K L

обычно означает, что вы вычисляете новое значение Red (Rn), новое значение Green (Gn) и новое значение Blue (Bn) из старого Red (Ro), старого Green (Go) и старого Blue (Bo) следующим образом:

Rn = A*Ro + B*Go + C*Bo + D
Gn = E*Ro + F*Go + G*Bo + H
Bn = I*Ro + J*Go + K*Bo + L

D , H и L - просто постоянные «смещения» .

Давайте сделаем пример с этим изображением:

введите описание изображения здесь

Итак, если вы хотите поменять местами красный и синий каналы и превратить зеленый канал в твердую 64, вы можете сделать это:

#!/usr/bin/env python3

from PIL import Image

# Open image
im = Image.open('start.jpg')

# Define color matrix to swap the red and blue channels and set green to absolute 64
# This says:
# New red   = 0*old red + 0*old green + 1*old blue + 0offset
# New green = 0*old red + 0*old green + 0*old blue + 64offset
# New blue  = 1*old red + 0*old green + 0*old blue + 0offset
Matrix = ( 0, 0, 1, 0,
           0, 0, 0, 64,
           1, 0, 0, 0)

# Apply matrix and save
result = im.convert("RGB", Matrix).save('result.png')

введите описание изображения здесь


Теперь перейдем к вашей конкретной матрице ... Значения F и K в вашей матрице почти равны 1 поэтому ваша матрица вносит минимальные изменения в зеленый и синий каналы. Тем не менее, он довольно интенсивно выводит новый красный канал из существующего зеленого канала, потому что B=0.57969594 и другие записи в этой первой строке низкие.

Ключевые слова : Python, обработка изображений, Color-matrix, color matrix, swap channel.