图像分割II

区域增长算法

目标

  1. 掌握区域生长法的基本思想
  2. 掌握图像分裂合并分割的基本思想及步骤

区域生长法分割

大津算法的局限性:噪声比较严重的图片、分割目标颜色渐变的情况,分割效果差。
区域生长:从种子点开始,按照一定准则(如相邻像素灰度相似性)向周围扩散,将邻域相似像素加入区域中。
按照扩散顺序,分为广度优先搜索(优先比较原像素所有周边像素)和深度优先搜索(比较原像素某一特定方向的像素)。

区域生长实现步骤:

  1. 对图像顺序扫描。找到第1个还没有归属的像素,设像素为(x0,y0x_0,y_0x0,y0);
  2. 以(x0,y0x_0,y_0x0,y0)为中心,考虑(x0,y0x_0,y_0x0,y0)的8邻域像素(x,y)(x,y)(x,y),如果(x,y)(x,y)(x,y)满足生长准则,将(x,y)(x,y)(x,y)与(x0,y0x_0,y_0x0,y0)合并,同时将(x,y)(x,y)(x,y)压入堆栈;
  3. 从堆栈中取出一个像素,把它当作(x0,y0)(x_0,y_0)(x0,y0)返回到步骤2;
  4. 当堆栈为空时,返回步骤1;
  5. 重复步骤1-4直到图像中的每个点都有归属时,生长结束。

区域分裂合并

图像分裂:分裂合并可采用基于四叉树的数据表示
对于像素方差不大的区域不用分裂,像素方差大的区域进行分裂。将相邻像素的区域进行合并。
实现步骤:

  1. 对区域分裂合并法无需预先指定种子点,它按某种一致性准则分裂或合并区域
  2. 可以先进行分裂运算,然后再进行合并运算;也可以分裂和合并运算同时进行,经过连续的分裂和合并,最后得到图像的精确分割效果。
  3. 分裂合并法对分割复杂的场景图像比较有效。

总结

  1. 区域生长法基于相邻像素间的相似性,由种子像素逐步生长得到
  2. 分裂-合并基于图像块内在的相似性,通过不断分裂得到区域外边界,通过合并将不同块连接

分水岭算法

目标

  1. 掌握分水岭算法的基本思想
  2. 了解分水岭算法的运行步骤

分水岭算法分割

  • 如果以图像位置(x,y)(x,y)(x,y)为坐标,则图像(x,y)(x,y)(x,y)可以看作是地形俯视图,其中“山峰的高度”与图像中的灰度值对应。
  • 假设在每个“盆地”的最低点开始打洞让水漫上来,并且让水以均匀速率上升,那么,当不同“盆地”的水开始汇聚时,能通过修建一个“水坝”==挡住这种聚合的弧线就是图像的分界线。
    在这里插入图片描述
    在漫水过程中,存在三种类型的点:
  • 局部极小值点,该点对应一个盆地的最低点,当我们在盆地滴一滴水的时候,由于重力作用,水最终会汇聚到该点。注意:可能存在一个最小值面,该平面内都是最小值点。
  • 盆地的其它位置点,该位置滴的水滴会汇聚带局部最小点。
  • 盆地的边缘点,是该盆地和其它盆地交接点,在该点滴一滴水,会等概率的流向任何一个盆地。

符号
T[n]T[n]T[n]:满足灰度<n<n<n的所有图像点的集合;
C(Mi)C(M_i)C(Mi):与区域最小值集合MiM_iMi相联系的盆地图像点集合
C[n]C[n]C[n]:在第n阶灰度计算的图像区域集合,C[n]=∪i=1RCn(Mi)C[n] = \cup_{i=1}^RC_n(M_i)C[n]=i=1RCn(Mi)
目标:迭代计算C[n]C[n]C[n],进一步获得区域分割线(水坝)
步骤:

  1. 初始化:从最低水面(最低灰度对应的点集)开始,对应C[min+1]=T[min+1]C[min+1]= T[min+1]C[min+1]=T[min+1]
  2. 迭代计算:由C[n−1]C[n-1]C[n1]计算C[n]C[n]C[n]
    QQQ表示T[n]T[n]T[n]中连通分量的点集。对每个分量q∈Qq\in QqQ,如下处理:
    (1)q∩C[n−1]=∅q\cap C[n-1]=\varnothingqC[n1]=:发现新的区域,连通分量q并入C[n]C[n]C[n]
    (2)q∩C[n−1]q\cap C[n-1]qC[n1]:填充未溢出(到别的盆地);连通分量q并入C[n]C[n]C[n]
    (3)q∩C[n−1]q\cap C[n-1]qC[n1]包含C[n−1]C[n-1]C[n1]中的多个分量:填充溢出;在q内构筑水坝,方法同前

