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编写一个国际象棋AI程序
Nov 28 Python
Python使用bs4获取58同城城市分类的方法
Jul 08 Python
Python基于pillow判断图片完整性的方法
Sep 18 Python
正确理解python中的关键字“with”与上下文管理器
Apr 21 Python
python自动登录12306并自动点击验证码完成登录的实现源代码
Apr 25 Python
Django添加feeds功能的示例
Aug 07 Python
pygame实现雷电游戏雏形开发
Nov 20 Python
python实现狄克斯特拉算法
Jan 17 Python
Python从函数参数类型引出元组实例分析
May 28 Python
Python定时任务APScheduler的实例实例详解
Jul 22 Python
MoviePy常用剪辑类及Python视频剪辑自动化
Dec 18 Python
 python中的元类metaclass详情
May 30 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
Cappuccino 卡布其诺咖啡之制作
2021/03/03 冲泡冲煮
PHP自动识别字符集并完成转码详解
2013/08/02 PHP
ThinkPHP3.1数据CURD操作快速入门
2014/06/19 PHP
PHP中使用Imagick操作PSD文件实例
2015/01/26 PHP
PHP 错误处理机制
2015/07/06 PHP
jquery实现人性化的有选择性禁用鼠标右键
2014/06/30 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/07/18 Javascript
jquery实现可拖拽弹出层特效
2015/01/04 Javascript
Linux下编译安装php libevent扩展实例
2015/02/14 Javascript
jQuery实例—选项卡的简单实现(js源码和jQuery)
2016/06/14 Javascript
jQuery实现鼠标选中文字后弹出提示窗口效果【附demo源码】
2016/09/05 Javascript
js实现点击每个li节点,都弹出其文本值及修改
2016/12/15 Javascript
AugularJS从入门到实践(必看篇)
2017/07/10 Javascript
VueJs 搭建Axios接口请求工具
2017/11/20 Javascript
微信小程序自定义带价格显示日历效果
2018/12/29 Javascript
node-red File读取好保存实例讲解
2019/09/11 Javascript
javascript canvas实现简易时钟例子
2020/09/05 Javascript
Vant Weapp组件踩坑:picker的初始赋值解决
2020/11/12 Javascript
在 Django/Flask 开发服务器上使用 HTTPS
2014/07/03 Python
Python的网络编程库Gevent的安装及使用技巧
2016/06/24 Python
深入浅析Python中join 和 split详解(推荐)
2016/06/30 Python
django 创建过滤器的实例详解
2017/08/14 Python
如何优雅地改进Django中的模板碎片缓存详解
2018/07/04 Python
python实现括号匹配的思路详解
2018/08/23 Python
django echarts饼图数据动态加载的实例
2019/08/12 Python
pytorch中的inference使用实例
2020/02/20 Python
Lee牛仔裤澳大利亚官网:美国著名牛仔裤品牌
2017/09/02 全球购物
英国第一的市场和亚马逊替代品:OnBuy
2019/03/16 全球购物
重写子类方法时,抛出异常的书写注意事项
2015/10/17 面试题
聊城大学毕业生自荐书
2014/02/01 职场文书
餐饮投资计划书
2014/04/25 职场文书
《三亚落日》教学反思
2014/04/26 职场文书
月度优秀员工获奖感言
2014/08/16 职场文书
售房委托书
2014/08/30 职场文书
高考要来啦!用Python爬取历年高考数据并分析
2021/06/03 Python
HTML5 语义化标签(移动端必备)
2021/08/23 HTML / CSS