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 Web框架Flask下网站开发入门实例
Feb 08 Python
利用Python实现图书超期提醒
Aug 02 Python
Python脚本实现Web漏洞扫描工具
Oct 25 Python
JS设计模式之责任链模式实例详解
Feb 03 Python
Python面向对象程序设计构造函数和析构函数用法分析
Apr 12 Python
numpy数组之存取文件的实现示例
May 24 Python
pytorch 改变tensor尺寸的实现
Jan 03 Python
python logging.info在终端没输出的解决
May 12 Python
详解pandas获取Dataframe元素值的几种方法
Jun 14 Python
python 抓取知乎指定回答下视频的方法
Jul 09 Python
如何在Python中创建二叉树
Mar 30 Python
python执行js代码的方法
May 13 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
咖啡常见的种类
2021/03/03 新手入门
ThinkPHP实现多数据库连接的解决方法
2014/07/01 PHP
浅谈php中include文件变量作用域
2015/06/18 PHP
PHP+MySQL统计该库中每个表的记录数并按递减顺序排列的方法
2016/02/15 PHP
Laravel框架使用Redis的方法详解
2018/05/30 PHP
jQuery ajax+PHP实现的级联下拉列表框功能示例
2019/02/12 PHP
table对象中的insertRow与deleteRow使用示例
2014/01/26 Javascript
JavaScript判断浏览器类型的方法
2015/02/10 Javascript
深入讲解AngularJS中的自定义指令的使用
2015/06/18 Javascript
简单谈谈javascript Date类型
2015/09/06 Javascript
js仿微博实现统计字符和本地存储功能
2015/12/22 Javascript
jquery及js实现动态加载js文件的方法
2016/01/21 Javascript
JS简单实现tab切换效果的多窗口显示功能
2016/09/07 Javascript
xcode中获取js文件的路径方法(推荐)
2016/11/05 Javascript
bootstrap-table组合表头的实现方法
2017/09/07 Javascript
解决vue的变量在settimeout内部效果失效的问题
2018/08/30 Javascript
angular的输入和输出的使用方法
2018/09/22 Javascript
ES6 class类链式继承,实例化及react super(props)原理详解
2020/02/15 Javascript
Python内置函数delattr的具体用法
2017/11/23 Python
python输出100以内的质数与合数实例代码
2018/07/08 Python
详解Python网络框架Django和Scrapy安装指南
2019/04/01 Python
Python如何使用ConfigParser读取配置文件
2020/11/12 Python
Html5实现二维码扫描并解析
2016/01/20 HTML / CSS
Microsoft新加坡官方网站:购买微软最新软件和技术产品
2016/10/28 全球购物
Public Desire美国/加拿大:全球性的在线鞋类品牌
2018/12/17 全球购物
欧克利英国官网:Oakley英国
2019/08/24 全球购物
实习生的自我鉴定范文欣赏
2013/11/20 职场文书
年度考核评语
2014/01/19 职场文书
师恩难忘教学反思
2014/04/27 职场文书
5.12护士节活动总结
2015/02/10 职场文书
酒店财务经理岗位职责
2015/04/08 职场文书
导游词之河北邯郸
2019/09/12 职场文书
Python 把两层列表展开平铺成一层(5种实现方式)
2021/04/07 Python
CSS3 实现NES游戏机的示例代码
2021/04/21 HTML / CSS
分析MySQL抛出异常的几种常见解决方式
2021/05/18 MySQL
python小型的音频操作库mp3Play
2022/04/24 Python