直方图的基础:
一、定义
以空间位置(x,y)为自变量的二维函数f(x,y)
每张图片都是不同灰度级形成的图像,直方图则统计了每一个灰度级所出现的次数。
 表示灰度级函数。其中rk为灰度级,nk为灰度级像素个数。
那么灰度级出现的概率就是 像素的个数/像素的总个数=该灰度级的概率
浅显的直方图表示 假设: 图像的灰度值为
那么它的灰度直方图就如下表示  当灰度值存在数量较多时,将会有较明显的波动状态,这种在实际应用中存在很大意义。
二、特征
一幅图像具有特定的唯一的直方图。
一个直方图可对应多幅图像。
三、形成灰度直方图实验
1、先下载Visual Studio 2019,不需要安装其他配件。
2、安装Visual Studio社区版。
3、导入项目后出现提示,第一次使用会有需要安装c++的一个感叹号提示,直接点击安装即可。
4、再次运行项目。 项目导入后,运行时显示如下错误时:  在项目中进行重定目标解决方案 
重定目标解决方案后,再次运行: 
5、从文件中选择一张图像,具有不同灰度级分布构成的图像。   关键计算代码:
void CMFCApplication1View::histCompute(BYTE*image, int width, int height)
{
int n;
for (n = 0; n < 256; n++) {
hist[n] = 0;
}
int i, j;
BYTE gray;
for (i = 0; i < height; i++) {
for (j = 0; j < width; j++) {
gray = image[i * width + j];
hist[gray]++;
}
}
}
|