前言直方图,又称质量分布图,是一种统计报告图。“巴巴拉”掉书袋之类的名词解释就不在这里费话了,直方图在程序上应该最直接的应该是图片处理。下面介绍下直方图在图片上的应用。1. 图片亮度直方图绘制 RGBA, 三原色的颜色表示法。R:red(红色)、G:green(绿色)、B:blue(蓝色)、A:alpha(透明度),最大值为255,最小值为0。例如:rbga(0,0,0,1):黑色,透明度为1;rbga(255,0,0,1):红色,透明度为1。我们可以利用程序提供的API轻松获取图片的每个像素点的RGBA的值(canvas getImageData() 方法),获取RGBA值后,我们又如何得到图片的亮度数据呢?亮度 = 0.299R + 0.587G + 0.114*B 得到图片的亮度数据后,我们开始绘制图片的直方图:X轴:由上公式可知,亮度最大值为255,最小值为0,定X轴最大值为255,最小值为0,间隔为1。Y轴:统计每个亮度点出现的次数。现在,图片亮度的直方图绘制完成。2. 直方图均衡化绘制完直方图后,通常会发现,直方图的亮度分布并不会一条平整的线,而直方图均衡化,最直观的作用,就是均匀分布,将这条线尽量平整。优点:实现对比度的增强。缺点:变换后图像的灰度级减少,某些细节消失;某些图像,如直方图有高峰,经处理后对比度不自然的过分增强。实现过程:1. 亮度系数 = 当前亮度及小于当前亮度的总个数 / 亮度总个数2. 均衡化后的亮度 = 亮度系数 * 当前亮度当前亮度及小于当前亮度的总个数: 小于或等于X轴某点的Y值的总和亮度总个数: Y值的总和通过上面两步,修改每个点的亮度值,我们就可以得到直方图均衡化后的曲线图,进而改变图片。3. 直方图拉伸亮度直方图中有时亮度点会集中在某段区间,直方图拉伸会将亮度均拉伸到我们想要的区域,是一种线性拉伸。实现过程:1. 确定亮度直方图区间,得最小值min,最大值max。2. 确定拉伸的区间(0-255),一般取255,定为section。3. 拉伸后的亮度 = section * ((当前亮度 - min) / (max - min))以上可以得到每个点的修正过的亮度值。结尾上面只是干巴巴的文字,大家有兴趣可以看到我在github上的demo示例。直方图
直方图
March 4, 2019 · 1 min · jiezi