图像直方图,是指对整个图像在灰度范围内的像素值(0-255)统计出现频率次数,据此生成的直方图,称为图像直方图或直方图。直方图反映了图像灰度的分布情况,是图像的统计学特征。也可以说,直方图是图像中像素强度分布的图形表达方式,它统计了每一个强度值所具有的像素个数。
直方图均衡化是以累计分布函数为核心,将原始图像灰度直方图从比较集中的某个灰度区间,非线性地映射为在全部灰度范围内的较均匀分布,从而增强对比度。
直方图均衡化的数学原理如下:
首先作原始图像灰度的概率直方图, 然后设输入像素灰度值为rk,累计分布函数为

其中ni为图像中灰度值为ri的像素频数,n为图像像素总数。设输出像素灰度值为sk,像素范围为smin-smax。期望输出灰度直方图是均匀分布,即

令C(sk)=C(rk),即得

所以最终直方图均衡化的点算子为

根据直方图均衡化的数学原理,用Python实现代码如下:
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
# 计算累计分布函数
def C(rk):
# 读取图片灰度直方图
# bins为直方图直方柱的取值向量,hist为bins各取值区间上的频数取值
hist, bins = np.histogram(rk, 256, [0, 256])
# 计算累计分布函数
return hist.cumsum()
# 计算灰度均衡化映射
def T(rk):
cdf = C(rk)
# 均衡化
cdf = (cdf - cdf.min()) * (255 - 0) / (cdf.max() - cdf.min()) + 0
#cdf = 255.0 * cdf / cdf[-1]
return cdf.astype('uint8')
# 读取图片
img = cv.imread('lenna.jpg', 0)
# 将二维数字图像矩阵转变为一维向量
rk = img.flatten()
# 原始图像灰度直方图
plt.hist(rk, 256, [0, 255], color = 'r')
# 直方图均衡化
imgDst = T(rk)[img]
plt.hist(imgDst.flatten(), 256, [0, 255], color = 'b')
plt.legend(['Before Equalization','Equalization'])
plt.show()
# 展示前后对比图像
plt.subplot(121), plt.imshow(img, cmap='gray'), plt.title('Original Gray')
plt.subplot(122), plt.imshow(imgDst, cmap='gray'), plt.title('Histogram Equalization')
plt.show()
均衡前后图像灰度直方图如下所示:

直方图均衡化前后的图像对比如下所示:

opencv-python中使用cv.equalizeHist函数即可实现直方图均衡化,其函数原型如下:
dst=cv.equalizeHist(src[, dst])
注意:输入需是灰度图像。
测试代码如下:
img = cv.imread('lenna.jpg', 0)
dst = cv.equalizeHist(img)
plt.subplot(121), plt.imshow(img, cmap='gray'), plt.title('Original Gray'), plt.axis('off')
plt.subplot(122), plt.imshow(dst, cmap='gray'), plt.title('Histogram Equalization'), plt.axis('off')
plt.show()
效果如下:

