36 lines
1.3 KiB
Python
36 lines
1.3 KiB
Python
import numpy as np
|
|
from skimage.morphology import medial_axis
|
|
def Crack_measure(_mask_cv_gray,par={'dsx':(123-30)*1000/35*0.004387636 } ):
|
|
'''裂缝实际尺寸测量'''
|
|
'''输入:单个裂缝分割图像
|
|
过程:。
|
|
返回:最终绘制的结果图、最终落水人员(坐标、类别、置信度),
|
|
'''
|
|
# 图像转化
|
|
|
|
dsx = par['dsx']
|
|
###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
|
|
if len(width)==0:
|
|
return [0,0,0,0]
|
|
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] |