我目前正在从事 HIL 仿真工作。我正在使用 CARLA 平台,存在一个 RGB 相机传感器,通过它我可以获得图像帧的 RGB 数据值(3D 数组(高度、宽度、3(RGB)))。我想通过网络层发送数据,.....
问题是我想将 RGB 格式转换为拜耳格式数组。我不太清楚拜耳原始过滤器的细节。我注意到有一个用于 Bayer 到 RGB 转换的 Opencv 标志,但反之则不然。我需要这种格式来重用图像解包或服务器端的库。
任何有关从 RGB 到拜耳格式转换的建议都会帮助我进一步推动这个项目。
参考(图片参考 - 我想从右到左进行)- https://theailearner.com/2018/10/28/bayer-filter/
这是一个naive代码,用于在您拥有的链接中生成第一个拜耳模式(GRBG?):
import numpy as np # of course
im = cv.imread(...)
(height, width) = im.shape[:2]
(B,G,R) = cv.split(im)
bayer = np.empty((height, width), np.uint8)
# strided slicing for this pattern:
# G R
# B G
bayer[0::2, 0::2] = G[0::2, 0::2] # top left
bayer[0::2, 1::2] = R[0::2, 1::2] # top right
bayer[1::2, 0::2] = B[1::2, 0::2] # bottom left
bayer[1::2, 1::2] = G[1::2, 1::2] # bottom right
这模拟了图像形成。您可能需要稍微低通 (
GaussianBlur
) 输入,否则您会看到有趣的混叠伪像。
感谢 Christoph Rackwithz 的贡献!然而,R 和 B 通道采样的代码似乎已被交换。这是修改后的代码:
之前:
bayer[0::2, 0::2]= G[0::2, 0::2]# top left
bayer[0::2, 1::2]= R[0::2, 1::2]# top right
bayer[1::2, 0::2]= B[1::2, 0::2]# bottom left
bayer[1::2, 1::2]= G[1::2, 1::2]# bottom right
之后:
bayer[0::2, 0::2]= G[0::2, 0::2] # top left
bayer[1::2, 0::2]= R[1::2, 0::2] # top right
bayer[0::2, 1::2]= B[0::2, 1::2] # bottom left
bayer[1::2, 1::2]= G[1::2, 1::2] # bottom right