分水岭算法的过分割问题

在这里插入图片描述
由于噪声或者其它干扰因素的存在,使用分水岭算法常常存在过度分割的现象,这是因为很多很小的局部极值点的存在。
在初始时给marker,改善过分割问题
在这里插入图片描述
为了解决过分割的问题,可以使用基于标记(mark)图像的分水岭算法,就是指定mark图像(图中红色区域),在这个区域的洪水淹没过程中,水平面都是定义的marker开始的,这样可以避免一些很小的噪声极值区域的分割。
使用marker改善分割结果:
在这里插入图片描述

总结:

分水岭算法基本思想来源于由低到高"漫水"和“修建水坝”。分割过程通过漫水和膨胀,按照不同灰度级迭代进行。

图像分割实战演练(II)

目标:

  1. 使用OpenCV实现区域漫水填充
  2. 使用OpenCV实现分水岭分割

相关函数

  • 漫水填充(区域生长法)
retval, image, mask, rect = cv2.floodFill(image, mask, seedPoint, newVal[, loDiff[, upDiff[, flags]]])
#image:输入图像,可以是一通道或者是三通道。
#mask:操作掩膜。 单通道,8位,在长宽上都比原图像image多2个像素点。漫水填充不会填充掩膜区域的非0像素点,所以说掩膜是屏蔽了漫水填充的处理。如边缘检测算子的输出可以用来作为掩膜,这样可防止边缘区域不被填充。因为掩膜比原图像大,所以掩膜中的(x,y),对应的原图像的像素点为(x+1,y+1)。
#seedPoint:Point类型,漫水填充的种子点,即起始点。
#newVal:Scalar类型,被填充的像素点新的值
#rect:Rect*类型,有默认值0,可选的参数,设置函数将要重绘区域的最小边界矩形区域
#loDiff:Scalar类型,有默认值Scalar(),表示当前的观察点像素值与其相邻区域像素值或待加入该区域的像素之间的亮度或颜色之间负差(lower brightness/color difference)的最大值。
#upDiff:Scalar类型,有默认值Scalar(),表示当前的观察点像素值与其相邻区域像素值或待加入该区域的像素之间的亮度或颜色之间正差(lower brightness/color difference)的最大值。
#flags:int类型,操作位标识符,包括三个部分,控制算法连通性等:
#	1.低八位(0-7):控制算法的连通性,设置为4:填充算法只考虑当前像素点垂直和水平方向;设置为8:除垂直和水平方向,还会考虑对角线的相邻点
#	2.高八位(16-23):可以为0或者下列两种标识符组合。#		FLOODFILL_FIXED_RANGE:考虑种子像素与种子像素之间的差,否则考虑当前像素与与邻近像素的差。#		FLOODFILL_MASK_ONLY :如果设置这个标识符,函数不会填充或改变原始图像(也就是忽略的newVal),而是去填充掩膜图像。#	3.中间八位:用于指定填充掩码图像的值,如果flags中间八位值为0,则掩码会用1填充
  • 分水岭法图像分割
makers = cv2.watershed(image, markers)
#image:三联通彩色图像
#markers:记号点(种子点),每一个记号需要有不同的编号

解决思路:

  1. 图像采集(取到图像)
  2. 图像预处理
  3. 使用距离变换或计算图像梯度,得到分水岭处理图像
  4. 应用分水岭算法分割
  5. 图像特征描述及目标分析
  6. 得到最终结果
import cv2
import  numpy as npimg = cv2.imread('C:/python/img/water_coins.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
# noise removal
kernel = np.ones((3, 3),np.uint8)
opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations= 2)#sure background area
sure_bg = cv2.dilate(opening, kernel, iterations=3)cv2.imshow("threshold",thresh) #阈值化图像
cv2.imshow("Opened image",opening) #开运算图像
cv2.imshow("Dilated image",sure_bg) #膨胀后图像cv2.waitKey()
cv2.destroyAllWindows()
  1. 读入图像,转换为灰度图像;
  2. 使用大津算法二值化;
  3. 使用形态学开运算二次去掉小的白色噪点,使用膨胀运算确保背景与原图一致
#Finding sure foreground area
dist_transform = cv2.distanceTransform(opening, cv2.DIST_L2, 5)
ret, sure_bg = cv2.threshold(dist_transform, 0.7*dist_transform.max(), 255, 0)#Finding unkown region
sure_fg = np.uint8(sure_fg)
unkown = cv2.subtract(sure_bg, sure_fg)cv2.imshow("dist_ret", dist_transform)
cv2.imshow("threshold", sure_fg)
cv2.imshow("unkown regions", unkown)cv2.waitKey()
cv2.destroyAllWindows()
  1. 使用距离变换(distance Transform)计算每个硬币中心。采用腐蚀变换可以实现类似效果
  2. 使用阈值化得到分离的硬币
  3. 通过相减得到相连接硬币的不确定区域(有待分割计算)
