我有一些原始图像去拜尔,然后应用颜色校正/转换。我使用OpenCV和C++,对于使用的图像传感器,线性矩阵系数是:
1.32 -0.46 0.14
-0.36 1.25 0.11
0.08 -1.96 1.88
我不确定如何将这些应用于图像。我不清楚我应该用它们做什么以及为什么。
谁能解释一下这些颜色再现或颜色矩阵的值是什么,以及如何使用它们来处理图像?
谢谢!
发布于 2020-09-10 13:10:06
你的问题不清楚,因为你似乎也不知道该怎么做。
“我应该怎么处理它们”
我想到的第一件事是,可以使用filter2D将图像与该矩阵进行卷积。根据文档filter2D
将图像与内核进行卷积。
该函数对图像应用任意线性滤镜。支持就地操作。
下面是示例代码片段hpw tp use it:
Mat output;
Mat kernelMatrix = (Mat_<double>(3, 3) << 1.32, -0.46, 0.14,
-0.36, 1.25, 0.11,
0.08, -1.96, 1.88);
filter2D(rawImage, output, -1, kernelMatrix);发布于 2020-09-11 00:11:47
在去白层之前,你有一个由MxN过滤的“灰度”值组成的数组B (-ayer)。它们被物理过滤,因为每个传感器位置顶部的滤色器会影响每个传感器测量到的光子数量。
在脱层之后,您有一个由MxNx3 BGR值组成的数组C (-olor),该数组是通过(本质上)对B数组进行重新索引获得的。然而,在(行,列)图像位置的3个值中的每一个代表3个物理测量。也就是说,需要将物理值映射到颜色空间。
您拥有的3x3“颜色校正”矩阵表示一种可能的映射--简单的线性映射。您需要依次将其应用于所有(行,列)像素位置的每个BGR三元组。例如(在python/numpy/cv2中):
import numpy as np
def colorCorrect(img, M):
"""Applies a color correction M to a BGR image img"""
rows, cols, depth = img.shape
assert depth == 3
assert M.shape == (3, 3)
img_corr = np.zeros((rows, cols, 3), dtype=img.dtype)
for r in range(rows):
for c in range(cols):
img_corr[r, c, :] = M.dot(img[r, c, :])
return img_corrhttps://stackoverflow.com/questions/63821950
复制相似问题