找回密码
 注册
搜索
查看: 1195|回复: 4

[讨论] MT9J001图片偏绿

[复制链接]
发表于 2010-2-8 15:05:21 | 显示全部楼层 |阅读模式
  各位大虾好,

  我用MT9J001抓下来的图片看起来偏绿(见附件)

  有试过通过R,G,Bgain来调整,可以改善,但是不能完全调到没有绿色,同时这样也引如另一个问题,R,G,B的值不一样了,我很难给用户提供一个gain调整的功能,比如我在redgain=100,bluegain=100时,为了改善偏绿的问题,调整greengain=80,但是当redgain=bluegain=200的时候,greengain又是不一样的值,可能是190这样子。。每个增益点对应的rgbgain都不样,gain调整功能就难做了,

  也想过是不是bayer转换代码有问题,可是看起来好象没问题啊

  这里假设:MT9J001的默认输出是GRBG的顺序

  大虾帮我看下。。

  /WX

  image:

  


unsigned char * FormatConverter::BayerGRBG_To_RGB888_Bilinear(unsigned char *src)
{
        quint8 *pSrcRow = src;
        quint8 *pDstRow = m_buffer;
        quint8 *pSrcRowNext = 0;
        quint8 *pSrcRowPrev = 0;
        long nSrcBytesPerRow = 1 * m_width;
        long nDstBytesPerRow  = 3 * m_width;
        long nSrcWidth = m_width;
        long nSrcHeight = m_height;

        for (long nRow=0; nRow < nSrcHeight; nRow++) {
                pSrcRowNext = pSrcRow + nSrcBytesPerRow;
                if (nRow == 0) pSrcRowPrev = pSrcRowNext;
                else pSrcRowPrev = pSrcRow - nSrcBytesPerRow;

                if (nRow == nSrcHeight-1) pSrcRowNext = pSrcRowPrev;

                for (long nCol = 0, k = 0; nCol < nSrcWidth; nCol++,k += 3) {
                        long nColNext = nCol + 1;
                        long nColPrev = nCol - 1;
                        if (nCol == 0) nColPrev = nColNext;
                        if (nCol == nSrcWidth-1) nColNext = nColPrev;

                        if ((nRow % 2) == 0) {        // even row
                                if ((nCol %2) == 0) {  // even column, Raw Green
                                        pDstRow[k] = ((long)pSrcRow[nColNext] + pSrcRow[nColPrev])/2;        // Red
                                        pDstRow[k+1] = pSrcRow[nCol]; // green
                                        pDstRow[k+2] = ((long)pSrcRowNext[nCol] + pSrcRowPrev[nCol])/2;        // blue
                                } else {  // // Raw Red
                                        pDstRow[k] = pSrcRow[nCol];        // Red
                                        pDstRow[k+1] = ((long)pSrcRow[nColPrev] + pSrcRow[nColNext] + pSrcRowNext[nCol] + pSrcRowPrev[nCol])/4;        // Green
                                        pDstRow[k+2] = ((long)pSrcRowNext[nColNext] + pSrcRowNext[nColPrev] + pSrcRowPrev[nColNext] + pSrcRowPrev[nColPrev]) / 4 ; // blue
                                }
                        } else { // odd row
                                if ((nCol % 2) == 0) { // odd column, Raw Blue
                                        pDstRow[k] = ((long)pSrcRowNext[nColNext] + pSrcRowNext[nColPrev] + pSrcRowPrev[nColNext] + pSrcRowPrev[nColPrev]) / 4 ; // Red
                                        pDstRow[k+1] = ((long)pSrcRow[nColPrev] + pSrcRow[nColNext] + pSrcRowNext[nCol] + pSrcRowPrev[nCol])/4;        // Green
                                        pDstRow[k+2] = pSrcRow[nCol];        // blue
                                } else {  // Raw Green
                                        pDstRow[k] = ((long)pSrcRowNext[nCol] + pSrcRowPrev[nCol])/2;        // Red
                                        pDstRow[k+1] = pSrcRow[nCol]; // Green
                                        pDstRow[k+2] = ((long)pSrcRow[nColNext] + pSrcRow[nColPrev])/2;        // blue
                                }
                        }
                }

                pSrcRow += nSrcBytesPerRow;
                pDstRow += nDstBytesPerRow;
        }
        return m_buffer;
}
发表于 2010-2-11 12:31:00 | 显示全部楼层
呵呵 楼主 我qq106056141  也在做
点评回复

使用道具 举报

发表于 2010-2-11 12:58:34 | 显示全部楼层
你可以实验一下BARYE排列顺序和曝光的修改
可以实现正常显示的
点评回复

使用道具 举报

发表于 2010-5-20 15:27:42 | 显示全部楼层
路过看看……
点评回复

使用道具 举报

发表于 2010-5-24 00:16:00 | 显示全部楼层
1. 请确定你的Bayer Pattern格式是否正确的,可以用拍白纸,查看四通道色值;
2. 请知悉,一套增益只适用于单一种色温光源,并且100%适用,并不会因为你曝光量的改变而变得不适用.
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-7-8 01:31 , Processed in 0.049542 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表