在统计学中,直方图(英语:Histogram)是一种对数据分布情况的图形表示,是一种二维统计图表,它的两个坐标分别是统计样本和该样本对应的某个属性的度量。
图像直方图(英语:Image Histogram)是用以表示数字图像中亮度分布的直方图,标绘了图像中每个亮度值的像素数。可以借助观察该直方图了解需要如何调整亮度分布。这种直方图中,横坐标的左侧为纯黑、较暗的区域,而右侧为较亮、纯白的区域。因此,一张较暗图片的图像直方图中的数据多集中于左侧和中间部分;而整体明亮、只有少量阴影的图像则相反。
以上选自wiki
应用一:直方图均衡化
作用直接看图领悟
实现:上opencv实现代码!
int main()
{
IplImage * image= cvLoadImage("test.jpg");
IplImage* eqlimage=cvCreateImage(cvGetSize(image),image->depth,3);
//分别均衡化每个信道
IplImage* redImage=cvCreateImage(cvGetSize(image),image->depth,1);
IplImage* greenImage=cvCreateImage(cvGetSize(image),image->depth,1);
IplImage* blueImage=cvCreateImage(cvGetSize(image),image->depth,1);
cvSplit(image,blueImage,greenImage,redImage,NULL);
cvEqualizeHist(redImage,redImage);
cvEqualizeHist(greenImage,greenImage);
cvEqualizeHist(blueImage,blueImage);
//均衡化后的图像
cvMerge(blueImage,greenImage,redImage,NULL,eqlimage);
cvNamedWindow("原图");
cvNamedWindow("均衡后");
cvShowImage("原图", image);
cvShowImage("均衡后", eqlimage);
waitKey(0);
cvReleaseImage(&image1);
cvReleaseImage(&image2);
return 0;
}
应用二:对比直方图
对比两图的直方图相似度
int main()
{
IplImage *image1 = cvLoadImage("_big_letter_A_positive_1°_.jpg");
IplImage *image2 = cvLoadImage("_big_letter_B_positive_1°_.jpg");
int hist_size = 256;
float range[] = { 0, 255 };
float* ranges[] = { range };
IplImage* image1_gray = cvCreateImage(cvGetSize(image1), 8, 1);
cvCvtColor(image1, image1_gray, CV_RGB2GRAY);
CvHistogram* gray_hist1 = cvCreateHist(1, &hist_size, CV_HIST_ARRAY, ranges, 1);
//1是维度
//是直方图尺寸,分为多少类
//V_HIST_ARRAY 意味着直方图数据表示为多维密集数组 CvMatND; //CV_HIST_TREE 意味着直方图数据表示为多维稀疏数组 CvSparseMat.
//ranges是代表
//1代表是否归一化
cvCalcHist(&image1_gray, gray_hist1);
IplImage* image2_gray = cvCreateImage(cvGetSize(image2), 8, 1);
cvCvtColor(image2, image2_gray, CV_RGB2GRAY);
CvHistogram* gray_hist2 = cvCreateHist(1, &hist_size, CV_HIST_ARRAY, ranges, 1);
cvCalcHist(&image2_gray, gray_hist2);
double result = cvCompareHist(gray_hist1, gray_hist2, CV_COMP_BHATTACHARYYA);//这里有几种不同计算方法,不同结果也不同
cout << result << endl;
system("pause");
return 0;
}
用CV_COMP_BHATTACHARYYA方法计算时,输出结果越小表示两幅图匹配度越高,0.0时两幅图精确匹配。
欢迎大家共同交流,谢谢!