|
123456789101112131415161718192021222324252627282930313233343536 |
- 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]
|