关于初始种子自动选取的区域生长实例(python+opencv)


Posted in Python onJanuary 16, 2020

算法中,初始种子可自动选择(通过不同的划分可以得到不同的种子,可按照自己需要改进算法),图分别为原图(自己画了两笔为了分割成不同区域)、灰度图直方图、初始种子图、区域生长结果图。

另外,不管时初始种子选择还是区域生长,阈值选择很重要。

import cv2
import numpy as np
import matplotlib.pyplot as plt

#初始种子选择
def originalSeed(gray, th):
 ret, thresh = cv2.cv2.threshold(gray, th, 255, cv2.THRESH_BINARY)#二值图,种子区域(不同划分可获得不同种子)
 kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3,3))#3×3结构元

 thresh_copy = thresh.copy() #复制thresh_A到thresh_copy
 thresh_B = np.zeros(gray.shape, np.uint8) #thresh_B大小与A相同,像素值为0

 seeds = [ ] #为了记录种子坐标

 #循环,直到thresh_copy中的像素值全部为0
 while thresh_copy.any():

  Xa_copy, Ya_copy = np.where(thresh_copy > 0) #thresh_A_copy中值为255的像素的坐标
  thresh_B[Xa_copy[0], Ya_copy[0]] = 255 #选取第一个点,并将thresh_B中对应像素值改为255

  #连通分量算法,先对thresh_B进行膨胀,再和thresh执行and操作(取交集)
  for i in range(200):
   dilation_B = cv2.dilate(thresh_B, kernel, iterations=1)
   thresh_B = cv2.bitwise_and(thresh, dilation_B)

  #取thresh_B值为255的像素坐标,并将thresh_copy中对应坐标像素值变为0
  Xb, Yb = np.where(thresh_B > 0)
  thresh_copy[Xb, Yb] = 0

  #循环,在thresh_B中只有一个像素点时停止
  while str(thresh_B.tolist()).count("255") > 1:
   thresh_B = cv2.erode(thresh_B, kernel, iterations=1) #腐蚀操作

  X_seed, Y_seed = np.where(thresh_B > 0) #取处种子坐标
  if X_seed.size > 0 and Y_seed.size > 0:
   seeds.append((X_seed[0], Y_seed[0]))#将种子坐标写入seeds
  thresh_B[Xb, Yb] = 0 #将thresh_B像素值置零
 return seeds

#区域生长
def regionGrow(gray, seeds, thresh, p):
 seedMark = np.zeros(gray.shape)
 #八邻域
 if p == 8:
  connection = [(-1, -1), (-1, 0), (-1, 1), (0, 1), (1, 1), (1, 0), (1, -1), (0, -1)]
 elif p == 4:
  connection = [(-1, 0), (0, 1), (1, 0), (0, -1)]

 #seeds内无元素时候生长停止
 while len(seeds) != 0:
  #栈顶元素出栈
  pt = seeds.pop(0)
  for i in range(p):
   tmpX = pt[0] + connection[i][0]
   tmpY = pt[1] + connection[i][1]

   #检测边界点
   if tmpX < 0 or tmpY < 0 or tmpX >= gray.shape[0] or tmpY >= gray.shape[1]:
    continue

   if abs(int(gray[tmpX, tmpY]) - int(gray[pt])) < thresh and seedMark[tmpX, tmpY] == 0:
    seedMark[tmpX, tmpY] = 255
    seeds.append((tmpX, tmpY))
 return seedMark


path = "_rg.jpg"
img = cv2.imread(path)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#hist = cv2.calcHist([gray], [0], None, [256], [0,256])#直方图

seeds = originalSeed(gray, th=253)
seedMark = regionGrow(gray, seeds, thresh=3, p=8)

#plt.plot(hist)
#plt.xlim([0, 256])
#plt.show()
cv2.imshow("seedMark", seedMark)
cv2.waitKey(0)

关于初始种子自动选取的区域生长实例(python+opencv)

关于初始种子自动选取的区域生长实例(python+opencv)

关于初始种子自动选取的区域生长实例(python+opencv)

关于初始种子自动选取的区域生长实例(python+opencv)

以上这篇关于初始种子自动选取的区域生长实例(python+opencv)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用正则表达式检测密码强度源码分享
Jun 11 Python
python3生成随机数实例
Oct 20 Python
Python 爬虫模拟登陆知乎
Sep 23 Python
详解python的webrtc库实现语音端点检测
May 31 Python
django中的setting最佳配置小结
Nov 21 Python
python调用Delphi写的Dll代码示例
Dec 05 Python
python实现感知器
Dec 19 Python
Python制作exe文件简单流程
Jan 24 Python
对django views中 request, response的常用操作详解
Jul 17 Python
django xadmin中form_layout添加字段显示方式
Mar 30 Python
python 引用传递和值传递详解(实参,形参)
Jun 05 Python
如何以Winsows Service方式运行JupyterLab
Aug 30 Python
Python简单实现区域生长方式
Jan 16 #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
You might like
php5 non-thread-safe和thread-safe这两个版本的区别分析
2010/03/13 PHP
thinkphp的URL路由规则与配置实例
2014/11/26 PHP
php flush无效,IIS7下php实时输出的方法
2016/08/25 PHP
Mac系统下安装PHP Xdebug
2018/03/30 PHP
Yaf框架封装的MySQL数据库操作示例
2019/03/06 PHP
php函数式编程简单示例
2019/08/08 PHP
使用Modello编写JavaScript类
2006/12/22 Javascript
用js提交表单解决一个页面有多个提交按钮的问题
2014/09/01 Javascript
JavaScript常用的弹出广告及背投广告实现方法
2015/02/06 Javascript
Vuejs第一篇之入门教程详解(单向绑定、双向绑定、列表渲染、响应函数)
2016/09/09 Javascript
解决ajax不能访问本地文件问题(利用js跨域原理)
2017/01/24 Javascript
微信小程序数据存储与取值详解
2018/01/30 Javascript
vue如何判断dom的class
2018/04/26 Javascript
Angular路由ui-router配置详解
2018/08/01 Javascript
微信小程序点击保存图片到本机功能
2019/12/13 Javascript
js实现图片实时时钟
2020/01/15 Javascript
微信小程序自定义弹出层效果
2020/05/26 Javascript
Python 字符串操作实现代码(截取/替换/查找/分割)
2013/06/08 Python
Python操作列表的常用方法分享
2014/02/13 Python
python动态视频下载器的实现方法
2019/09/16 Python
python可视化实现KNN算法
2019/10/16 Python
基于opencv实现简单画板功能
2020/08/02 Python
Django通过设置CORS解决跨域问题
2020/11/26 Python
conda安装tensorflow和conda常用命令小结
2021/02/20 Python
python单例模式的应用场景实例讲解
2021/02/24 Python
利用html5 file api读取本地文件示例(如图片、PDF等)
2018/03/07 HTML / CSS
美国男士西装打折店:Jos. A. Bank
2017/11/13 全球购物
澳大利亚便宜的家庭购物网站:CrazySales
2018/02/06 全球购物
英国剑桥包中文官网:The Cambridge Satchel Company中国
2018/11/06 全球购物
小学教研工作制度
2014/01/15 职场文书
计算机求职自荐信范文
2014/04/19 职场文书
重大事项社会稳定风险评估方案
2014/06/15 职场文书
学校运动会广播稿100条
2014/09/14 职场文书
教师群众路线剖析材料
2014/09/29 职场文书
2016年第32个教师节红领巾广播稿
2015/12/18 职场文书
2016初一新生军训心得体会
2016/01/11 职场文书