当前位置:   article > 正文

Scikit-Image图像处理 (4)——区域分割,特征提取

Scikit-Image图像处理 (4)——区域分割,特征提取

1.二值图像进行区域分割

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. from skimage import data, io
  4. from skimage.filters import threshold_local
  5. from skimage.morphology import binary_opening, binary_closing, disk
  6. from skimage import img_as_ubyte
  7. image = data.coins()
  8. plt.imshow(image, cmap='gray', vmin=0, vmax=255)

局部二值化

  1. print(image.shape) # (303, 384)
  2. th = threshold_local(image, block_size=125, offset=-15) #局部二值化阈值
  3. # 二值化处理
  4. mask0 = image > th
  5. plt.imshow(mask0, cmap='gray')
  6. plt.show()

 

 closing处理 

  1. mask1 = binary_closing(mask0, disk(3)) # <-disk(1)填不满
  2. plt.imshow(mask1, cmap='gray')
  3. plt.axis('off')
  4. plt.show()

opening处理

  1. mask2 = binary_opening(mask1, disk(3))
  2. plt.imshow(mask2, cmap='gray')
  3. plt.axis('off')
  4. plt.show()

  1. masked = image*mask2
  2. plt.imshow(masked, cmap='gray')
  3. plt.axis('off')
  4. plt.show()

2.Label

  1. from skimage.measure import label
  2. from skimage.color import label2rgb
  3. label_img = label(mask2)
  4. c_label_img = label2rgb(label_img, bg_label=0, image=image) #領域ごとに適当に色をつけて表示
  5. plt.figure(figsize=(10,4))
  6. plt.subplot(121)
  7. plt.imshow(label_img)
  8. plt.axis('off')
  9. plt.colorbar()
  10. plt.subplot(122)
  11. plt.imshow(c_label_img)
  12. plt.axis('off')
  13. plt.show()

抽出7号硬币

  1. mask3 = np.zeros(label_img.shape)
  2. mask3[label_img==7]=1
  3. plt.figure(figsize=(10,4))
  4. plt.subplot(121)
  5. plt.imshow(mask3, cmap='gray')
  6. plt.subplot(122)
  7. plt.imshow(image*mask3, cmap='gray')
  8. plt.show()

3.特征提取 regionprops

