区域生长法python
时间: 2023-08-09 07:11:12 浏览: 177
区域生长法是一种图像分割算法,可以根据像素灰度间的连续性来定义相似性准则,并根据一定的终止规则将图像分割成不同的区域。在Python中,可以使用以下代码实现区域生长法:
```python
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
im = Image.open('001.png') # 读取图片
im_array = np.array(im)
\[m, n\] = im_array.shape
a = np.zeros((m, n)) # 建立等大小空矩阵
a\[70, 70\] = 1 # 设立种子点
k = 40 # 设立区域判断生长阈值
flag = 1 # 设立是否判断的小红旗
while flag == 1:
flag = 0
lim = (np.cumsum(im_array * a)\[-1\]) / (np.cumsum(a)\[-1\])
for i in range(2, m):
for j in range(2, n):
if a\[i, j\] == 1:
for x in range(-1, 2):
for y in range(-1, 2):
if a\[i + x, j + y\] == 0:
if (abs(im_array\[i + x, j + y\] - lim) <= k):
flag = 1
a\[i + x, j + y\] = 1
data = im_array * a # 矩阵相乘获取生长图像的矩阵
new_im = Image.fromarray(data) # data矩阵转化为二维图片
# 画图展示
plt.subplot(1, 2, 1)
plt.imshow(im, cmap='gray')
plt.axis('off') # 不显示坐标轴
plt.show()
plt.subplot(1, 2, 2)
plt.imshow(new_im, cmap='gray')
plt.axis('off') # 不显示坐标轴
plt.show()
```
这段代码首先读取了一张图片,然后根据设定的种子点和区域判断生长阈值进行区域生长。在每次循环中,根据像素灰度值和已经分割好的区域的平均灰度值的差的绝对值,判断是否将该像素点加入到已分割的区域中。最后,将分割后的图像展示出来。
请注意,这段代码中的图片路径需要根据实际情况进行修改。
#### 引用[.reference_title]
- *1* [[Python]图像处理——区域生长](https://blog.csdn.net/weixin_43487953/article/details/97395528)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* *3* [基于自选种子点的区域生长(python)](https://blog.csdn.net/weixin_42990464/article/details/118435908)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文