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中os模块详解
Oct 14 Python
django使用图片延时加载引起后台404错误
Apr 18 Python
python 编码规范整理
May 05 Python
PyTorch搭建一维线性回归模型(二)
May 22 Python
Python创建或生成列表的操作方法
Jun 19 Python
Python实现报警信息实时发送至邮箱功能(实例代码)
Nov 11 Python
Python imutils 填充图片周边为黑色的实现
Jan 19 Python
如何在Django中使用聚合的实现示例
Mar 23 Python
django模板获取list中指定索引的值方式
May 14 Python
Python fileinput模块如何逐行读取多个文件
Oct 05 Python
pytorch finetuning 自己的图片进行训练操作
Jun 05 Python
Python办公自动化之教你如何用Python将任意文件转为PDF格式
Jun 28 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 文章调用类代码
2011/08/11 PHP
php 多文件上传的实现实例
2016/10/23 PHP
php json_encode与json_decode详解及实例
2016/12/13 PHP
新页面打开实际尺寸的图片
2006/08/25 Javascript
js形成页面的一种遮罩效果实例代码
2014/01/04 Javascript
利用jQuery及AJAX技术定时更新GridView的某一列数据
2015/12/04 Javascript
全面解析Bootstrap布局组件应用
2016/02/22 Javascript
BootStrap响应式导航条实例介绍
2016/05/06 Javascript
JavaScript中对JSON对象的基本操作示例
2016/05/21 Javascript
Angular 页面跳转时传参问题
2016/08/01 Javascript
jquery实现限制textarea输入字数的方法
2017/09/06 jQuery
小程序实现选择题选择效果
2018/11/04 Javascript
单线程JavaScript实现异步过程详解
2020/05/19 Javascript
[02:27]2018DOTA2亚洲邀请赛趣味视频之钓鱼大赛 谁是垂钓冠军?
2018/04/05 DOTA
解决Python2.7读写文件中的中文乱码问题
2018/04/12 Python
django 修改server端口号的方法
2018/05/14 Python
解决python3捕获cx_oracle抛出的异常错误问题
2018/10/18 Python
新手学python应该下哪个版本
2020/06/11 Python
python 解决pycharm运行py文件只有unittest选项的问题
2020/09/01 Python
pycharm使用技巧之自动调整代码格式总结
2020/11/04 Python
python实现登录与注册系统
2020/11/30 Python
Python常用断言函数实例汇总
2020/11/30 Python
加拿大消费电子和手机购物网站:The Source
2017/01/28 全球购物
全世界最美丽的四星和五星级酒店预订:Prestigia.com
2017/11/15 全球购物
英国卫浴商店:Ergonomic Design
2019/09/22 全球购物
会计毕业生求职简历的自我评价
2013/10/20 职场文书
设计部经理的岗位职责
2013/11/16 职场文书
初三物理教学反思
2014/01/21 职场文书
大学生2014全国两会学习心得体会
2014/03/10 职场文书
标准单位租车协议书
2014/09/23 职场文书
2014年酒店年度工作总结
2014/12/10 职场文书
学习保证书
2015/01/17 职场文书
Flask搭建一个API服务器的步骤
2021/05/28 Python
详解Golang如何优雅的终止一个服务
2022/03/21 Golang
Android中的Launch Mode详情
2022/06/05 Java/Android
python pandas 解析(读取、写入)CSV 文件的操作方法
2022/12/24 Python