【发布时间】:2016-04-11 17:12:18
【问题描述】:
我应该从 Java 程序读取的二进制文件中用 Java 构建图像。该文件来自拜耳过滤器传感器。该文件由每个像素的二进制值组成。每个像素由 10 位表示。需要编写去马赛克算法才能从二进制数据构建图像。有 1024*1280 像素。因此,1280*1024*10 = 13107200 位 = 1638400 字节是图像大小。有人用Java实现了这样的算法吗?如果有人可以提供帮助,我会很高兴。非常感谢。
【问题讨论】:
-
尝试将任务分解为更小的任务,一次解决一个。例如,首先解决如何读取 10 位数据(它们是原始样本,还是以任何方式压缩?)。您可能希望将其存储为 8 位 (
byte) 或 16 位 (short) 样本(向上/向下缩放值)。然后,尝试将图像读入灰度图像(强度不会是线性的,但至少您应该识别图像)。然后执行去马赛克以获得全彩色图像。人们可能已经解决了所有或部分这些任务,谷歌是你的朋友。 :-) -
发布源二进制文件,如果您还知道过滤器的配置,则需要尝试所有组合并选择正确的组合...如果您需要完整的 30 位色深,请使用 HDR或任何更高颜色深度的文件格式,否则会截断为每像素 24 位 RGB ...位图或其他任何内容。另见imatest.com/docs/raw
-
@haraldK :二进制数据来自相机传感器。是不是我必须首先将此二进制文件转换为原始拜耳图像(为了创建原始拜耳图像,是否需要使用 OpenCV Java 接口),然后应用去马赛克算法来获取每个像素的 RGB。而当我拥有它时,我可以简单地使用 BufferedImage 的 setRGB 函数来创建图像吗?
-
不知道为什么你需要 OpenCV 来做这个..?您也许可以使用
BufferedImage.setRGB(...),但请记住,这使用 32 位“打包”ARGB 布局,仅提供 8 位/组件。如果您的原始数据是 10 位,您将失去一些精度。也许对你来说不是问题?您可能还需要进行一些色彩空间转换(ColorConvertOp会这样做),以将您的数据置于 sRGB 色彩空间中。
标签: java image-processing javax.imageio demosaicing