计算skeleton = medial_axis(blobs)中,skeleton中的像素长度,用python写出来
时间: 2023-12-03 09:45:08 浏览: 112
可以使用scikit-image库中的 `skeletonize` 函数来计算二值图像中的骨架(skeleton),代码如下:
```python
from skimage.morphology import skeletonize
# 假设已经读入了二值图像为blobs
skeleton = skeletonize(blobs)
# 计算skeleton中的像素长度
length = skeleton.sum()
print("骨架长度为:", length)
```
`skeletonize` 函数会返回一个与输入图像大小相同的布尔型数组,其中所有非零像素(即输入二值图像中的白色像素)被转换为骨架像素(即输出布尔数组中的True值)。因此,可以使用 `sum` 函数来计算骨架中的像素数量,即骨架长度。
相关问题
针对skeleton = medial_axis(blobs),删除skeleton中特定长度的分支,并使用python
可以使用scikit-image库来实现此功能。以下是一个示例代码,其中使用medial_axis来计算给定二进制图像的中轴线,并删除长度小于min_length的分支:
```python
from skimage.morphology import medial_axis, remove_small_objects
from skimage.measure import label, regionprops
def remove_short_branches(image, min_length):
# 计算中轴线
skeleton = medial_axis(image)
# 标记连通区域
labels = label(skeleton)
# 获取连通区域的属性
props = regionprops(labels)
# 删除长度小于min_length的分支
for prop in props:
if prop.area < min_length:
skeleton[labels == prop.label] = 0
# 删除小对象
skeleton = remove_small_objects(skeleton, min_size=min_length)
return skeleton
```
在这个函数中,我们首先使用medial_axis函数计算给定二进制图像的中轴线。然后,我们使用label和regionprops函数来标记中轴线的连通区域,并获取每个区域的属性。接下来,我们循环遍历每个区域,如果它的长度小于min_length,则将对应的像素设置为0。最后,我们使用remove_small_objects函数来删除小于min_length的对象,并返回处理后的中轴线。
使用示例:
```python
import matplotlib.pyplot as plt
from skimage.io import imread
from skimage.color import rgb2gray
# 读取图像
image = rgb2gray(imread('blobs.png'))
# 删除长度小于10的分支
skeleton = remove_short_branches(image, 10)
# 显示结果
fig, ax = plt.subplots(1, 2, figsize=(8, 4))
ax[0].imshow(image, cmap='gray')
ax[1].imshow(skeleton, cmap='gray')
plt.show()
```
这里使用了一个名为blobs.png的示例图像,你可以替换成你自己的图像。运行上面的代码后,将显示原始图像和处理后的中轴线,其中删除了长度小于10的分支。
skel, distance = morphology.medial_axis(img, return_distance=True) # 图片细化(骨架提取) dist_on_skel = distance * skel # dist_on_skel = dist_on_skel.astype(np.uint8) * 255 cv2.imwrite("skeleton_gaussian_1.bmp", dist_on_skel)
这段代码是利用Python的OpenCV库进行图像处理,实现对输入图像的细化(即骨架提取)操作,并将处理结果保存为图像文件。
具体来说,这段代码的作用如下:
1. 首先,输入图像通过OpenCV库读取,存储在变量img中。
2. 接着,利用OpenCV库的morphology模块中的medial_axis函数对图像进行细化操作,得到细化后的骨架图像(变量skel)以及每个像素点到骨架的距离(变量distance)。
3. 然后,将距离信息乘以骨架图像,得到每个像素点到骨架的距离信息在骨架上的投影距离(即距离乘以骨架图像的值),并将结果存储在变量dist_on_skel中。
4. 最后,将投影距离信息转换为图像格式,并以bmp格式保存为文件"skeleton_gaussian_1.bmp"。
需要注意的是,该代码的实现依赖于OpenCV库和NumPy库,并且需要先将原始图像读取为NumPy数组格式。同时,该代码的细化算法基于距离变换,可以实现对二值图像进行骨架提取操作。
阅读全文