(1)面积,亮度

  1. from skimage.measure import regionprops
  2. props = regionprops(label_img, intensity_image=image)
  3. areas = [] #面积
  4. means = [] #硬币的平均亮度
  5. for prop in props:
  6. if prop['area']>500: #面积500以上
  7. y1, x1, y2, x2 = prop['bbox'] #外接矩形的坐标
  8. plt.imshow(image[y1:y2,x1:x2],cmap='gray')
  9. plt.show()
  10. print("ID:", prop['label']) #lebel号
  11. print("面积:", prop['area']) #面积
  12. print("平均亮度:", prop['mean_intensity']) #平均亮度
  13. print("周长:", prop['perimeter']) #周长(単位为像素)
  14. areas.append(prop['area'])
  15. means.append(prop['mean_intensity'])
  16. plt.scatter(areas, means)
  17. plt.xlabel("Area")
  18. plt.ylabel("Mean Intensity")
  19. plt.show()

 

 (2)所有特征量

  1. for item in props[0]:
  2. print(item, ":", prop[item])
  3. # area : 1464
  4. # area_bbox : 1886
  5. # area_convex : 1500
  6. # area_filled : 1464
  7. # axis_major_length : 45.320677849714
  8. # axis_minor_length : 41.148342391948304
  9. # bbox : (248, 336, 289, 382)
  10. # centroid : (268.0075136612022, 358.1448087431694)
  11. # centroid_local : [20.00751366 22.14480874]
  12. # centroid_weighted : (267.9509544384042, 358.0799674180582)
  13. # centroid_weighted_local : [19.95095444 22.07996742]
  14. # coords : [[248 354]
  15. # [248 355]
  16. # [248 356]
  17. # ...
  18. # [288 361]
  19. # [288 362]
  20. # [288 363]]
  21. # eccentricity : 0.4191056170704604
  22. # equivalent_diameter_area : 43.17432910297829
  23. # euler_number : 1
  24. # extent : 0.7762460233297985
  25. # feret_diameter_max : 46.87216658103186
  26. # image : [[False False False ... False False False]
  27. # [False False False ... False False False]
  28. # [False False False ... False False False]
  29. # ...
  30. # [False False False ... False False False]
  31. # [False False False ... False False False]
  32. # [False False False ... False False False]]
  33. # image_convex : [[False False False ... False False False]
  34. # [False False False ... False False False]
  35. # [False False False ... False False False]
  36. # ...
  37. # [False False False ... False False False]
  38. # [False False False ... False False False]
  39. # [False False False ... False False False]]
  40. # image_filled : [[False False False ... False False False]
  41. # [False False False ... False False False]
  42. # [False False False ... False False False]
  43. # ...
  44. # [False False False ... False False False]
  45. # [False False False ... False False False]
  46. # [False False False ... False False False]]
  47. # image_intensity : [[0 0 0 ... 0 0 0]
  48. # [0 0 0 ... 0 0 0]
  49. # [0 0 0 ... 0 0 0]
  50. # ...
  51. # [0 0 0 ... 0 0 0]
  52. # [0 0 0 ... 0 0 0]
  53. # [0 0 0 ... 0 0 0]]
  54. # inertia_tensor : [[1.28372473e+02 7.75907761e-02]
  55. # [7.75907761e-02 1.05824397e+02]]
  56. # inertia_tensor_eigvals : [128.37274004734735, 105.82413010031311]
  57. # intensity_max : 214.0
  58. # intensity_mean : 154.29781420765028
  59. # intensity_min : 77.0
  60. # label : 24
  61. # moments : [[1.46400000e+03 3.24200000e+04 9.05872000e+05 2.83783940e+07]
  62. # [2.92910000e+04 6.48530000e+05 1.81086080e+07 5.66984330e+08]
  63. # [7.40967000e+05 1.64094240e+07 4.51511658e+08 1.39022544e+10]
  64. # [2.10321410e+07 4.65826844e+08 1.26060977e+10 3.80602543e+11]]
  65. # moments_central : [[ 1.46400000e+03 -2.35900188e-12 1.87937301e+05 -5.63933841e+03]
  66. # [ 3.67705866e-12 -1.13592896e+02 -1.06074294e+04 7.50381781e+04]
  67. # [ 1.54926917e+05 5.39692284e+03 1.33022875e+07 1.27460882e+05]
  68. # [ 7.82879427e+03 -1.13419012e+05 -2.08187942e+06 -1.65495983e+07]]
  69. # moments_hu : [ 1.59970540e-01 2.37223328e-04 3.04639425e-07 1.15677975e-09
  70. # -2.10816335e-17 -1.75684355e-11 -5.20826290e-18]
  71. # moments_normalized : [[ nan nan 8.76861155e-02 -6.87662695e-05]
  72. # [ nan -5.29991640e-05 -1.29347327e-04 2.39143759e-05]
  73. # [ 7.22844242e-02 6.58102465e-05 4.23938735e-03 1.06165437e-06]
  74. # [ 9.54645630e-05 -3.61461987e-05 -1.73405075e-05 -3.60265893e-06]]
  75. # moments_weighted : [[2.25892000e+05 4.98768800e+06 1.38932782e+08 4.33358566e+09]
  76. # [4.50676100e+06 9.97437860e+07 2.78354830e+09 8.69601199e+10]
  77. # [1.13345767e+08 2.51326943e+09 6.92456647e+10 2.13172404e+12]
  78. # [3.20261718e+09 7.10839231e+10 1.92812715e+12 5.82844892e+13]]
  79. # moments_weighted_central : [[ 2.25892000e+05 -5.32253353e-10 2.88047935e+07 -6.06344440e+06]
  80. # [ 2.08956408e-10 2.34649959e+05 1.34456542e+06 6.86928200e+07]
  81. # [ 2.34315836e+07 1.23560438e+06 1.99961371e+09 3.00734819e+08]
  82. # [ 6.29603118e+06 1.60850955e+07 3.86165186e+08 4.53452447e+09]]
  83. # moments_weighted_hu : [ 1.02369680e-03 1.11728663e-08 1.70997792e-13 1.38882458e-13
  84. # -2.12784146e-26 -7.43233122e-18 2.30216331e-27]
  85. # moments_weighted_normalized : [[ nan nan 5.64498854e-04 -2.50015695e-07]
  86. # [ nan 4.59852743e-06 5.54408411e-08 5.95948586e-09]
  87. # [ 4.59197950e-04 5.09480203e-08 1.73477660e-07 5.48947405e-11]
  88. # [ 2.59606011e-07 1.39547189e-09 7.04888039e-11 1.74151952e-12]]
  89. # orientation : -1.5673552548724272
  90. # perimeter : 141.29646455628165
  91. # perimeter_crofton : 136.63896538976286
  92. # slice : (slice(248, 289, None), slice(336, 382, None))
  93. # solidity : 0.976

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/960913
推荐阅读
相关标签
  

闽ICP备14008679号