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 23 Python
Python标准库defaultdict模块使用示例
Apr 28 Python
python文件操作相关知识点总结整理
Feb 22 Python
致Python初学者 Anaconda入门使用指南完整版
Apr 05 Python
Python File(文件) 方法整理
Feb 18 Python
Python OS模块实例详解
Apr 15 Python
详解Numpy中的数组拼接、合并操作(concatenate, append, stack, hstack, vstack, r_, c_等)
May 27 Python
python3 tkinter实现点击一个按钮跳出另一个窗口的方法
Jun 13 Python
Python处理mysql特殊字符的问题
Mar 02 Python
Selenium基于PIL实现拼接滚动截图
Apr 10 Python
Python dict的常用方法示例代码
Jun 23 Python
Python实现生活常识解答机器人
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
怎么在Windows系统中搭建php环境
2013/08/31 PHP
php中最简单的字符串匹配算法
2014/12/16 PHP
PHP基于Redis消息队列实现发布微博的方法
2017/05/03 PHP
PHP+AjaxForm异步带进度条上传文件实例代码
2017/08/14 PHP
PHP实现获取毫秒时间戳的方法【使用microtime()函数】
2019/03/01 PHP
laravel5.6 框架邮件队列database驱动简单demo示例
2020/01/26 PHP
详解new function(){}和function(){}() 区别分析
2008/03/22 Javascript
jQuery实现原理的模拟代码 -6 代码下载
2010/08/16 Javascript
html a标签-超链接中confirm方法使用介绍
2013/01/04 Javascript
JS图像无缝滚动脚本非常好用
2014/02/10 Javascript
利用函数的惰性载入提高javascript代码执行效率
2014/05/05 Javascript
javascript arguments使用示例
2014/12/16 Javascript
js的for in循环和java里foreach循环的区别分析
2015/01/28 Javascript
Jquery简单实现GridView行高亮的方法
2015/06/15 Javascript
JavaScript对象数组排序实例方法浅析
2016/06/15 Javascript
Angular.JS中指令ng-if的注意事项小结
2017/06/21 Javascript
基于bootstrap实现多个下拉框同时搜索功能
2017/07/19 Javascript
gulp安装以及打包合并的方法教程
2017/11/19 Javascript
Vue.extend 登录注册模态框的实现
2020/12/29 Vue.js
js面向对象封装级联下拉菜单列表的实现步骤
2021/02/08 Javascript
初学python数组的处理代码
2011/01/04 Python
python使用urllib2实现发送带cookie的请求
2015/04/28 Python
黑科技 Python脚本帮你找出微信上删除你好友的人
2016/01/07 Python
Python中的连接符(+、+=)示例详解
2017/01/13 Python
python使用Tkinter实现在线音乐播放器
2018/01/30 Python
python dataframe 输出结果整行显示的方法
2018/06/14 Python
Opencv+Python实现图像运动模糊和高斯模糊的示例
2019/04/11 Python
python获取栅格点和面值的实现
2020/03/10 Python
白宫黑市官网:White House Black Market
2016/11/17 全球购物
SmartBuyGlasses意大利:购买太阳镜、眼镜和隐形眼镜
2018/11/20 全球购物
马来西亚户外装备商店:PTT Outdoor
2019/07/13 全球购物
大学竞选班长演讲稿
2014/04/24 职场文书
中学生国旗下讲话稿
2014/04/26 职场文书
高中教师先进事迹材料
2014/08/22 职场文书
单位租房协议书样本
2014/10/30 职场文书
Python实现简单得递归下降Parser
2022/05/02 Python