幂率分布

幂率分布

概率函数

假设变量x服从参数为 $\alpha$的幂率分布,其概率密度函数可以表示为

通式

图像

image-20240407112450949

灰度直方图

我们选用高对比度的图片high.png

image-20240407110728665

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt

# 读取图片
image = Image.open('high.png')

# 将图片转换为灰度图像
gray_image = image.convert('L')

# 计算像素值的分布
pixel_values = np.array(gray_image.histogram())

# 绘制直方图
plt.bar(range(256), pixel_values, color='gray')
plt.xlabel('Pixel Value')
plt.ylabel('Frequency')
plt.title('Image Histogram')

# 显示直方图
plt.show()

image-20240407110851156

随后我们将用幂率分布对其进行拟合

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 幂律分布的参数  
alpha = 3.0 # 幂律分布的指数
xmin = 10.0 # 最小值
xmax = 250.0 # 最大值

# 创建x值的数组
x = np.linspace(xmin, xmax, 1000)

# 计算幂律分布的概率密度函数值
def power_law_pdf(x, alpha, xmin):
return alpha * (xmin ** alpha) / x ** (alpha + 1)

y = 300000*power_law_pdf(x, alpha, xmin)+3000

# 绘制幂律分布曲线
plt.plot(x, y, label=f'Power Law Distribution (alpha={alpha})')

# 设置标题和坐标轴标签
plt.title('Power Law Distribution Curve')
plt.xlabel('Value')
plt.ylabel('Probability Density')

# 显示图例
plt.legend()

# 显示图形
plt.show()

image-20240407111013470

或者我们把直方图均匀化

1
2
3
4
5
6
7
8
import cv2
import matplotlib.pyplot as plt
image = cv2.imread(r'high.png', cv2.IMREAD_GRAYSCALE)
equ = cv2.equalizeHist(image)
plt.hist(equ.ravel(), 256)
plt.show()
cv2.imshow('result', equ)
cv2.waitKey()

image-20240407111210016

在对其进行拟合

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import cv2
import matplotlib.pyplot as plt
image = cv2.imread(r'high.png', cv2.IMREAD_GRAYSCALE)
equ = cv2.equalizeHist(image)
plt.hist(equ.ravel(), 256)

import numpy as np
import matplotlib.pyplot as plt


from PIL import Image


# 幂律分布的参数
alpha = 10.0 # 幂律分布的指数
xmin = 70.0 # 最小值
xmax = 250.0 # 最大值

# 创建x值的数组
x = np.linspace(xmin, xmax, 1000)

# 计算幂律分布的概率密度函数值
def power_law_pdf(x, alpha, xmin):
return alpha * (xmin ** alpha) / x ** (alpha + 1)

y = 500000*power_law_pdf(x, alpha, xmin)+3000

# 绘制幂律分布曲线
plt.plot(x, y, label=f'Power Law Distribution (alpha={alpha})')

# 设置标题和坐标轴标签
plt.title('Power Law Distribution Curve')
plt.xlabel('Value')
plt.ylabel('Probability Density')

# 显示图例
plt.legend()

# 显示图形
plt.show()

image-20240407112133007

-------------已经到底啦!-------------