打印
[STM32F4]

如何处理MT9M001C12STM输出的raw数据

[复制链接]
1190|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Larm1|  楼主 | 2016-11-16 13:51 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

      最近在使用F429开发板调试MT9M001C12STM黑白摄像头数据,现在可以完成寄存器的读写配置,数据也可以读出来,有如下问题:
1. 该摄像头输出的数据是RAW数据,但是该数据是灰度值还是RGB颜色值;
2. 如果我想把该数据显示在彩色的16位RGB565液晶屏上,应该怎么最数据转换。

    参照网上的方式按照RAW RGB数据转换为RGB565格式显示在屏上,但是数据明显不对,转化算法为:将相邻两行的相邻的RGB据处理如下:R=R,B=B,G=(G1+G2)/2,等号左边的RGB为即将合成到RGB565的数据,等号右边的RGB为采集到的数据可是不正确,显示为彩色的条纹;
     还有直接将采集到的每个像素值作为灰度,按照R=G=B=灰度的方式将RGB合成到RGB565中,显示出来也不正确,显示为彩色的条纹。
     还有就是讲采集到的数据按照某一个值分为两色,小于的为黑、大于的为白,显示出来就是黑白块,完全没有图像可言。
   
     头大...
     
     现在就是想验证一线采集到是的数据是否正确,但是不知道怎么解析数据。求各路大神帮忙。
     
望大神指点!!!
沙发
zhanzr21| | 2016-11-16 14:06 | 只看该作者

使用特权

评论回复
板凳
Larm1|  楼主 | 2016-11-17 10:10 | 只看该作者

谢谢你的回复!!!

      我想确认一下,它输出的数据是不是bayer 格式(GR/BG数据),如果是的耍需要怎么转换为再彩色RGB565屏上显示呢。
      在网上看了很多的资料,有使用临近值、双线性差值等方法,都是转换为彩色格式的,不知道黑白的是不是一样的转法。
      现在只有这个摄像头的一个datasheet,但是个人感觉这个资料对数据输出格式说的不是很清楚,美光的官网上我一点资料的都找不到,现在搞得头都大了...

       望赐教!!!

使用特权

评论回复
地板
zhanzr21| | 2016-11-17 14:42 | 只看该作者
已经说了是单色的< 只有灰度, 哪有RGB
每像素10bit输出, 但是你电路怎么接的
是RAW格式数据

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
Larm1 + 3 很给力!
5
Larm1|  楼主 | 2016-11-17 18:45 | 只看该作者
zhanzr21 发表于 2016-11-17 14:42
已经说了是单色的< 只有灰度, 哪有RGB
每像素10bit输出, 但是你电路怎么接的
是RAW格式数据 ...

      谢谢你的指点!!!

      我是菜鸟,所以好多东西不明白。
      每像素10bit输出,但是我的电路图只接了高八位D2~D9,低两位D0、D1悬空。
      如果输出的是灰度数据的话,怎见将输出的灰度数据转换图RGB565的格式显示呢。
      
      我按照公式:gray = 0.3*red + 0.59*green + 0.11*blue(red 、green 、blue为采集到的相邻两行的数据)计算出来,然后将gray都赋值给RGB565中的R\G\B,转换后显示的全是灰色的横杠,不是想要的图像。
      还有直接将采集出来的单个像素值 pixel 作为灰度值, 赋值给RGB565中的R\G\B,显示出来为彩色的横杠。
  
      请问是我的处理方式不对还是采集的数据不对?
      有没有对MT9M001数据转换的文档推荐。

     望赐教!!!

使用特权

评论回复
6
zhanzr21| | 2016-11-17 21:35 | 只看该作者
本帖最后由 zhanzr21 于 2016-11-17 21:49 编辑

你传感器输入数据只有8位, 那么只有256级灰度, 如果以黑色为底色, 如果你LCD是RGB565, 这是一种算法:
uint8_t byte = Pixel_Input_Byte_8bit;
Pixel_RGB_16bit = (((384*byte)/5)&0xF800) | ((((59*64*byte)/25)&0xFC00)>>5)| ((((11*64*byte)/25)&0xF800)>>11);


视乎LCD驱动, 上述值可能要取反.

还有取不同底色, 有不同算法

RGB到Grey只有一条路,

Grey到RGB有很多条路. 看你要什么效果, 反正原图是没有颜色信息的.

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
Larm1 + 3 很给力!
7
Larm1|  楼主 | 2016-11-19 09:25 | 只看该作者
zhanzr21 发表于 2016-11-17 21:35
你传感器输入数据只有8位, 那么只有256级灰度, 如果以黑色为底色, 如果你LCD是RGB565, 这是一种算法:

     真心感谢这么耐心的对我这颗菜鸟鸟!!!

    我按照你的的公式转换了数据显示,显示的结果是灰度图片,效果如下:
   

    可能是因为摄像头是黑白的原因。
    在请教一下:如果我只想显示成黑白的效果(只有黑色和白色),那种转换方法更好。
    另外还有个现象:当拍摄物和摄像头位置都固定是,在LCD上显示的效果感觉抖动比较大(就是上图中‘OMG’字母在LCD上的相对位置是变化的,估计有30个像素左右),怎么处理这种抖动?

   请大神赐教!!!

使用特权

评论回复
8
zhanzr21| | 2016-11-19 14:33 | 只看该作者
试试这个:
uint8_t byte = Pixel_Input_Byte_8bit;
Pixel_RGB_16bit = (byte*2048)&0xF800) | (byte*8)&0x07E0))| (byte>>3)&0x001F));


