AIlib2/segutils/crackUtils.py

32 lines
1.2 KiB
Python

import numpy as np
from skimage.morphology import medial_axis
def Crack_measure(_mask_cv_gray,dsx=(123-30)*1000/35*0.004387636):
'''裂缝实际尺寸测量'''
'''输入:单个裂缝分割图像
过程:。
返回:最终绘制的结果图、最终落水人员(坐标、类别、置信度),
'''
# 图像转化
###READ
img = np.array(_mask_cv_gray.astype(np.int32))
image0 = binary = img
###SKELETONIZATION
img_skeletonized, distance = medial_axis(image0, return_distance=True)
#print(img_skeletonized)
img_skeletonized = np.array(img_skeletonized.astype(np.int32))
###COMPUTING WIDTH
dist_on_skel = distance * img_skeletonized
width = dist_on_skel[dist_on_skel != 0] * 2
for i in range(len(width)):
if width[i] <= 2.0:
width[i] = width[i]
else:
width[i] = width[i] - 2
###OUTPUT
real_length = np.count_nonzero(img_skeletonized) *dsx # Each pixel remaining after
real_mean_width = np.mean(width)*dsx
real_max_width = np.max(width)*dsx
real_min_width = np.min(width)*dsx
return real_length,real_mean_width,real_max_width,real_min_width