Python简单实现区域生长方式


Posted in Python onJanuary 16, 2020

区域生长是一种串行区域分割的图像分割方法。区域生长是指从某个像素出发,按照一定的准则,逐步加入邻近像素,当满足一定的条件时,区域生长终止。区域生长的好坏决定于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 cv2

class Point(object):
 def __init__(self,x,y):
  self.x = x
  self.y = y

 def getX(self):
  return self.x
 def getY(self):
  return self.y

def 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 connects

def regionGrow(img,seeds,thresh,p = 1):
 height, weight = img.shape
 seedMark = 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] = label
  for i in range(8):
   tmpX = currentPoint.x + connects[i].x
   tmpY = currentPoint.y + connects[i].y
   if 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] = label
    seedList.append(Point(tmpX,tmpY))
 return seedMark


img = 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)

以上这篇Python简单实现区域生长方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python监控linux内存并写入mongodb(推荐)
Sep 11 Python
python测试mysql写入性能完整实例
Jan 18 Python
python2.7+selenium2实现淘宝滑块自动认证功能
Feb 24 Python
python 对象和json互相转换方法
Mar 22 Python
Python装饰器的执行过程实例分析
Jun 04 Python
python整小时 整天时间戳获取算法示例
Feb 20 Python
简单了解Python matplotlib线的属性
Jun 29 Python
python代码实现逻辑回归logistic原理
Aug 07 Python
pytorch 模拟关系拟合——回归实例
Jan 14 Python
python在一个范围内取随机数的简单实例
Aug 16 Python
python 用opencv实现霍夫线变换
Nov 27 Python
Python 如何安装Selenium
May 06 Python
python3.8与pyinstaller冲突问题的快速解决方法
Jan 16 #Python
Pycharm中Python环境配置常见问题解析
Jan 16 #Python
Python Numpy库常见用法入门教程
Jan 16 #Python
Python使用Pandas库常见操作详解
Jan 16 #Python
Python 日期的转换及计算的具体使用详解
Jan 16 #Python
Python使用循环神经网络解决文本分类问题的方法详解
Jan 16 #Python
win10安装tesserocr配置 Python使用tesserocr识别字母数字验证码
Jan 16 #Python
You might like
PHP程序61条面向对象分析设计的经验小结
2008/11/12 PHP
PHP5.5.15+Apache2.4.10+MySQL5.6.20配置方法分享
2016/05/06 PHP
php生成毫秒时间戳的实例讲解
2017/09/22 PHP
看了就知道什么是JSON
2007/12/09 Javascript
web性能优化之javascript性能调优
2012/12/28 Javascript
JavaScript 函数replace深入了解
2013/03/14 Javascript
js切换光标示例代码
2013/10/10 Javascript
Node.js中的事件驱动编程详解
2014/08/16 Javascript
jQuery使用CSS()方法给指定元素同时设置多个样式
2015/03/26 Javascript
jQuery过滤HTML标签并高亮显示关键字的方法
2015/08/07 Javascript
jQuery自定义滚动条完整实例
2016/01/08 Javascript
详解nodejs中exports和module.exports的区别
2017/02/17 NodeJs
vue-cli项目中使用Mockjs详解
2018/05/14 Javascript
小程序实现订单倒计时功能
2019/04/23 Javascript
微信小程序npm引入vant-weapp的踩坑记录
2019/08/01 Javascript
[05:59]2018DOTA2国际邀请赛寻真——只为胜利的Secret
2018/08/13 DOTA
python基础教程之获取本机ip数据包示例
2014/02/10 Python
python实现指定字符串补全空格的方法
2015/04/30 Python
python搭建虚拟环境的步骤详解
2016/09/27 Python
用python写个自动SSH登录远程服务器的小工具(实例)
2017/06/17 Python
python3利用Dlib19.7实现人脸68个特征点标定
2018/02/26 Python
pandas删除指定行详解
2019/04/04 Python
django框架用户权限中的session缓存到redis中的方法
2019/08/06 Python
使用Python生成200个激活码的实现方法
2019/11/22 Python
tensorboard 可以显示graph,却不能显示scalar的解决方式
2020/02/15 Python
浅谈Django中的QueryDict元素为数组的坑
2020/03/31 Python
Flask模板引擎Jinja2使用实例
2020/04/23 Python
美国知名的百货清仓店:Neiman Marcus Last Call
2016/08/03 全球购物
美国鞋类购物网站:Shiekh Shoes
2016/08/21 全球购物
Myprotein蛋白粉美国官网:欧洲畅销运动营养品牌
2016/11/15 全球购物
美国在线工具商店:Acme Tools
2018/06/26 全球购物
《三顾茅庐》教学反思
2014/04/10 职场文书
教师党员先进性教育自我剖析材料思想汇报
2014/09/24 职场文书
个人诉讼委托书范本
2014/10/17 职场文书
十佳少年事迹材料
2014/12/25 职场文书
新郎父母婚礼致辞
2015/07/27 职场文书