Python在分形、多重分形与图像处理中的应用
立即解锁
发布时间: 2025-08-29 10:08:21 阅读量: 15 订阅数: 18 AIGC 


Python科学计算与AI实战
### Python在分形、多重分形与图像处理中的应用
#### 1. 多重分形康托集
多重分形康托集是一种重要的分形结构。要得到多重分形康托集,只需按图中所示为分形的左右线段分配权重(概率)。
- **q阶矩(或配分函数)**:$Z_q$ 定义为 $Z_q = \sum_{i=1}^{N} p_i^q (\ell)$,其中 $p_i$ 是权重(概率),它们的和为 1,$\ell$ 是长度尺度。
- **标度函数**:对于自相似多重分形集,标度函数 $\tau(q)$ 满足方程 $\sum_{i=1}^{N} p_i^q r_i^{\tau(q)} = 1$,其中 $r_i$ 是破碎比。广义维度 $D_q$ 和标度函数 $\tau(q)$ 的关系为 $\tau(q) = D_q(1 - q) = \frac{\ln Z_q(\ell)}{-\ln \ell}$。
- **f(α) 谱**:通过公式 $f(\alpha(q)) = q\alpha(q) + \tau(q)$ 和 $\alpha = -\frac{\partial \tau}{\partial q}$ 确定。
下面通过两个例子展示如何绘制多重分形的 f(α) 谱。
**例1:绘制康托集的 f(α) 谱**
已知 $p_1 = \frac{1}{9}$ 和 $p_2 = \frac{8}{9}$,使用以下 Python 代码绘制 f(α) 谱:
```python
from sympy import symbols, log, diff, plot
import matplotlib.pyplot as plt
from sympy.plotting import plot_parametric
plt.rcParams["font.size"] = "16"
p1 , p2 = 1 / 9 , 8 / 9
q , x = symbols("q x")
tau = log(p1**q + p2**q) / log(3)
alpha=-diff(tau , q)
f = alpha * q + tau
x = q
p1=plot_parametric(alpha , f ,
(q, -10, 10),xlabel=r'$\alpha$',
ylabel=r"$f(\alpha)$",show=False)
p2=plot(x, q, (x, 0, 0.7),line_color="r",show=False)
p1.append(p2[0])
p1.show()
```
**例2:绘制多重分形的 f(α) 谱**
已知 $p_1 = 0.1$,$p_2 = 0.15$,$p_3 = 0.2$ 和 $p_4 = 0.55$,使用以下 Python 代码绘制 f(α) 谱:
```python
from sympy import symbols, log, diff, plot
import matplotlib.pyplot as plt
from sympy.plotting import plot_parametric
plt.rcParams["font.size"] = "16"
p1 , p2 , p3 , p4 = 0.1 , 0.15 , 0.2 , 0.55
q , x = symbols("q x")
tau = log(p1**q + p2**q + p3**q + p4**q) / log(2)
alpha=-diff(tau , q)
f = alpha * q + tau
x = q
p1=plot_parametric(alpha , f ,
(q, -15, 10),xlabel=r'$\alpha$',
ylabel=r"$f(\alpha)$",show=False)
p2=plot(x, q, (x, 0, 2.2),line_color="r",show=False)
p1.append(p2[0])
p1.show()
```
多重分形在测量物体在表面上的密度、分散和聚类方面非常有用,具有广泛的应用,例如在材料科学中预测阻燃填料/聚合物复合材料,在石墨烯宏观电极制造中研究电化学沉积,识别表面粗糙度如何影响真菌孢子结合,以及量化微生物细胞在不同化学和地形表面上的分散模式。
#### 2. 曼德勃罗集
曼德勃罗集是复平面上的一个点集,对于函数 $f_c (z_n) = z_{n+1} = z_n^2 + c$,从 $z_0 = 0$ 开始迭代,若迭代结果保持有界,则复数 $c$ 属于曼德勃罗集。像素根据迭代结果越过某个边界的速度进行着色。
**例:用 Python 绘制曼德勃罗集**
以下是绘制曼德勃罗集的 Python 代码:
```python
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.cm as cm
xmin, xmax, ymin, ymax = -2.5, 1, -1.5, 1.5
xrange = xmax - xmin
yrange = ymax - ymin
def get_iter(c:complex, thresh:int =4, max_steps:int =25) -> int:
z, i = c, 1
while i<max_steps and (z*z.conjugate()).real<thresh:
z = z * z + c
i+=1
return i
def plotter(n, thresh, max_steps = 25):
mapper = lambda x, y: (4*(x-n//2)/n, 4*(y-n//2)/n)
img = np.full((n,n), 255)
x_lower = 0
x_upper = 5*n//8
y_lower = 2*n//10
y_upper = 8*n//10
for x in range(x_lower, x_upper):
for y in range(y_lower, y_upper):
it = get_iter(complex(*mapper(x,y)), thresh=thresh, \
max_steps=max_steps)
img[y][x] = 255 - it
return img[y_lower:y_upper, x_lower:x_upper]
n=1000
img = plotter(n, thresh=4, max_steps=50
```
0
0
复制全文
相关推荐










