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不带重复的全排列代码
Aug 13 Python
Python ORM框架SQLAlchemy学习笔记之关系映射实例
Jun 10 Python
Python中关于Sequence切片的下标问题详解
Jun 15 Python
Python模块、包(Package)概念与用法分析
May 31 Python
pandas实现将dataframe满足某一条件的值选出
Jun 12 Python
详解python和matlab的优势与区别
Jun 28 Python
解决pip install psycopg2出错问题
Jul 09 Python
python判断一个变量是否已经设置的方法
Aug 13 Python
python高级特性简介
Aug 13 Python
Python中读取文件名中的数字的实例详解
Dec 25 Python
python生成word合同的实例方法
Jan 12 Python
python热力图实现简单方法
Jan 29 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实现)只使用++运算实现加法,减法,乘法,除法
2013/06/27 PHP
php while循环得到循环次数
2013/10/26 PHP
destoon实现调用当前栏目分类及子分类和三级分类的方法
2014/08/21 PHP
初识PHP中的Swoole
2016/04/05 PHP
微信公众号实现会员卡领取功能
2017/06/08 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
2019/12/20 PHP
window.showModalDialog使用手册
2007/01/11 Javascript
js玩一玩WSH吧
2007/02/23 Javascript
当达到输入长度时表单自动切换焦点
2014/04/06 Javascript
微信企业号开发之微信考勤Cookies的使用
2015/09/11 Javascript
jQuery获得字体颜色16位码的方法
2016/02/20 Javascript
AngularJS ng-repeat指令中使用track by子语句解决重复数据遍历错误问题
2017/01/21 Javascript
JS原型与原型链的深入理解
2017/02/15 Javascript
jquery拼接ajax 的json和字符串拼接的方法
2017/03/11 Javascript
详解webpack自动生成html页面
2017/06/29 Javascript
详解Vue微信公众号开发踩坑全记录
2017/08/21 Javascript
vue使用jsonp抓取qq音乐数据的方法
2018/06/21 Javascript
[10:05]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD 选手采访
2021/03/11 DOTA
python中pygame模块用法实例
2014/10/09 Python
Python实现的多线程端口扫描工具分享
2015/01/21 Python
Django学习笔记之ORM基础教程
2018/03/27 Python
pandas 将list切分后存入DataFrame中的实例
2018/07/03 Python
pandas分别写入excel的不同sheet方法
2018/12/11 Python
利用python实现凯撒密码加解密功能
2020/03/31 Python
Python实现爬取并分析电商评论
2020/06/19 Python
vue 中 get / delete 传递数组参数方法
2021/03/23 Vue.js
会计专业自我鉴定
2014/02/10 职场文书
环保倡议书格式范文
2014/05/14 职场文书
租房协议书
2014/09/12 职场文书
法院授权委托书格式
2014/09/28 职场文书
2015年结对帮扶工作总结
2015/05/04 职场文书
教师学习十八届五中全会精神心得体会
2016/01/05 职场文书
小学英语教学反思范文
2016/02/15 职场文书
[有人@你]你有一封绿色倡议书,请查收!
2019/07/18 职场文书
十个Python自动化常用操作,即拿即用
2021/05/10 Python
深入浅析Redis 集群伸缩原理
2021/05/15 Redis