区域生长是一种串行区域分割的图像分割方法。区域生长是指从某个像素出发,按照一定的准则,逐步加入邻近像素,当满足一定的条件时,区域生长终止。区域生长的好坏决定于1.初始点(种子点)的选取。2.生长准则。3.终止条件。区域生长是从某个或者某些像素点出发,最后得到整个区域,进而实现目标的提取。

区域生长的原理:

区域生长的基本思想是将具有相似性质的像素集合起来构成区域。具体先对每个需要分割的区域找一个种子像素作为生长起点,然后将种子像素和周围邻域中与种子像素有相同或相似性质的像素(根据某种事先确定的生长或相似准则来判定)合并到种子像素所在的区域中。将这些新像素当作新的种子继续上面的过程,直到没有满足条件的像素可被包括进来。这样一个区域就生长成了。

区域生长实现的步骤如下:

1. 对图像顺序扫描!找到第1个还没有归属的像素, 设该像素为(x0, y0);

2. 以(x0, y0)为中心, 考虑(x0, y0)的4邻域像素(x, y)如果(x0, y0)满足生长准则, 将(x, y)与(x0, y0)合并(在同一区域内), 同时将(x, y)压入堆栈;

3. 从堆栈中取出一个像素, 把它当作(x0, y0)返回到步骤2;

4. 当堆栈为空时!返回到步骤1;

5. 重复步骤1 - 4直到图像中的每个点都有归属时。生长结束。

Python实现

import numpy as np
import cv2class Point(object):def __init__(self,x,y):self.x = xself.y = ydef getX(self):return self.xdef getY(self):return self.ydef getGrayDiff(img,currentPoint,tmpPoint):return abs(int(img[currentPoint.x,currentPoint.y]) - int(img[tmpPoint.x,tmpPoint.y]))def selectConnects(p):if p != 0:connects = [Point(-1, -1), Point(0, -1), Point(1, -1), Point(1, 0), Point(1, 1), \Point(0, 1), Point(-1, 1), Point(-1, 0)]else:connects = [ Point(0, -1),  Point(1, 0),Point(0, 1), Point(-1, 0)]return connectsdef regionGrow(img,seeds,thresh,p = 1):height, weight = img.shapeseedMark = np.zeros(img.shape)seedList = []for seed in seeds:seedList.append(seed)label = 1
    connects = selectConnects(p)while(len(seedList)>0):currentPoint = seedList.pop(0)seedMark[currentPoint.x,currentPoint.y] = labelfor i in range(8):tmpX = currentPoint.x + connects[i].xtmpY = currentPoint.y + connects[i].yif tmpX < 0 or tmpY < 0 or tmpX >= height or tmpY >= weight:continue
            grayDiff = getGrayDiff(img,currentPoint,Point(tmpX,tmpY))if grayDiff < thresh and seedMark[tmpX,tmpY] == 0:seedMark[tmpX,tmpY] = labelseedList.append(Point(tmpX,tmpY))return seedMarkimg = cv2.imread('lean.png',0)
seeds = [Point(10,10),Point(82,150),Point(20,300)]
binaryImg = regionGrow(img,seeds,10)
cv2.imshow(' ',binaryImg)
cv2.waitKey(0)

参考博客 https://blog.csdn.net/bagboy_taobao_com/article/details/5666091

