用摄像头从显微镜中采集图像,由于各种因素,常使采集到的图像左边亮些,右边暗些,请问如何写算法对其进行校正(已转换成256色灰度图)
 
我用如下方法不好使:
for(j=0;j<m_lHeight;j++)
{
for(i=0;i<m_lWidth;i++)
{
lpSrc = (unsigned char*)m_lpDIBBits + m_lLineBytes * j + i;
*lpSrc=(unsigned char )(-0.4*(*lpSrc)+*lpSrc+60);

}
}

解决方案 »

  1.   

    我对算法改进如下,比原来好用多了。欢迎大家讨论:
    //(1)1111111111111111111111111111111111111111111111111111111111111111111111111111111111
    HDIB CHuiDuMeasure::EmendationShadow()
    {
    int i,j;
    unsigned char *lpSrc;
    unsigned int HuiDu[256];
    for(i=0;i<=255;i++)
    HuiDu[i]=1;
    for(j=0;j<m_lHeight;j++)
    {
    for(i=0;i<m_lWidth;i++)
    {
    lpSrc = (unsigned char*)m_lpDIBBits + m_lLineBytes * j + i;
    HuiDu[*lpSrc]++;
    }
    }
    int max=0,tem=0;
    for(i=1;i<=255;i++)
    {
    if(HuiDu[1]<HuiDu[i])
    {
    max=i;
    HuiDu[1]=HuiDu[i];
    }
    }
    for(j=0;j<m_lHeight;j++)
    {
    for(i=0;i<m_lWidth;i++)
    {
    lpSrc = (unsigned char*)m_lpDIBBits + m_lLineBytes * j + i;
    if(*lpSrc>max-50&&*lpSrc<max+50)//50为背景灰度的偏移量根据图像要作调整
    *lpSrc=(unsigned char )(*lpSrc+50*log10(255/(*lpSrc)));//50为灰度调整强度,根据图像要作改变

    }
    }
    // AdjustDIBContrast(m_hDIB,40);
    return m_hDIB;
    }
    //(1)11111111111111111111111111111111111111111111111111111111111111111111111111111111111