#Marker labelling
ret, markers = cv2.connectedComponents(sure_fg)#Add one to all labels so that sure background is noe 0,but 1
markers = markers + 1
#Now, mark the region of unknown with zero
markers[unkown==255]=0markers = cv2.watershed(img, markers)
img[markers == -1] = [255, 0, 0]markers = np.uint8(markers)cv2.imshow('result image', img)
cv2.imshow('result', markers)cv2.waitKey()
cv2.destroyAllWindows()
  1. 使用connectedComponents给每个连通区域做标记,标记从0开始。0为背景
  2. 标记值+1,让标记从1开始
  3. 不确定区域标记置为0,便于下一步分割
  4. 使用watershed做分水岭标记
  5. 分割线(水坝)用蓝色标记

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/492504.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

205页PPT,看5G+AI引领的下一个时代!

来源&#xff1a;国泰君安证券、暴点摘要&#xff1a;为大家分享一份国泰君安证券关于“电子行业2019年春季投资策略&#xff0c;5GAI系列研究”报告&#xff0c;详看哪些产业将迎来黄金期。预计5G换机高峰期将出现在2020~2023年&#xff0c;届时手机出货量将恢复增长。同时&am…

图像表示与描述

图像表示与描述 目标 掌握常见的基于轮廓特征的描述掌握常见的图像区域特征描述 对目标特征的测量是要利用分割结果进一步从图像中获取有用信息&#xff0c;为达到这个目的需要解决两个关键问题&#xff1a; 选用什么特征来描述目标(定性)如何精确测量这些特征(定量) 常见…

RISV-V未来将面临怎样的挑战?

来源&#xff1a;MoneyDJ、半导体行业观察继大陆的RISC-V联盟成立之后&#xff0c;台湾RISC-V联盟也在今年正式成立&#xff0c;这也让RISC-V的议题热度逐渐加温&#xff0c;事实上这也是许多人看好能够足以与ARM竞争的架构&#xff0c;加上目前许多国际大厂陆续采用RISC-V架构…

使用matlab程序,基于标准卡标定感压纸的压力分布

任务说明 使用富士感压纸(压力测试纸)测量压力&#xff0c;感压纸受压时会显现颜色&#xff0c;根据峰值应力呈现不同的颜色深度。感压制提供了标准比色卡&#xff0c;给出不同颜色深度对应的压力值。 要求使用matlab&#xff0c;对照标准比色卡&#xff0c;对实验中使用的比…

斯坦福大学陈丹琦等人解读机器阅读最新进展:超越局部模式匹配

来源&#xff1a;AI 科技评论不久前&#xff0c;斯坦福大学的计算机科学博士陈丹琦的一篇长达 156 页的毕业论文《Neural Reading Comprehension and Beyond》成为「爆款文章」&#xff0c;一时引起了不小轰动。而本文是她与同样师从 Christopher Manning 的同学 Peng Qi 一起发…

智能网联产业链深度报告

来源&#xff1a;智车科技未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能&#xff0c;互联网和脑科学交叉研究机构。未来智能实验室的主要工作包括&#xff1a;建立AI智能系统智商评测体系&#xff0c;开展世界人工智能智商评测&#xff1b;开展互联网&#…

史上最全的物理学科普(值得收藏)

来源&#xff1a;中科院物理所&#xff08;ID&#xff1a;cas-iop&#xff09;本文素材主要摘录自加来道雄的《Hypersapce》和丘成桐的《The Shape of Inner Space》。作者希望凭籍本文&#xff0c;回顾一下两百年来的科学史&#xff0c;看看那些代表着人类最高心智的数学家、物…

量子通信是不是伪科学?潘建伟这样回应

来源&#xff1a;科技日报“墨子号”发射快三年了&#xff0c;到底有什么新发现&#xff1f;量子通信和公众有什么关联&#xff0c;到底是不是伪科学&#xff1f;10日&#xff0c;在全国政协十三届二次会议举行的记者会上&#xff0c;全国政协委员、中国科学技术大学常务副校长…

AI如何设计,才能人类利益最大化?

来源&#xff1a;国机智能机器人曾为现代互联网早期协议和架构设计做出贡献的Vint Cerf&#xff0c;用一个寓言来解释为什么在人工智能等新兴技术出现后&#xff0c;勇敢的领导力至关重要。想象一下&#xff0c;你住在一个被群山环绕的山谷底部的小社区里。在远处的山顶上有一块…

