专门有一灰度直方图(?)



所有跟贴·加跟贴·新语丝科技论坛

送交者: catfish 于 2005-6-30, 11:44:53:

回答: 请教一个关于图形处理的小问题 由 lll 于 2005-6-29, 21:38:40:

灰度直方图的数值就是像素点数,然后计算面积。
首先对原始图像的各像素点的灰度情况进行统计计算。对于24位BMP图像,图像阵列是从第54字节开始的,每像素按R、G、B的顺序占3个字节。

for (DWORD i=54; i
ns_r[m_cpBuffer[i]]++; //ns_r[k]为k灰度级像素数,m_cpBuffer[i]为当前的灰度值

i++;

ns_g[m_cpBuffer[i]]++;

//ns_g为G分量的统计计数

i++;

ns_b[m_cpBuffer[i]]++;

//ns_b为B分量的统计计数

}

for (i=0; i<256; i++)

//计算R、G、B三分量的直方图分布

{

ps_r[i]=ns_r[i]/((m_dwFileLen-54)/3.0f);

//ps_r[i]为R分量中i灰度级出现的概率

ps_g[i]=ns_g[i]/((m_dwFileLen-54)/3.0f);

//ps_b[i]为G分量中i灰度级出现的概率

ps_b[i]=ns_b[i]/((m_dwFileLen-54)/3.0f);

//ps_b[i]为B分量中i灰度级出现的概率

}

然后计算R、G、B三分量各灰度级的累计直方图分布,并对其进行取整以得出源和目标图像灰度之间的映射关系:

for (i=0; i<256; i++)

{

//计算累计直方图分布

temp_r[i]=temp_r[i-1]+ps_r[i];

temp_g[i]=temp_g[i-1]+ps_g[i];

temp_b[i]=temp_b[i-1]+ps_b[i];

//累计分布取整,ns_r[]、ns_g[]、ns_b[]保存有计算出来的灰度映射关系

ns_r[i]=(int)(255.0f*temp_r[i]+0.5f);

ns_g[i]=(int)(255.0f*temp_g[i]+0.5f);

ns_b[i]=(int)(255.0f*temp_b[i]+0.5f);

}





所有跟贴:


加跟贴

笔名: 密码(可选项): 注册笔名请按这里

标题:

内容(可选项):

URL(可选项):
URL标题(可选项):
图像(可选项):


所有跟贴·加跟贴·新语丝科技论坛