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

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

import numpy as np
import matplotlib.pyplot as plt
from skimage import data, io
from skimage.filters import threshold_local
from skimage.morphology import binary_opening, binary_closing, disk
from skimage import img_as_ubyte

image = data.coins()
plt.imshow(image, cmap='gray', vmin=0, vmax=255)

局部二值化

print(image.shape)  # (303, 384)
th = threshold_local(image, block_size=125, offset=-15) #局部二值化阈值

# 二值化处理
mask0 = image > th

plt.imshow(mask0, cmap='gray')
plt.show()

 

 closing处理 

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

opening处理

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

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

2.Label

from skimage.measure import label
from skimage.color import label2rgb

label_img = label(mask2)
c_label_img = label2rgb(label_img, bg_label=0, image=image) #領域ごとに適当に色をつけて表示

plt.figure(figsize=(10,4))
plt.subplot(121)
plt.imshow(label_img)
plt.axis('off')
plt.colorbar()
plt.subplot(122)
plt.imshow(c_label_img)
plt.axis('off')
plt.show()

抽出7号硬币

mask3 = np.zeros(label_img.shape)
mask3[label_img==7]=1

plt.figure(figsize=(10,4))
plt.subplot(121)
plt.imshow(mask3, cmap='gray')
plt.subplot(122)
plt.imshow(image*mask3, cmap='gray')
plt.show()

3.特征提取 regionprops

(1)面积,亮度

from skimage.measure import regionprops

props = regionprops(label_img, intensity_image=image)

areas = [] #面积
means = [] #硬币的平均亮度

for prop in props:
    if prop['area']>500: #面积500以上
        y1, x1, y2, x2  = prop['bbox'] #外接矩形的坐标
        plt.imshow(image[y1:y2,x1:x2],cmap='gray')
        plt.show()
        print("ID:", prop['label'])  #lebel号
        print("面积:", prop['area']) #面积
        print("平均亮度:", prop['mean_intensity']) #平均亮度
        print("周长:", prop['perimeter'])        #周长(単位为像素)
        
        areas.append(prop['area'])
        means.append(prop['mean_intensity'])

plt.scatter(areas, means)
plt.xlabel("Area")
plt.ylabel("Mean Intensity")
plt.show()

 

 (2)所有特征量

for item in props[0]:
    print(item, ":", prop[item])


# area : 1464
# area_bbox : 1886
# area_convex : 1500
# area_filled : 1464
# axis_major_length : 45.320677849714
# axis_minor_length : 41.148342391948304
# bbox : (248, 336, 289, 382)
# centroid : (268.0075136612022, 358.1448087431694)
# centroid_local : [20.00751366 22.14480874]
# centroid_weighted : (267.9509544384042, 358.0799674180582)
# centroid_weighted_local : [19.95095444 22.07996742]
# coords : [[248 354]
#  [248 355]
#  [248 356]
#  ...
#  [288 361]
#  [288 362]
#  [288 363]]
# eccentricity : 0.4191056170704604
# equivalent_diameter_area : 43.17432910297829
# euler_number : 1
# extent : 0.7762460233297985
# feret_diameter_max : 46.87216658103186
# image : [[False False False ... False False False]
#  [False False False ... False False False]
#  [False False False ... False False False]
#  ...
#  [False False False ... False False False]
#  [False False False ... False False False]
#  [False False False ... False False False]]
# image_convex : [[False False False ... False False False]
#  [False False False ... False False False]
#  [False False False ... False False False]
#  ...
#  [False False False ... False False False]
#  [False False False ... False False False]
#  [False False False ... False False False]]
# image_filled : [[False False False ... False False False]
#  [False False False ... False False False]
#  [False False False ... False False False]
#  ...
#  [False False False ... False False False]
#  [False False False ... False False False]
#  [False False False ... False False False]]
# image_intensity : [[0 0 0 ... 0 0 0]
#  [0 0 0 ... 0 0 0]
#  [0 0 0 ... 0 0 0]
#  ...
#  [0 0 0 ... 0 0 0]
#  [0 0 0 ... 0 0 0]
#  [0 0 0 ... 0 0 0]]
# inertia_tensor : [[1.28372473e+02 7.75907761e-02]
#  [7.75907761e-02 1.05824397e+02]]
# inertia_tensor_eigvals : [128.37274004734735, 105.82413010031311]
# intensity_max : 214.0
# intensity_mean : 154.29781420765028
# intensity_min : 77.0
# label : 24
# moments : [[1.46400000e+03 3.24200000e+04 9.05872000e+05 2.83783940e+07]
#  [2.92910000e+04 6.48530000e+05 1.81086080e+07 5.66984330e+08]
#  [7.40967000e+05 1.64094240e+07 4.51511658e+08 1.39022544e+10]
#  [2.10321410e+07 4.65826844e+08 1.26060977e+10 3.80602543e+11]]
# moments_central : [[ 1.46400000e+03 -2.35900188e-12  1.87937301e+05 -5.63933841e+03]
#  [ 3.67705866e-12 -1.13592896e+02 -1.06074294e+04  7.50381781e+04]
#  [ 1.54926917e+05  5.39692284e+03  1.33022875e+07  1.27460882e+05]
#  [ 7.82879427e+03 -1.13419012e+05 -2.08187942e+06 -1.65495983e+07]]
# moments_hu : [ 1.59970540e-01  2.37223328e-04  3.04639425e-07  1.15677975e-09
#  -2.10816335e-17 -1.75684355e-11 -5.20826290e-18]
# moments_normalized : [[            nan             nan  8.76861155e-02 -6.87662695e-05]
#  [            nan -5.29991640e-05 -1.29347327e-04  2.39143759e-05]
#  [ 7.22844242e-02  6.58102465e-05  4.23938735e-03  1.06165437e-06]
#  [ 9.54645630e-05 -3.61461987e-05 -1.73405075e-05 -3.60265893e-06]]
# moments_weighted : [[2.25892000e+05 4.98768800e+06 1.38932782e+08 4.33358566e+09]
#  [4.50676100e+06 9.97437860e+07 2.78354830e+09 8.69601199e+10]
#  [1.13345767e+08 2.51326943e+09 6.92456647e+10 2.13172404e+12]
#  [3.20261718e+09 7.10839231e+10 1.92812715e+12 5.82844892e+13]]
# moments_weighted_central : [[ 2.25892000e+05 -5.32253353e-10  2.88047935e+07 -6.06344440e+06]
#  [ 2.08956408e-10  2.34649959e+05  1.34456542e+06  6.86928200e+07]
#  [ 2.34315836e+07  1.23560438e+06  1.99961371e+09  3.00734819e+08]
#  [ 6.29603118e+06  1.60850955e+07  3.86165186e+08  4.53452447e+09]]
# moments_weighted_hu : [ 1.02369680e-03  1.11728663e-08  1.70997792e-13  1.38882458e-13
#  -2.12784146e-26 -7.43233122e-18  2.30216331e-27]
# moments_weighted_normalized : [[            nan             nan  5.64498854e-04 -2.50015695e-07]
#  [            nan  4.59852743e-06  5.54408411e-08  5.95948586e-09]
#  [ 4.59197950e-04  5.09480203e-08  1.73477660e-07  5.48947405e-11]
#  [ 2.59606011e-07  1.39547189e-09  7.04888039e-11  1.74151952e-12]]
# orientation : -1.5673552548724272
# perimeter : 141.29646455628165
# perimeter_crofton : 136.63896538976286
# slice : (slice(248, 289, None), slice(336, 382, None))
# solidity : 0.976

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值