32 lines
1.2 KiB
Python
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 |