Python简单实现区域生长相关推荐

  1. python中年大叔学编程_中年大叔学编程-Python简单操作文件

    原标题:中年大叔学编程-Python简单操作文件 在计算机中,经常打交道的就是各种文档,用得比较多的软件就是office和记事本来操作文件,那么我们试试用Python来简单读写文件. Open函数的用 ...

  2. (一)python简单应用

    (一)python简单应用 自学之后运用循环语句和判断语句所解决的几个简单问题: 1.实现1到10的和: x = 1 he = 0 while x < 11:if x == 7:passelse ...

  3. python 简单图像处理(13) 二值图腐蚀和膨胀,开运算、闭运算

    原文:http://www.cnblogs.com/xianglan/archive/2010/12/29/1921211.html python 简单图像处理(13) 二值图腐蚀和膨胀,开运算.闭运 ...

  4. python好学-所有人都说Python 简单易学,为何你觉得难?

    记得刚学Python的时候,几乎所有人都说Python 简单易学,而对于编程零基础,只掌握Word和Excel的人来说,感觉真的好难. 学习之前网上的教材看了,Python的书也看了,包括<核心 ...

  5. python基础代码事例-Python简单基础小程序的实例代码

    1 九九乘法表 for i in range(9):#从0循环到8 i += 1#等价于 i = i+1 for j in range(i):#从0循环到i j += 1 print(j,'*',i, ...

  6. python程序实例教程基础-Python简单基础小程序的实例代码

    1 九九乘法表 for i in range(9):#从0循环到8 i += 1#等价于 i = i+1 for j in range(i):#从0循环到i j += 1 print(j,'*',i, ...

  7. Python 简单入门指北(二)

    Python 简单入门指北(二) 2 函数 2.1 函数是一等公民 一等公民指的是 Python 的函数能够动态创建,能赋值给别的变量,能作为参传给函数,也能作为函数的返回值.总而言之,函数和普通变量 ...

  8. Python简单主机批量管理工具

    Python简单主机批量管理工具 一.程序介绍 需求: 简单主机批量管理工具需求:1.主机分组2.主机信息使用配置文件3.可批量执行命令.发送文件,结果实时返回4.主机用户名密码.端口可以不同5.执行 ...

  9. Python简单遍历字典及删除元素的方法

    Python简单遍历字典及删除元素的方法 这篇文章主要介绍了Python简单遍历字典及删除元素的方法,结合实例形式分析了Python遍历字典删除元素的操作方法与相关注意事项,需要的朋友可以参考下 具体 ...

最新文章

  1. 源码剖析transformer、self-attention(自注意力机制)原理!
  2. careercup-C和C++ 13.2
  3. ASP.NET页面的生命周期
  4. 从 Ubuntu 21.04 升级到 Ubuntu 21.10
  5. php redis 扩展 编译安装,Linux 下 PHP 扩展 redis 编译安装
  6. .NET6之MiniAPI(十三):健康检查
  7. LeetCode 2190. 数组中紧跟 key 之后出现最频繁的数字
  8. 2022年中国母婴新消费白皮书
  9. 苹果电脑mac截屏_谁说 mac系统 不适合搞科研? | 假期不宜出门,宜学习!
  10. JS兼容各个浏览器的本地图片上传即时预览效果
  11. IaaS, PaaS和SaaS公司都做些什么
  12. Linux备份数据 结果为0 原因:mysqldump command not found
  13. 51单片机--时钟芯片ds1302
  14. 定义一个方法用于判断一个字符串是否是对称的字符串,并在主方法中测试方法。例如:“abcba“、“上海自来水来自海上“均为对称字符串
  15. Pycharm下载pytorch
  16. ElasticSearch Java 客户端连接ElasticSearch
  17. 1.什么情况下发生GC
  18. CH340下载程序时DTR和RTS的电平变化分析
  19. 数字地球与计算机技术联系,数字地球与现代测绘科学的发展问题
  20. Illegal unquoted character ((CTRL-CHAR, code 10)): has to be escaped using backslash to be included

热门文章

  1. linux修改二进制文件
  2. 单片机c语言慧尾灯编码,基于AT89S52单片机的汽车LED尾灯控制器设计毕业论文+电路仿真+PCB+程序源码...
  3. windows日志分析-Log Parser等工具使用
  4. 程序员不能错过的28份技术知识图谱,你的进阶路上必备
  5. java iplimage 头文件_JavaCV – 为什么IplImage.createFrom(image)不再存在?
  6. 宅急送 项目第七天 取派业务模块
  7. python画生日_使用PYTHON制作一个生日查看器
  8. Li‘s 核磁共振影像数据处理-15-MRIcroGL三维核磁共振影像重建
  9. Android | 电脑cmd中使用adb命令安装apk
  10. Redisson--最好用的Redis客户端--介绍