累计分布直方图(CDF)
时间: 2023-10-30 17:58:24 浏览: 138
CDF(Cumulative Distribution Function)是描述随机变量概率分布的函数。它给出了随机变量取值小于等于某个特定值的概率。累计分布直方图是用来可视化 CDF 的一种方法。
要绘制累计分布直方图,首先需要按照从小到大的顺序对数据进行排序。然后,对于每个数据点,计算出该数据点在整个数据集中的累计百分比。最后,将这些数据点与其对应的累计百分比绘制成直方图。
在绘制累计分布直方图时,x轴表示数据值,y轴表示累计百分比。每个数据点的高度表示在该数据值之前的累计百分比。
需要注意的是,累计分布直方图是一个递增的曲线,并且在最小值处为0,最大值处为1。它可以帮助我们理解数据集中各个数据值的分布情况和相对位置。
希望以上解答对您有所帮助!如有更多问题,请继续提问。
相关问题
python 直方图匹配
直方图匹配是一种常用的图像处理方法,用于将一幅图像的直方图变换到指定的目标直方图,从而达到图像增强、色彩校正等目的。
在 Python 中,可以使用 OpenCV 库中的 `cv2.equalizeHist()` 函数实现直方图均衡化,用于增强图像对比度。而直方图匹配则需要使用 OpenCV 中的 `cv2.calcHist()` 函数计算图像的直方图,并通过将源图像的直方图映射到目标直方图来实现匹配。
下面是一个简单的直方图匹配的 Python 代码示例:
```python
import cv2
import numpy as np
# 读取源图像和目标直方图
src = cv2.imread('source_image.jpg', cv2.IMREAD_GRAYSCALE)
dst_hist = cv2.imread('destination_histogram.jpg', cv2.IMREAD_GRAYSCALE)
# 计算源图像和目标直方图的直方图
src_hist = cv2.calcHist([src], [0], None, [256], [0, 256])
dst_hist = cv2.calcHist([dst_hist], [0], None, [256], [0, 256])
# 计算源图像和目标直方图的累计分布函数(CDF)
src_cdf = np.cumsum(src_hist)
src_cdf_normalized = src_cdf / src_cdf[-1]
dst_cdf = np.cumsum(dst_hist)
dst_cdf_normalized = dst_cdf / dst_cdf[-1]
# 计算源图像和目标直方图的映射关系
map_table = np.zeros((256, 1), dtype=np.uint8)
for i in range(256):
j = 0
while dst_cdf_normalized[j] < src_cdf_normalized[i] and j < 255:
j += 1
map_table[i] = j
# 对源图像进行直方图匹配
dst = cv2.LUT(src, map_table)
# 显示结果
cv2.imshow('Source image', src)
cv2.imshow('Destination histogram', dst_hist)
cv2.imshow('Matched image', dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上述代码中,我们首先读取了源图像和目标直方图,然后使用 `cv2.calcHist()` 函数计算它们的直方图。接着,我们分别计算了源图像和目标直方图的累计分布函数(CDF),并将它们归一化到 $[0, 1]$ 的范围。然后,我们根据源图像和目标直方图的 CDF 计算了它们之间的映射关系,并使用 `cv2.LUT()` 函数将源图像的像素值映射到目标直方图上。最后,我们将源图像、目标直方图和匹配后的图像都显示出来,观察效果。
直方图均衡增强图像效果
直方图均衡是一种常用的图像增强技术,它可以通过改变图像的像素值分布来增强图像的对比度和亮度。直方图均衡的基本思路是将图像的灰度值分布进行均匀化,使得原本分布不均匀的灰度值变得更加均匀,从而达到增强图像的目的。
直方图均衡的具体实现可以分为以下几个步骤:
1. 计算图像的灰度直方图。灰度直方图是图像中各灰度级的像素数目的统计分布。
2. 计算灰度直方图均衡化映射函数。该函数将原始图像中的灰度级映射到均衡化后的灰度级。
3. 对每个像素应用灰度直方图均衡化映射函数,得到均衡化后的图像。
下面是 Python 代码实现直方图均衡化:
```python
import cv2
import numpy as np
# 读取图像
img = cv2.imread('lena.jpg', 0)
# 计算灰度直方图
hist, bins = np.histogram(img.flatten(), 256, [0, 256])
# 计算累计分布函数
cdf = hist.cumsum()
cdf_normalized = cdf * hist.max() / cdf.max()
# 计算均衡化映射函数
cdf_m = np.ma.masked_equal(cdf, 0)
cdf_m = (cdf_m - cdf_m.min()) * 255 / (cdf_m.max() - cdf_m.min())
cdf = np.ma.filled(cdf_m, 0).astype('uint8')
# 应用均衡化映射函数
img_eq = cdf[img]
# 显示结果
cv2.imshow('Original', img)
cv2.imshow('Equalized', img_eq)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
上述代码中,使用 `cv2.imread()` 函数读取了一张灰度图像,然后通过 `np.histogram()` 函数计算了图像的灰度直方图。接着,使用 `cumsum()` 函数计算了灰度直方图的累计分布函数,并通过归一化将其映射到 [0, 255] 范围内。然后,计算了图像的均衡化映射函数,最后将该映射函数应用到原始图像上,得到均衡化后的图像。最后使用 `cv2.imshow()` 函数将原始图像和均衡化后的图像显示出来。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)