关于初始种子自动选取的区域生长实例(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网络编程实例简析
Sep 26 Python
Python查找相似单词的方法
Mar 05 Python
在Python中移动目录结构的方法
Jan 31 Python
ubuntu环境下python虚拟环境的安装过程
Jan 07 Python
Python pymongo模块用法示例
Mar 31 Python
使用OpenCV实现仿射变换—旋转功能
Aug 29 Python
pytorch中nn.Conv1d的用法详解
Dec 31 Python
Python实现猜年龄游戏代码实例
Mar 25 Python
python实现简单学生信息管理系统
Apr 09 Python
利用python如何实现猫捉老鼠小游戏
Dec 04 Python
用python删除文件夹中的重复图片(图片去重)
May 12 Python
Python3.10的一些新特性原理分析
Sep 15 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
预告映像公开!第1章续篇剧场版动画《Princess Principal Crown Handler》4月10日上映!
2020/03/06 日漫
PHP出错界面
2006/10/09 PHP
不用GD库生成当前时间的PNG格式图象的程序
2006/10/09 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
2017/11/10 PHP
php 读写json文件及修改json的方法
2018/03/07 PHP
XRegExp 0.2: Now With Named Capture
2007/11/30 Javascript
定义select的边框颜色
2008/04/28 Javascript
js固定DIV高度,超出部分自动添加滚动条的简单方法
2013/07/10 Javascript
js实现汉字排序的方法
2015/07/23 Javascript
JS实现的简洁纵向滑动菜单(滑动门)效果
2015/10/19 Javascript
基于Jquery插件Uploadify实现实时显示进度条上传图片
2020/03/26 Javascript
jQuery获取table下某一行某一列的值实现代码
2017/04/07 jQuery
Mobile Web开发基础之四--处理手机设备的横竖屏问题
2017/08/11 Javascript
vue 本地服务不能被外部IP访问的完美解决方法
2018/10/29 Javascript
浅谈JavaScript_DOM学习篇_图片切换小案例
2019/03/19 Javascript
详解Node.js一行命令上传本地文件到服务器
2019/04/22 Javascript
js Math数学简单使用操作示例
2020/03/13 Javascript
python的id()函数解密过程
2012/12/25 Python
采用Psyco实现python执行速度提高到与编译语言一样的水平
2014/10/11 Python
使用PDB简单调试Python程序简明指南
2015/04/25 Python
教大家玩转Python字符串处理的七种技巧
2017/03/31 Python
python绘制多个曲线的折线图
2020/03/23 Python
python得到windows自启动列表的方法
2018/10/14 Python
python opencv实现图像边缘检测
2019/04/29 Python
详解pandas的外部数据导入与常用方法
2019/05/01 Python
python实现批量修改文件名
2020/03/23 Python
pandas创建DataFrame的7种方法小结
2020/06/14 Python
Django路由层URLconf作用及原理解析
2020/09/24 Python
谈谈python垃圾回收机制
2020/09/27 Python
英国家庭家具、照明和花园家具购物网站:Furniture123
2018/12/31 全球购物
英国运动服、设备及配件网站:DW Sports
2019/12/04 全球购物
军训考核自我鉴定
2014/02/13 职场文书
员工三分钟演讲稿
2014/08/19 职场文书
世界环境日活动总结
2015/02/11 职场文书
2015年售票员工作总结
2015/04/29 职场文书
2015年办税服务厅工作总结
2015/07/23 职场文书