• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Python简单实现区域生长方式

python 搞代码 4年前 (2022-01-07) 40次浏览 已收录 0个评论

今天小编就为大家分享一篇Python简单实现区域生长方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

区域生长是一种串行区域分割的图像分割方法。区域生长是指从某个像素出发,按照一定的准则,逐步加入邻近像素,当满足一定的条件时,区域生长终止。区域生长的好坏决定于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来源gaodaima#com搞(代@码网 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 = height or tmpY >= weight: continue grayDiff = getGrayDiff(img,currentPoint,Point(tmpX,tmpY)) if grayDiff <thresh and seedmark[tmpx,tmpy]== 0: label seedlist.append(point(tmpx,tmpy)) return seedmark img=cv2.imread('lean.png-600',0) seeds=[Point(10,10),Point(82,150),Point(20,300)] binaryimg=regionGrow(img,seeds,10) cv2.imshow(' ',binaryimg) cv2.waitkey(0) 

以上这篇Python简单实现区域生长方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持gaodaima搞代码网

以上就是Python简单实现区域生长方式的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Python简单实现区域生长方式

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址