问题标签 [demosaicing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
841 浏览

arrays - 'numpy.ndarray' 对象不可调用?

运行此脚本:

给出以下错误:

在跑步的时候:

不给出任何错误。

我有点困惑。

0 投票
1 回答
533 浏览

python - 使用第二个矩阵将 3D 数组展平为 2D 数组以选择第三维中的元素

我有两个输入数组:维度 (i,j,k) 的 data_arr 和维度 (i,j) 的 index_arr。index_arr 中的条目是 [0, k-1] 范围内的整数。我想创建一个维度为 (i,j) 的输出数组 (output_arr),其中对于 output_arr 的每个元素,index_arr 告诉我可以选择哪些元素。

换句话说 output_arr[i,j] = data_arr[i,j, index_arr[i, j]]

显然,我可以用双 for 循环以冰冷的速度做到这一点。我更喜欢使用智能索引的更快捷的东西。目前我能设计的最好的方法是创建两个额外的大小为 (i,j) 的二维矩阵。

下面是一个简单的 MWE,它使用标准拜耳模式从 RGB 图像创建马赛克图像。我希望能够摆脱X_indY_ind

编辑:正如@Georgy 所指出的,这个问题类似于在搜索词中没有找到的这个问题,所以也许这篇文章将作为那个帖子的标志。另一篇文章中的答案是适用的,尽管扁平索引算法不同,因为我的维度排序不同。上面的答案等同ogrid于另一个问题中的版本。实际上ogrid可以通过替换对代码进行以下更改来使用:

您可以像这样实现选择选项(仅限于在 32 个选项之间进行选择):

在我的机器上,ogrid 解决方案在 12 毫秒内运行,而选择解决方案在 34 毫秒内运行

0 投票
2 回答
152 浏览

c++ - 一次读取 8 位小端文件并对其执行二进制操作

我想从小端格式的文件中一次读取 8 位,我认为我的 cpu 也是小端,所以我不必担心字节序,对吧?

我正在阅读的是数字,来自 RAW12 文件的 RGGB CFA 强度值。

这是我的代码 -

我见过其他人将它读取 8 位到一个 char 数组中,然后将其转换为一个数字,我该怎么做?由于我正在测试代码的机器是小端,我认为我不需要进行字节交换,但是如果其他人在大端机器上测试此代码怎么办,如果机器是小端或大端,我如何在运行时找到?

任何帮助我都会非常感激。

0 投票
0 回答
524 浏览

colorfilter - 去马赛克 RCCB 彩色滤光片阵列

我正在寻找可以让我去马赛克 RCCB CFA 的技术。

我在 SPIE 上看到了这篇论文“使用占据重叠颜色空间的滤色器阵列的彩色图像采集方法”,它提供了一种很好的技术来转换为 RCCB CFA 插入缺失的颜色值。结果就是作者所说的 RWB 图像。

然而,在论文中,他们说从 RWB 转移到 RGB 是一个简单的线性变换。其他消息来源指出,需要应用合适的颜色校正矩阵才能从该 RWB 图像移动到 RGB。但是,我不确定如何为任何具有 RCCB 布局的 RAW 图像实际计算该值。

是否可以使用 ICC 配置文件或作为 RAW 文件一部分的任何其他元数据来计算此颜色校正矩阵 (CCM)?或者这是图像的创建者必须知道的事情。

会喜欢一些想法。

0 投票
1 回答
1222 浏览

c++ - 用opencv去马赛克

我一直在试图弄清楚如何使用 opencv 去马赛克功能。我安装了 OpenCV 4.4.0 并编译了 CUDA 支持,到目前为止,我认为我需要做的是:

  1. 读入原始图像数据
  2. 将原始图像数据加载到 Mat 对象
  3. 将 Mat 数据上传到 GpuMat(主机到设备上传)
  4. 德马赛克
  5. 将 GpuMat 数据(设备到主机下载)下载到 Mat 对象
  6. 显示或写出结果

这是我拥有的代码片段。

我有来自每像素 12 位、RGGB、尺寸 6464 x 4860 的相机的原始帧。我不确定如何在宽度和高度方面为 OpenCV 指定这个,给它什么 CV_TYPE,我是否正在阅读和正确上传数据以进行去马赛克,为去马赛克提供什么颜色代码,以及如何下载结果以显示并保存到文件(最好是编写 png 或类似文件的高级例程)。

有谁知道我是否在正确的轨道上?

谢谢!詹姆士

0 投票
1 回答
385 浏览

ios - 如何在 Swift 中将数值数据数组转换为 RAW 图像数据?

我有一个 Int16 或 Int32 数值的数据数组,它们是来自具有 RGGB 像素布局 (CFA) 的 11MP 相机芯片的原始图像数据。数据由相机驱动程序导出为 FITS 数据,在我的例子中,它基本上是一个向量或长字节串或 16 位/像素数据。

我喜欢在 Swift 中将这些数据转换为原始图像格式,以便使用 iOS/Swift 中强大的去拜耳和去马赛克功能和算法。我不打算自己去马赛克,因为 iOS 已经为此提供了一个很棒的库(请参阅 WWDC2016 主题演讲关于使用 Core Image 进行原始处理)。

我需要让 iOS “相信”我的数据是实际的原始图像数据。

我尝试在 Swift 中使用 CreatePixelBufferWithBytes,然后从像素缓冲区使用 CIImage,但无济于事。CIImage.cgimage 不是 RGB 彩色图像。

有没有一种简单的方法可以从原始数值数据在 Swift 中创建原始或 DNG 图像?

这是我尝试使用 CVPixelBuffer 方法的方法,但我没有从中得到任何彩色图像:

imgRawData 是一个 [Int32] 或 [Float32] 数组,其元素个数为 width*height。

Xcode 的 Quickview 只显示黑白或灰度图像。CGImage 的 SwiftUI 视图也是如此...

0 投票
0 回答
302 浏览

swift - cvPixelBuffer 到 CGImage 的转换只给出黑白图像

我正在尝试将原始相机传感器数据转换为彩色图像。数据首先在 [UInt16] 数组中提供,随后转换为 cvPixelBuffer。

以下 Swift 5 代码“仅”创建一个黑白图像并忽略 RGGB 像素数据的滤色器数组。

我也试过 VTCreateCGImageFromCVPixelBuffer 无济于事。它返回零。

任何提示都非常感谢。

至于去马赛克,我希望 CoreImage 或 CoreGraphics 负责 RGGB 像素颜色插值。

0 投票
1 回答
112 浏览

image - 如何创建原始合成图像

我想对我的相机进行颜色校准。这就是我搜索去马赛克算法的原因,它可以提供最接近真实物体颜色的颜色。这就是我想要的原因:

  • 在 OpenCV 中创建具有已知颜色的合成图像
  • 镶嵌它
  • 将其传递给估计效率的算法

我使用 libraw 来解压原始图像,使用 OpenCV 来处理和存储它们。

所以,问题是,是否有一个库可以为我提供不同的去马赛克算法(我准备将我的合成图像从 Mat 转换为 C 样式数组),我可以在其中传递我的马赛克图像并接收去马赛克图像。我认为可以将我的图像从 tiff 转换为 dng 并使用 RawTherapee 进行去马赛克,但它看起来更复杂。

0 投票
1 回答
31 浏览

image-processing - 通过矢量密钥加密算法,误差与输入密钥和真实密钥之间的差异成正比

我想找到一个提供下述功能的加密算法。

给定一个密钥(一个向量Vkey)和一个数据(一个图像),使用这个密钥来加密图像;加密后的图像无法识别。

解密时,如果:

  1. 使用a key = Vkey 解密,解码后的图像与原图相同,没有错误。
  2. 使用 a key = Vkey_1,并且 diff(Vkey, Vkey_1) < threashold,解码后的图像与原始图像略有不同(例如,对于每个像素 1~5 的差异)。
  3. 使用与 Vkey (diff(Vkey, Vkey_1) > threashold) 非常不同的 key = Vkey_2,解码后的图像远不如原始图像清晰。

简而言之,diff(Vkey, Vkey_try) 与 diff(original, decrypted image) 成正比。

一些加密算法要求解密密钥应该与密钥完全相同,但在这里,我们需要“如果不完全匹配但只是略有不同,我们仍然可以解码但有一点神器”。

是否有任何类似的 en(de)crypt 算法可以提供所需的功能?

0 投票
0 回答
51 浏览

c# - 有没有办法使用 OpenGL 将 24 位拜耳图块传递给 GPU?

我正在用 C# 开发一个相机接口。

我有一个 HDR 相机,可以生成 24 位 HDR 原始图像。
原始图像缓冲区是一个字节数组 byte[],每个 Bayer tile 有 3 个字节。

我正在寻找一种使用 OpenTK(OpenGL 的 C# 包装器)将此数组缓冲区作为纹理传递给 GPU 的方法。然后将原始图像像素去马赛克为 24 位 RGB 像素,然后将其色调映射为 8 位 RGB 像素。

我看到了一些使用亮度像素格式的示例代码:

但我不确定片段着色器如何将这种像素格式的图像缓冲区采样为彩色像素。不确定这是否是 24 位像素的正确方法。

我还尝试了从字节数组图像缓冲区创建一个整数数组 (int[]) 的选项,方法是将每 3 个字节组合成 CPU 上的一个 int。但后来我遇到了类似的问题,将整数数组作为纹理传递给 GPU。不确定这里应该应用什么像素格式。

有人能指出我正确的方向吗?