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多线程抓取天涯帖子内容示例
Apr 03 Python
pycharm 使用心得(七)一些实用功能介绍
Jun 06 Python
Python下rrdtool模块的基本使用方法
Nov 13 Python
python编码最佳实践之总结
Feb 14 Python
python和flask中返回JSON数据的方法
Mar 26 Python
python使用turtle绘制分形树
Jun 22 Python
Pyqt5 基本界面组件之inputDialog的使用
Jun 25 Python
python获取全国城市pm2.5、臭氧等空气质量过程解析
Oct 12 Python
pandas实现将日期转换成timestamp
Dec 07 Python
python3实现名片管理系统(控制台版)
Nov 29 Python
python中xlutils库用法浅析
Dec 29 Python
用python批量移动文件
Jan 14 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/05 PHP
JavaScript 继承详解(二)
2009/07/13 Javascript
使用jQuery的将桌面应用程序引入浏览器
2010/11/19 Javascript
getJSON调用后台json数据时函数被调用两次的原因猜想
2013/09/29 Javascript
JQuery获取表格数据示例代码
2014/05/26 Javascript
node.js中的fs.stat方法使用说明
2014/12/16 Javascript
jQuery实现悬浮在右上角的网页客服效果代码
2015/10/24 Javascript
javascript类型系统_正则表达式RegExp类型详解
2016/06/24 Javascript
jQuery中Nicescroll滚动条插件的用法
2016/11/10 Javascript
jquery-mobile基础属性与用法详解
2016/11/23 Javascript
Bootstrap基本插件学习笔记之Tooltip提示工具(18)
2016/12/08 Javascript
js实现倒计时效果(小于10补零)
2017/03/08 Javascript
Vue.js手风琴菜单组件开发实例
2017/05/16 Javascript
Three.js实现简单3D房间布局
2018/12/30 Javascript
Vue实现数据表格合并列rowspan效果
2020/11/30 Javascript
vue中使用v-model完成组件间的通信
2019/08/22 Javascript
node静态服务器实现静态读取文件或文件夹
2019/12/03 Javascript
vue项目中js-cookie的使用存储token操作
2020/11/13 Javascript
python实现简单淘宝秒杀功能
2018/05/03 Python
python 用下标截取字符串的实例
2018/12/25 Python
利用python修改json文件的value方法
2018/12/31 Python
使用PyQt4 设置TextEdit背景的方法
2019/06/14 Python
Python定义一个函数的方法
2020/06/15 Python
python在一个范围内取随机数的简单实例
2020/08/16 Python
python日志通过不同的等级打印不同的颜色(示例代码)
2021/01/13 Python
浅谈CSS3中display属性的Flex布局的方法
2017/08/14 HTML / CSS
利用HTML5的新特点实现图片文件异步上传
2014/05/29 HTML / CSS
HTML5 LocalStorage 本地存储刷新值还在
2017/03/10 HTML / CSS
德国家具在线:Fashion For Home
2017/03/11 全球购物
计算机应用专业学生的自我评价分享
2013/11/03 职场文书
学习党课思想汇报
2013/12/29 职场文书
党校学习自我鉴定
2014/02/24 职场文书
会计工作决心书
2014/03/11 职场文书
创建文明学校实施方案
2014/03/11 职场文书
股份转让协议书范本
2015/01/27 职场文书
交通事故赔偿起诉书
2015/05/20 职场文书