编译 | 5G时代的游戏世界:一年后的AR与VR将会发生的几个变化

来源&#xff1a;spectrum5G已不再是研发中的技术&#xff0c;它已经离我们非常的近&#xff0c;全球许多运营商都在都在部署这一新技术。那么我们可以从这个新一代无线系统中得到什么&#xff1f;不只是更好的智能手机服务。许多公司&#xff0c;比如德国电信&#xff0c;诺基…

《麻省理工科技评论》发布“21世纪迄今十大最糟科技”

来源&#xff1a;网络大数据必须承认&#xff0c;人类总会犯错&#xff0c;在科技的发展上也是一样。所以&#xff0c;当最新一期的《麻省理工科技评论》评出今天这份“ 2000-2019 年糟糕科技清单”时&#xff0c;你千万不要以为这是一件容易的事情。如果某项科技没有达到让人欣…

javascript Array对象

一&#xff0c;创建数组对象 JavaScript的数组支持了对任何数据类型的支持&#xff0c;并不会像java&#xff0c;C#那样指定了数组类型只能存储这种类型。 我们可以使用以下三种方法来创建JavaScript数组对象&#xff0c; 1&#xff0c;var arrnew Array(); 2 , var arrnew Arr…

67 亿美金搞个图,创建知识图谱的成本有多高你知道吗?

来源&#xff1a;算法与数学之美摘要&#xff1a;我们知道强大的深度模型需要很多计算力&#xff0c;那你知道创建一个知识图谱的成本到底是多少吗&#xff1f;德国 Mannheim 大学的研究者最近仔细估算了各种知识图谱每创建一条记录所需要的成本&#xff0c;他们表示对于大型知…

怎样修改MFC中应用程序标题的图标?

一、单文档中修改程序标题的图标 1. 切换到ResourceView视图&#xff0c;右键点击Icon&#xff0c;选择“import” ,导入图标(.ico)文件 2. 在CMainFrame中的OnCreate()函数中添加如下代码&#xff1a; //设置标题栏的图标 HICON m_hIcon AfxGetApp()->LoadIcon(IDI_ICON…

黄仁勋的“数据梦” 英伟达豪掷69亿美金虎口夺食

来源 &#xff1a; Bloomberg 编译&#xff1a;网易智能 晗冰3月12日消息&#xff0c;据国外媒体报道&#xff0c; 图形图像芯片制造商英伟达同意斥资69亿美元收购芯片制造商Mellanox&#xff0c;其欲通过此举大举进军不断增长的数据中心芯片市场。据悉&#xff0c;英伟达对Mel…

即使达到5级自动驾驶阶段,自动驾驶“卡车”也不可能完全“无人”

来源&#xff1a;IEEE编译&#xff1a;大数据文摘 李雷、周素云感谢Waymo和Uber等创业公司&#xff0c;让我们知道了无人驾驶汽车是怎么回事。这些汽车或卡车上配备了大量的传感器&#xff0c;并且依靠强大的计算能力使人们可以放心乘坐。愿景是美好的&#xff0c;但是却忽视了…

MFC中如何给对话框添加背景图片

定位到 void CXXXDlg::OnPaint()&#xff0c;在if()...else()中的else()下添加如下代码&#xff1a; else { //CDialog::OnPaint();//要禁止这个调用 CPaintDC dc(this); CRect rect; GetClientRect(&rect); CDC dcMem; dcMem.CreateCompatibleDC(&am…

孙正义万字访谈:AI是我现在唯一关注的事情,我是科技的绝对信徒

来源&#xff1a;腾讯科技科技变革丝毫没有减速&#xff0c;自动化就是科技的终极使命&#xff01;这是孙正义在最新采访中再次强调的理念。在接受CNBC超长采访中&#xff0c;软银创始人、千亿美元愿景基金掌舵者一再表示&#xff0c;AI能解决人类无法解决的问题&#xff0c;未…

Oracle 直方图理论

一.何为直方图 直方图是一种几何形图表&#xff0c;它是根据从生产过程中收集来的质量数据分布情况&#xff0c;画成以组距为底边、以频数为高度的一系列连接起来的直方型矩形图&#xff0c;如图所示 二.ORACLE 直方图 在Oracle中直方图是一种对数据分布情况进行描述的工具。它…

怎样把MySQL的编码方式改为utf8?

一、当我们安装好MySQL后&#xff0c;单击电脑开始&#xff0c;然后运行cmd&#xff0c;记得必须要用管理员的身份运行。然后输入net start mysql 前面操作如果忘记采用管理员身份运行的话&#xff0c;会出现系统访问错误。 二、修改MySQL的编码方式为utf8 1、找到默认MySQL的安…