原博客

https://www.cnblogs.com/denny402/p/5166258.html

skimage.measure.label()函数

对二值图像进行连通区域进行标记,它的返回值就是标记,并没有对二值图像进行改变

在二值图像中,如果两个像素点相邻且值相同(同为0或同为1),那么就认为这两个像素点在一个相互连通的区域内。而同一个连通区域的所有像素点,都用同一个数值来进行标记,这个过程就叫连通区域标记。在判断两个像素是否相邻时,我们通常采用4连通或8连通判断。在图像中,最小的单位是像素,每个像素周围有8个邻接像素,常见的邻接关系有2种:4邻接与8邻接。4邻接一共4个点,即上下左右,如下左图所示。8邻接的点一共有8个,包括了对角线位置的点,如下右图所示。

在skimage包中,我们采用measure子模块下的label()函数来实现连通区域标记。

函数格式:

skimage.measure.label(image,connectivity=None)

参数中的image表示需要处理的二值图像,connectivity表示连接的模式,1代表4邻接,2代表8邻接。

输出一个标记数组(labels), 从0开始标记。

#coding=utf-8
import numpy as np
import scipy.ndimage as ndi
from skimage import measure,color
import matplotlib.pyplot as plt#编写一个函数来生成原始二值图像
def microstructure(l=256):n = 5x, y = np.ogrid[0:l, 0:l]  #生成网络mask = np.zeros((l, l))generator = np.random.RandomState(1)  #随机数种子points = l * generator.rand(2, n**2)mask[(points[0]).astype(np.int), (points[1]).astype(np.int)] = 1mask = ndi.gaussian_filter(mask, sigma=l/(4.*n)) #高斯滤波return mask > mask.mean()data = microstructure(l=128)*1 #生成测试图片labels=measure.label(data,connectivity=2)  #8连通区域标记
dst=color.label2rgb(labels)  #根据不同的标记显示不同的颜色
print('regions number:',labels.max()+1)  #显示连通区域块数(从0开始标记)fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(8, 4))
ax1.imshow(data, plt.cm.gray, interpolation='nearest')
ax1.axis('off')
ax2.imshow(dst,interpolation='nearest')
ax2.axis('off')fig.tight_layout()
plt.show()

skimage.measure.regionprops()函数

如果想分别上面的的每一个连通区域进行操作,比如计算面积、外接矩形、凸包面积等,则需要调用measure子模块的regionprops()函数。该函数格式为:

返回所有连通区块的属性列表,常用的属性列表如下表:

属性名称 类型 描述
area int 区域内像素点总数
bbox tuple 边界外接框(min_row, min_col, max_row, max_col)
centroid array   质心坐标
convex_area int 凸包内像素点总数
convex_image ndarray 和边界外接框同大小的凸包  
coords ndarray 区域内像素点坐标
Eccentricity  float 离心率
equivalent_diameter  float 和区域面积相同的圆的直径
euler_number int   区域欧拉数
extent  float 区域面积和边界外接框面积的比率
filled_area int 区域和外接框之间填充的像素点总数
perimeter  float 区域周长
label int 区域标记

代码

#coding=utf-8
import numpy as np
import scipy.ndimage as ndi
from skimage import measure,color
import matplotlib.pyplot as plt#编写一个函数来生成原始二值图像
def microstructure(l=256):n = 5x, y = np.ogrid[0:l, 0:l]  #生成网络mask = np.zeros((l, l))generator = np.random.RandomState(1)  #随机数种子points = l * generator.rand(2, n**2)mask[(points[0]).astype(np.int), (points[1]).astype(np.int)] = 1mask = ndi.gaussian_filter(mask, sigma=l/(4.*n)) #高斯滤波return mask > mask.mean()data = microstructure(l=128)*1 #生成测试图片labels = measure.label(data,connectivity=2)  ##筛选连通区域大于500的
properties = measure.regionprops(labels)
valid_label = set()
for prop in properties:if prop.area > 500:valid_label.add(prop.label)
current_bw = np.in1d(labels, list(valid_label)).reshape(labels.shape)dst = color.label2rgb(current_bw)  #根据不同的标记显示不同的颜色
print('regions number:', current_bw.max()+1)  #显示连通区域块数(从0开始标记)fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(8, 4))
ax1.imshow(data, plt.cm.gray, interpolation='nearest')
ax1.axis('off')
ax2.imshow(current_bw, plt.cm.gray, interpolation='nearest')
ax2.axis('off')
ax3.imshow(dst,interpolation='nearest')
ax3.axis('off')fig.tight_layout()
plt.show()

skimage.segmentation.clear_border函数

https://blog.csdn.net/qq_36401512/article/details/88252649

clear_border(labels, buffer_size=0, bgval=0, in_place=False)主要作用是清除二值图像中边界的1值。例如