摆动的原因是你像素起始没有对齐
记住这传感器周围有一圈无效像素不能感光的, 只能用作黑色参考

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
Larm1 + 3 赞一个!
9
Larm1|  楼主 | 2016-11-21 00:27 | 只看该作者

      谢谢你的耐心指点!!!
     摄像头默认的black level数据应该是没有读出的。


      这个还是不行,比上次那个效果还差,我用了如下方式可以显示灰度图:
     

       但是感觉输出处理比较费时,图像抖动厉害,我只处理了大约90%数据,大约需要1s 时间。
      抖动问题还没解决,我是了关中断不行,而且我的数据是每4帧接受一帧。
      试了一下snapshot单次模式,感觉不对劲。
     
    按照我的理解,单次模式是在寄存器0x1E的bit8为1时,trigger信号有一个脉冲(给出的脉冲大约10ms宽)即可,其余的跟连续模式一样,可是结果是只能接受到1帧数据,而且数据的起点也没有对齐,本来应该在下面一片的数据,显示在上面一片去了。
   但我把trigger信号断开时,可以连续显示图像,可数据仍然没有对齐。
   确认寄存器的0x1E的bit8已经正确写入 。


   疑问:

   1. 请问我的单次模式的理解是否正确;
   2. 上面时序图中的 reset row1 - reset rowx是什么意思;
   3. 对于图像没对齐怎么排查。


谢谢!


使用特权

评论回复
10
zhanzr21| | 2016-11-21 17:16 | 只看该作者
单次捕捉有两种方式:
1.是在snap模式来个trigger高脉冲
2.写0x0B来个restart

reset row1 -> reset rowx就是说的触发后, 一行一行数据来构成一幅图

对齐这里, 首先你屏幕分辨率多少, 我看你图片,LCD分辨率跟camera分辨率肯定不同, 再就是你准备怎么处理这个图像, 缩放还是取局部窗口

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
Larm1 + 3 很给力!
11
zhuotuzi| | 2016-11-21 18:38 | 只看该作者
牛叉,这个是视频处理吗

使用特权

评论回复
12
Larm1|  楼主 | 2016-11-22 00:18 | 只看该作者
zhanzr21 发表于 2016-11-21 17:16
单次捕捉有两种方式:
1.是在snap模式来个trigger高脉冲
2.写0x0B来个restart

谢谢你的耐心指点!!!

1.  我使用的是在snap模式来个trigger高脉冲,可是感觉并不管用,端口触发信号同样有数据输出,按我的理解,没有触发信号,应该是没有数据输出;
2.  第2中方式没有是;
3.  我的LCD分辨率是800*480的,目前是将1280*1024的数据全部读出,但是只处理前面的1280*900的数据,目的是想验证数据是否正确及耗时的严重性。后来把处理数据改为800*800,还是仍然不对其。
4.  使用的是在snap模式来个trigger高脉冲来作为单次的话,数据的读取是否与连续的一样?

    目前基本可以确定数据读出是正确的,但是就是对齐这个问题把我头都搞大了,而且感觉数据处理很耗时。

    崩溃崩溃....

谢谢!

使用特权

评论回复
13
zhanzr21| | 2016-11-22 14:58 | 只看该作者
应该是你单次设置错了, 单次就像照相,咔嚓来一张,再咔嚓再来
连续就是录像似的, 一直有图象

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
Larm1 + 3 很给力!
14
Larm1|  楼主 | 2016-11-24 10:59 | 只看该作者
zhanzr21 发表于 2016-11-22 14:58
应该是你单次设置错了, 单次就像照相,咔嚓来一张,再咔嚓再来
连续就是录像似的, 一直有图象
...

谢谢你的耐心指点!!!

对,我是这么理解的,现在感觉是DMA数据接收有问题,当我设置为单次模式时,默认设置死接收到的数据应该是1280*1024自己,可是实际接收到的数据通常会大于该值,奇怪了...

DMA都检查过了,还没找到问题。
请问一下我的摄像头是用大约20cm长的数据线与主板连接的,时钟在25MHz,这样会不会与接线有关系?
我把时钟频率降低一半,但是出来的图像严重变形,还不如为降低时的效果好.
真是想不明白?
谢谢!!!


使用特权

评论回复
15
zhanzr21| | 2016-11-24 14:36 | 只看该作者
线长20cm有点长了, 如果有办法可以减短一些, 虽然你这个问题不是线长引起的
我认为还是像素对齐的问题
你板子有文件系统没有,或者串口网口之类的把像素发到PC上来分析分析

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
Larm1 + 3 很给力!
16
Larm1|  楼主 | 2016-11-24 15:31 | 只看该作者
目前没有文件系统,但是有串口,但是怎么分析呢,这么大的数据量...
是不是我的数据接收那一块出问题了?

使用特权

评论回复
17
Rollo| | 2016-11-27 13:01 | 只看该作者
传感器输入数据只有8位, 那么只有256级灰度

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
Larm1 + 3
18
Brand2| | 2016-11-27 21:37 | 只看该作者
取不同底色, 有不同算法

使用特权

评论回复
19
Ryze| | 2016-11-29 14:31 | 只看该作者
像素起始是否对齐了

使用特权

评论回复
20
Larm1|  楼主 | 2016-12-8 13:48 | 只看该作者
怎么结不了帖子,我的分已经给了,但是多给了一分...

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

53

主题

389

帖子

0

粉丝