我有一个EC2实例正在运行。我有一个负载均衡器,它与EC2实例相关联。PingTarget:HTTP:3001/healthCheckTimeout:5secondsInterval:24secondsUnhealthythreshold:2Healthythreshold:10现在该实例显示为OutofService。我什至尝试更改监听端口等等。一切正常,直到重新启动我的EC2实例。任何帮助将不胜感激。仅供引用:我有一个在端口3001上运行的Rails应用程序,我有一个用于HTTP:80(loadbalancer)到HTTP:3001的监听器。我还在终端中通过ssh检查了正在运行的应
Nginx的6种负载均衡策略【轮询/加权轮询weight/ip_hash/least_conn/urlhash/fair】总结:nginx负载均衡策略1、轮询策略轮询策略其实是一个特殊的加权策略,不同的是,服务器组中的各个服务器的权重都是1upstreambackend{server192.168.136.136weight=1;server192.168.136.136:81weight=1;server192.168.136.136:82weight=1;server192.168.136.136:83weight=1;}server{listen80;server_namelocalho
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭9年前。Improvethisquestion如何创建整数数组的直方图?例如:data=[0,1,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,5,5,6,6,6,7,7,7,7,7,8,9,9,10]我想根据0、1、2等条目的数量创建直方图。在Ruby中有没有简单的方法来做到这一点?输出应该是两个数组。第一个数组应包含组(bin),第二个数组应包含出现次数(频率)。对于上面给出的data,我希望得到以下输出:bins#=>[0
我有大约300万张图像,需要为每个图像计算直方图。现在,我正在使用Python,但是花了很多时间。有什么方法可以分批处理图像?我有NVIDIA1080TIGPU卡,所以也许如果有一种方法可以在GPU上进行处理?我找不到任何代码或库来并行处理图像。感谢任何帮助提高速度的帮助看答案Python是您可以使用的最慢的生产就绪语言之一。由于您没有发布任何代码,因此我只能提供一般建议。它们按照以下方式按实用顺序列出:使用python的编译版本,例如pypy或cpython将现有软件与所需功能一起使用。在线找到免费软件没有错。使用更高效的(甚至有损失)算法来跳过计算使用更快的语言,例如Rust,C++,C#
提供源代码及说明文档伸手党走远点儿。上来就口吐莲花的请自重,注意自己的素质和境界。恒模盲均衡算法(CMA) 在各种盲均衡算法中,恒模算法(CMA)是一种重要的盲信道均衡方法,广泛地应用在了数字通信系统中,这种算法隐含地利用了接收信号的高阶统计量。结构框图可由下图所示。误差函数可定义为:其中R2是一个依赖于信源序列高阶统计量的一个实常数,可定义如下式,p由信源序列决定:(目前见到的QAM信号,P=2)抽头系数更新可由下式表示: 系统均衡输出可表示为:修正MCMA算法MCMA针对CMA的代价函数进行改进,将其分为实部和虚部两部分,通过对实部和虚部同时进行信道均衡实现对载波相位恢复。MCMA的
我们使用Chart.js我们代码库中的库,我需要创建一个直方图,这不是他们的默认图表类型之一。因此,我试图覆盖条形图上的x轴刻度线,使它们出现在每个条形图的左右Angular,而不是直接在下方。在下面的示例中,我通过在labels中添加一个额外的项目来获得我想要的x轴。数组并在options中显示第二个x轴.但是,由于现在有一个额外的标签,条形图占据了宽度的4/5,为不存在的数据点留出了空间。有什么方法可以指定忽略丢失的数据点吗?还是抵消酒吧?还是我找错了树?documentation有点难以解析,所以我不确定是否遗漏了一些简单的东西。varctx=document.getElemen
我不知道如何在数据数组中同时存在正值和负值的情况下正确创建直方图。我在这里使用了直方图示例http://bl.ocks.org/mbostock/3048450作为基础,虽然x轴值和刻度是正确的,但条形图是午餐。数据varvalues=[-15,-20,-22,-18,2,6,-26,-18,-15,-20,-22,-18,2,6,-26,-18];X比例varx0=Math.max(-d3.min(values),d3.max(values));varx=d3.scale.linear().domain([-x0,x0]).range([0,width]).nice();在这里查看j
我一直在寻找使用Web音频API创建音频均衡器的方法:http://webaudio.github.io/web-audio-api/我发现了很多关于创建可视化工具的话题,但这当然不是我想要做的。我只是希望能够使用频率slider改变声音。我发现biquadFilter应该可以完成这项工作,但我得不到好的结果。当我改变任何频率值时,声音都会持续改变,但它只会降低声音的质量,而它应该改变频率。我首先加载一个声音:Audio.prototype.init=function(callback){var$this=this;this.gainScale=d3.scale.linear().do
我有这个收入数据集:IncomeNumberofpeople02459818.81504443012606349.91235197011502990.7277149109.1355768130324246150.3353239170.2396008190396725210398640230.1401932250416079270412727289.8385192309.7343178329.7293707349.6239982369.7201557389.3165132442.3442075543.4196526679.9146784883.948600155544644(如您所见,收
我用d3.js创建了一些直方图.我设法更改了rect的填充颜色取决于brush的位置.但我想更改rect中的颜色.例如,如果brushstart在rect的中间我想要我的rect有两种颜色。目前这就是我所拥有的:这就是我想要的:我见过一些例子,比如Here.我是d3的新手,我尝试理解代码。我看到他们使用clip-path这肯定会在没有画笔时隐藏背景栏,并在有画笔时显示背景栏,具体取决于画笔的范围。这是一个JSBin更新我已经详细阅读了link中提供的代码.我发现他们不创建制作图表的元素但是barPath喜欢跟随:functionbarPath(groups){varpath=[],i=