>>> import numpy as np
>>> from skimage.segmentation import clear_border
>>> labels = np.array([[0, 0, 0, 0, 0, 0, 0, 1, 0],
...                    [0, 0, 0, 0, 1, 0, 0, 0, 0],
...                    [1, 0, 0, 1, 0, 1, 0, 0, 0],
...                    [0, 0, 1, 1, 1, 1, 1, 0, 0],
...                    [0, 1, 1, 1, 1, 1, 1, 1, 0],
...                    [0, 0, 0, 0, 0, 0, 0, 0, 0]])
>>> clear_border(labels)
array([[0, 0, 0, 0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 1, 0, 0, 0, 0],[0, 0, 0, 1, 0, 1, 0, 0, 0],[0, 0, 1, 1, 1, 1, 1, 0, 0],[0, 1, 1, 1, 1, 1, 1, 1, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0]])

skimage.measure.label和skimage.measure.regionprops()相关推荐

  1. skimage函数记录之measure.label和measure.regionprops

    这两个函数可以用来处理图(一般是二值图)中出现的连通区域,我们来分别分析. 一.skimage.measure.label(input, background = None, return_num = ...

  2. Android布局measure,Android View的Measure测量流程全解析

    相信绝大多数Android开发者都有自定义View来满足各种各样需求的经历,也知道一个View的绘制展示要经过measure.layout.draw三大流程,三者中measure的过程相比是稍微复杂一 ...

  3. sketch measure 导出html,Sketch measure 导出规范卡住的问题

    最近遇到Sketch measure的规范导出完全卡死,我一直以为是文件和系统有问题,反复测试并搜索了很久才找到解决方法,总结了一下发上来,方便有同样困惑的同学们解决问题. 经过: 之前Sketch版 ...

  4. python安装skimage(no module named ‘skimage‘)

    一眼看出报错的原因是因为缺乏skimage的包,于是百度了这个报错,得到的答案如下,需要在小黑窗输入如下的安装命令: sudo apt-get install python-skimage 然而安装的 ...

  5. skimage函数学习

    morphology(凸包) from skimage importmorphology covex_hull_image convex_hull_image将图片中所有目标看作一个整体,计算一个最小 ...

  6. python中label函数_图像分析函数:skimage.measure中的label、regionprops

    算法解释详细,有算法执行过程动态GIF图的:https://blog.csdn.net/icvpr/article/details/10259577 算法文字解释的简介易懂的:https://www. ...

  7. 鹅妹子的skimage.measure.regionprops

    参考:https://scikit-image.org/docs/dev/api/skimage.measure.html#skimage.measure.regionprops skimage的强大 ...

  8. 多种方法实现CT肺实质的自动分割

    目录 一.序言 二.基于KMean的png分割肺区 2.1.代码实现 2.2.分割算法的流程及结果如下 2.3.结果展示 三.基于Dicom的Hu值的肺区分割(不区分左右) 3.1.代码实现 四.基于 ...

  9. 【深度学习】肺结节分割项目实战二:分割肺实质

    在后续训练模型的时候如果直接使用原始的肺部CT图像,其中的非肺区域会对训练造成干扰,因此我们需要提取分割肺实质.这一部分参考了kaggle上的教程. 从这张CT图像中可以看出扫描器以外的部分为黑色,背 ...

最新文章

  1. 万能头文件#include<bits/stdc++.h>更新GCC10.2.0版本
  2. Linux命令之Ethtool
  3. 5G 承载网 — 前传、中传、回传
  4. c语言 五子棋 悔棋代码,跪求C语言五子棋悔棋部分实现
  5. C++N queensN皇后的优化算法(附完整源码)
  6. 我的Go语言学习之旅八:创建一个简单的WEB服务器
  7. XML解析(一),SAX解析XML
  8. 集线器级联增加了网络数量,效率降低了,形成了大的冲突域,怎么解决?
  9. python编程快速上手
  10. 51. Element replaceChild() 方法
  11. 出现java.lang.NoSuchMethodError错误的原因
  12. 数学建模经验分享及比赛时间汇总
  13. 【无线链路】无线发射功率以及接收灵敏度
  14. Python爬取微信公众号文章、标题、文章地址
  15. 华为机试真题 Python 实现【分月饼】
  16. java画板小demo
  17. IDEA的maven命令总是下载很多东西 解决办法
  18. 思迈特软件Smartbi智能电子表格,为你轻松制作财务报表
  19. 初中数学老师计算机培训反思,初中数学老师教学反思
  20. 京东网京东快报超级链接验证

热门文章

  1. JAI-ImageIO报错为1
  2. java imageio处理图像_Linux geoserver调优之Java图像处理优化(原生JAI和ImageIO和java默认库相互转换)...
  3. 基于python的旅游查询系统
  4. 机房收费系统(一)——整体思路
  5. /usr/bin/ld: i386 architecture of input file `xx‘ is incompatible with i386:x86-64 output
  6. 城市大脑建设的3个误区,大脑模型的分歧是关键
  7. LaTeX - 设置中文字体
  8. 植物大战僵尸OD给僵尸加防具
  9. mysql hy000 2013_ERROR 2013 (HY000): Lost connection to MySQL server
  10. MOS管的工艺和工作原理