用python画cdf图和直方图

用python画cdf图和直方图

# -*- coding: utf-8 -*-
"""
Created on Fri Dec 20 10:13:27 2019
@author: Ding
"""
import numpy as np
import statsmodels.api as sm # recommended import according to the docs
import matplotlib.pyplot as plt
data=[14.27,14.80,12.28,17.09,15.10,12.92,15.56,15.38,
      15.15,13.98,14.90,15.91,14.52,15.63,13.83,13.66,
      13.98,14.47,14.65,14.73,15.18,14.49,14.56,15.03,
      15.40,14.68,13.33,14.41,14.19,15.21,14.75,14.41,
      14.04,13.68,15.31,14.32,13.64,14.77,14.30,14.62,
      14.10,15.47,13.73,13.65,15.02,14.01,14.92,15.47,
      13.75,14.87,15.28,14.43,13.96,14.57,15.49,15.13,
      14.23,14.44,14.57]
#=============绘制cdf图===============
ecdf = sm.distributions.ECDF(data)
#等差数列,用于绘制X轴数据
x = np.linspace(min(data), max(data))
# x轴数据上值对应的累计密度概率
y = ecdf(x)
#绘制阶梯图
plt.step(x, y)
plt.show()
#===============绘制条形图=============
fig,ax0 = plt.subplots(nrows=1,figsize=(6,6))
#第二个参数是柱子宽一些还是窄一些,越大越窄越密
ax0.hist(data,10,density=1,histtype='bar',facecolor='yellowgreen',alpha=0.75)

cdf图
直方图

  • 10
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 下面是使用 Python 实现灰度直方图均衡化的代码: ```python import cv2 import numpy as np # 读入像 img = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE) # 计算像的直方图 hist = cv2.calcHist([img], [0], None, [256], [0, 256]) # 计算累计分布函数 cdf = hist.cumsum() cdf_normalized = cdf * hist.max() / cdf.max() # 用累计分布函数计算每个灰度值的新值 lut = np.zeros(256, dtype=img.dtype) for i in range(256): lut[i] = np.uint8(cdf_normalized[i] * 255 / cdf_normalized.max()) # 将每个灰度值替换为新值 result = cv2.LUT(img, lut) # 保存结果像 cv2.imwrite('result.jpg', result) ``` 这段代码先使用 OpenCV 读入灰度像,然后计算直方图并计算累计分布函数,最后使用累计分布函数计算新的灰度值并将灰度值替换为新值,最后保存结果像。 ### 回答2: 直方图均衡化是一种像处理方法,通过增加像的对比度来改善像的视觉效果。在Python中,我们可以使用OpenCV库来实现灰度直方图均衡化。 首先,我们需要安装OpenCV库。在命令行中运行以下命令: pip install opencv-python 接下来,我们可以使用以下代码实现灰度直方图均衡化: ```python import cv2 def histogram_equalization(image): gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 将彩色像转换为灰度像 equalized_image = cv2.equalizeHist(gray_image) # 对灰度像进行直方图均衡化 return equalized_image if __name__ == "__main__": image = cv2.imread("input.jpg") # 读取像 equalized_image = histogram_equalization(image) # 对像进行直方图均衡化 cv2.imshow("Original Image", image) # 显示原始像 cv2.imshow("Equalized Image", equalized_image) # 显示直方图均衡化后的像 cv2.waitKey(0) cv2.destroyAllWindows() ``` 在代码中,我们首先使用cv2.cvtColor()函数将彩色像转换为灰度像。然后,我们使用cv2.equalizeHist()函数对灰度像进行直方图均衡化。最后,使用cv2.imshow()函数显示原始像和直方图均衡化后的像。 需要注意的是,上述代码中的"input.jpg"是输入像的文件名,请根据实际情况进行修改。此外,为了使像窗口显示得更长时间,我们使用cv2.waitKey(0)在按下任意键之前保持窗口打开,最后使用cv2.destroyAllWindows()关闭像窗口。 使用以上代码,您可以实现灰度直方图均衡化,并查看结果像的改善效果。 ### 回答3: 直方图均衡化是一种用于增强像对比度的方法,在灰度像中特别有效。下面是用Python实现灰度直方图均衡化的简要过程: 1. 导入所需的Python库:首先,使用import语句导入所需的Python库,包括numpy、cv2和matplotlib。 2. 读取灰度像:使用cv2的imread函数读取灰度像。确保像已转换为灰度格式,以便适应直方图均衡化的处理过程。 3. 计算灰度直方图:使用numpy的histogram函数来计算像的灰度直方图。此函数会返回一个元组,其中第一个元素是灰度级别的数组,第二个元素是对应每个灰度级别的像素数量。 4. 计算累积分布函数:对灰度直方图的数量进行累加运算,计算得到累积分布函数。这可以通过numpy的cumsum函数来实现。 5. 计算映射值:根据累积分布函数的计算结果,计算每个灰度级别的映射值。这可以通过将累积分布函数的最小值归一化到0,最大值归一化到255,并使用numpy的round函数将结果四舍五入到最接近的整数来实现。 6. 对像进行直方图均衡化:使用opencv的LUT函数将计算出的映射值应用于输入像,从而得到均衡化的像。 7. 显示像和直方图:使用matplotlib的imshow和plot函数分别显示均衡化的像和原始像的直方图。 这是一个简单的实现流程,可以根据实际需求进行适当的调整和优化。使用Python编写的完整代码可以在网上找到,并且也可以根据自己的理解和需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值