gpt4 book ai didi

python - 在 Ubuntu 中从 RCCC Bayer 相机传感器读取图像流

转载 作者:太空宇宙 更新时间:2023-11-03 21:10:30 32 4
gpt4 key购买 nike

我正在使用 LI-AR0820 GMSL2 相机,它使用 On-Semi AR0820 传感器以 12 位 RCCC Bayer 格式捕捉图像。我想从摄像头读取实时图像流并将其转换为灰度图像(使用 this 去马赛克算法),然后将其输入对象检测算法。但是,由于 OpenCV 不支持 RCCC 格式,我无法使用 VideoCapture 类从相机获取图像数据。我正在寻找类似的东西来以类似数组的格式获取流图像数据,以便我可以进一步操作它。有什么想法吗?

我正在运行带有 OpenCV 3.2.0 和 Python 3.7.1 的 Ubuntu 18.04。

编辑。我正在使用代码 here .

#include <vector>
#include <iostream>
#include <stdio.h>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>

int main() {
// Each pixel is made up of 16 bits, with the high 4 bits always equal to 0
unsigned char bytes[2];

// Hold the data in a vector
std::vector<unsigned short int> data;

// Read the camera data
FILE *fp = fopen("test.raw","rb");
while(fread(bytes, 2, 1, fp) != 0) {
// The data comes in little-endian, so shift the second byte right and concatenate the first byte
data.push_back(bytes[0] | (bytes[1] << 8));
}

// Make a matrix 1280x720 with 16 bits of unsigned integers
cv::Mat imBayer = cv::Mat(720, 1280, CV_16U);

// Make a matrix to hold RGB data
cv::Mat imRGB;

// Copy the data in the vector into a nice matrix
memmove(imBayer.data, data.data(), data.size()*2);

// Convert the GR Bayer pattern into RGB, putting it into the RGB matrix!
cv::cvtColor(imBayer, imRGB, CV_BayerGR2RGB);

cv::namedWindow("Display window", cv::WINDOW_AUTOSIZE);
// *15 because the image is dark
cv::imshow("Display window", 15*imRGB);

cv::waitKey(0);

return 0;
}

代码有两个问题。首先,我必须使用 fswebcam 获取原始图像文件,然后使用上面的代码读取原始文件并显示图像。我希望能够访问/dev/video1 节点并直接从那里读取原始数据,而不必先保存然后单独读取。其次,OpenCV 不支持 RCCC Bayer 格式,所以我必须想出一种去马赛克的方法。

相机通过同轴电缆输出序列化数据,因此我使用带有 USB 3.0 连接的 Deser 板将相机连接到我的笔记本电脑。设置可见here .

最佳答案

如果您的相机支持 CAP_PROP_CONVERT_RGB 属性,您可能能够从 VideoCapture 获取原始 RCCC 数据。通过将此属性设置为 False,您可以禁用到 RGB 的转换。因此,您可以使用如下代码捕获原始帧(为简单起见,不进行错误检查):

cap = cv2.VideoCapture(0)
# disable converting images to RGB
cap.set(cv2.CAP_PROP_CONVERT_RGB, False)
while(True):
ret, frame = cap.read()
# other processing ...
cap.release()

我不知道这是否适用于您的相机。

如果您能以某种方式获得原始图像,则可以应用 ANALOG DEVICES 应用说明中描述的去马赛克方法。

filter

具有最佳过滤器

optimal filter

我按照 appnote 中的描述编写了以下 python 代码来测试 RCCC -> GRAY 转换。

import cv2
import numpy as np

rgb = cv2.cvtColor(cv2.imread('RGB.png'), cv2.COLOR_BGR2RGB)
c = cv2.cvtColor(rgb, cv2.COLOR_RGB2GRAY)
r = rgb[:, :, 0]

# no error checking. c shape must be a multiple of 2
rmask = np.tile([[1, 0], [0, 0]], [c.shape[0]//2, c.shape[1]//2])
cmask = np.tile([[0, 1], [1, 1]], [c.shape[0]//2, c.shape[1]//2])

# create RCCC image by replacing 1 pixel out of 2x2 pixel region
# in the monochrome image (c) with a red pixel
rccc = (rmask*r + cmask*c).astype(np.uint8)

# RCCC -> GRAY conversion
def rccc_demosaic(rccc, rmask, cmask, filt):
# RCCC -> GRAY
# use border type REFLECT_101 to give correct results for border pixels
filtered = cv2.filter2D(src=rccc, ddepth=-1, kernel=filt,
anchor=(-1, -1), borderType=cv2.BORDER_REFLECT_101)

demos = (rmask*filtered + cmask*rccc).astype(np.uint8)

return demos

# demo of the optimal filter
zeta = 0.5
kernel_4neighbor = np.array([[0, 0, 0, 0, 0],
[0, 0, 1, 0, 0],
[0, 1, 0, 1, 0],
[0, 0, 1, 0, 0],
[0, 0, 0, 0, 0]])/4.0
kernel_optimal = np.array([[0, 0, -1, 0, 0],
[0, 0, 2, 0, 0],
[-1, 2, 4, 2, -1],
[0, 0, 2, 0, 0],
[0, 0, -1, 0, 0]])/8.0
kernel_param = np.array([[0, 0, -1./4, 0, 0],
[0, 0, 0, 0, 0],
[-1./4, 0, 1., 0, -1./4],
[0, 0, 0, 0, 0],
[0, 0, -1./4, 0, 0]])

# apply optimal filter (Figure 7)
opt1 = rccc_demosaic(rccc, rmask, cmask, kernel_optimal)
# parametric filter with zeta = 0.5 (Figure 5)
opt2 = rccc_demosaic(rccc, rmask, cmask, kernel_4neighbor + zeta * kernel_param)

# PSNR
print(10 * np.log10(255**2/((c - opt1)**2).mean()))
print(10 * np.log10(255**2/((c - opt2)**2).mean()))

输入 RGB image :

rgb

模拟的 RCCC 图像:

rccc

来自去马赛克算法的灰度图像:

gray

还有一点:

如果您的相机供应商提供适用于 Linux 的 SDK,它可能有一个 API 来执行 RCCC -> GRAY 转换,或者至少获取原始图像。如果SDK中没有RCCC -> GRAY转换,C#示例代码应该有,所以我建议你看看他们的代码。

关于python - 在 Ubuntu 中从 RCCC Bayer 相机传感器读取图像流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53133996/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com