用摄像头从显微镜中采集图像,由于各种因素,常使采集到的图像左边亮些,右边暗些,请问如何写算法对其进行校正(已转换成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);
}
}
我用如下方法不好使:
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)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