区域生长是一种串行区域分割的图像分割方法。区域生长是指从某个像素出发,按照一定的准则,逐步加入邻近像素,当满足一定的条件时,区域生长终止。区域生长的好坏决定于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. node编写定时任务,for循环只执行一遍的解决办法
  2. DockerSwarm 微服务部署
  3. 关于机器学习的领悟与反思
  4. 第二篇:白话tornado源码之待请求阶段
  5. 海量数据库解决方案2011030401
  6. android 测试 大赛,轻量级android应用自动测试工具-2017全国大学生软件测试大赛.pdf...
  7. django 数据库中中文转化为汉语拼音
  8. jQuery获取input复选框的值
  9. 产品经理网站数据分析之测量问题现状(二)
  10. Struts2学习(四):Action执行的时候发生了什么
  11. RocketMQ之事务消息
  12. Vue 中的 v-cloak 作用及用法
  13. 深度学习图像分割(一)——PASCAL-VOC2012数据集(vocdevkit、Vocbenchmark_release)详细介绍
  14. xenu死链检测工具使用教程
  15. positionViewHolder{a1bbfa3 position=2 id=-1, oldPos=-1, pLpos:-1 no parent}
  16. RK3399触摸不准,修改drivers中gt9xx.h的cfg
  17. 百度地图:创建多个标注点
  18. 质点系的牛顿-欧拉动力学方程
  19. ant design 地区选择(级联)
  20. 转换英文货币大小写的代码

热门文章

  1. html边框自动变颜色,CSS设置边框颜色 css布局边框颜色
  2. 可视化报告生成器FastReport VCL创建条形码教程指南
  3. 【深蓝学院】语音信号处理|ch910-语音信号处理的一些Topics答疑
  4. 7-113 多说几遍我爱你 (5 分)
  5. 徐州计算机软考培训,徐州2017办公软件一对一培训
  6. Mapabc里InfoWindow自定义窗口时的关闭事件。
  7. Python批量下载 抖音无水印视频!
  8. python字典查找元素_详解Python字典小结
  9. 免费Office软件下载安装使用,就这么简单。
  10. ubuntu 硬盘情况占用分析