vs中四点画矩形的算法_实战基于图割算法的木材表面缺陷图像分析

64abebfc716d770f828835b637295003.png

鉴于图割方法的明显优势,白雪冰及其团队采用Graph Cuts算法和Grab Cut算法分别对木材表面的单目标和多目标缺陷图像进行分割试验,以总结传统图割方法的不足和改进算法的优点。

针对传统Graph Cuts算法只能针对灰度图像进行分割、运行时参数的选择比较复杂,并且存在该算法效率和精度较低的缺陷,采用这两种方法分别对3种木材表面缺陷活节、虫眼和死节图像进行分割实验。为了验证Grab Cuts方法的适用性,用含有多个缺陷目标的木质板材图像做了图像分割验证。

结果表明:缺陷图像的目标和背景的种子点选取直接影响Graph Cuts算法的分割结果,Graph Cuts算法的计算效率较低,分割时间较长,对相邻像素间的区分度较差,分割结果不理想。改进后的Grab Cut算法是迭代的Graph Cuts,该方法虽然在图像分割前也需要人工画定初始化矩形框,但操作相对简单,分割结果能够得到完整的闭合缺陷区域边界,且不受木材表面缺陷的类型、数量、尺寸和缺陷形状的影响,分割效果好,分割速度快,抗噪性强,对灰度图像和彩色图像都可使用。

图割算法


1.1 Graph Cuts 算法的原理

图割(Graph Cuts)交互式图像分割算法是一种基于图论的组合最优化方法,其基础是最大流算法,将图像分割问题转化成能量函数的最小化问题,通过最小化能量函数,从而实现图像的最优分割。首先,建立能量函数:

            E(L) = R(L) + λB(L)    (1)

式中:R(L)是区域项,表示区域属性;B(L)是边界项,表示边界属性;λ 为平衡因子,当λ 较小时,边界项可忽略,当λ 较大时,图像的所有点被赋予相同标记。

设P={p1,p22,…,pN2 } 是像素集合,L={0,1}是像素标记集合,0表示背景,1表示目标;像素的标记可以表示为从PL的映射, 记作fp={fp| fp ∈}。

因此,式(1)中的区域项表示为R(f)=Rp(fp ),p ∈ P,用Rp(fp) 来进行判定像素p分配给某种标记的可能性。通常对能量函数中的区域项取概率的负对数,且将预定义的种子点作为目标和背景的采样,以此估计目标和背景的灰度直方图分布,对于目标/背景的二值分割,区域项可表示为:

91038f405643ab04a4bf186255f2be3e.png

式(2)代表了像素p分配给目标区域的可能性,式(3)代表像素p分配给背景区域的可能性,随着可能性的增大, Rp(•) 的值会减小,从而可通过最小化能量函数来实现对图像的准确分割。式(1)的边界项可表示为:

67afe43c8f37e257ed7731b17ac1ee19.png

式中: pq为相邻像素,边界项体现图像边界像素值的不连续性; N为4邻域或8邻域系统。通过变分模型可以将式(4)写为:

7ff5408b0c8888c38ad3cd24a3b71307.png

其中, T(fp ,fq ) 为指标函数,满足 :

7a23c08a462a21c8180f3abadeda1d1b.png

B p,q > 为对像素p 、q不连续性的惩罚值:

36e30ecc13b9416ed074a6aa1e676a0f.png

式中:Ip 、Iq为像素pq的灰度值; dist(p,q)是pq的距离; δ为图像噪声。pq越相近,则B p,q >越大;若pq相差较大,则B p,q >趋近于0 。当B p,q >的值较小时,两个像素会更易于分给不同的区域,这时图像分割得到最小的能量值。

Graph Cuts算法源于图论,通过最小化能量函数实现图像分割 。首先要对(1)的能量函数公式来构造网络图,把表示带有非负边权的无向图G= (V,E)作为图像,其中V为顶点集,与其相对应图像的边集为像素点集P

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++语言矩形 "_AFXDLL" "E:\E03教学\2011下半年\图形学\计算机图形学基础教程(Visual C++版)\第五章\案例9-二维基本几何变换算法\Test.rc"" Creating temporary file "C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSP8A.tmp" with contents [ /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /Fp"Debug/Test.pch" /Yu"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c "E:\E03教学\2011下半年\图形学\计算机图形学基础教程(Visual C++版)\第五章\案例9-二维基本几何变换算法\MainFrm.cpp" "E:\E03教学\2011下半年\图形学\计算机图形学基础教程(Visual C++版)\第五章\案例9-二维基本几何变换算法\Picdlg.cpp" "E:\E03教学\2011下半年\图形学\计算机图形学基础教程(Visual C++版)\第五章\案例9-二维基本几何变换算法\Test.cpp" "E:\E03教学\2011下半年\图形学\计算机图形学基础教程(Visual C++版)\第五章\案例9-二维基本几何变换算法\TestDoc.cpp" "E:\E03教学\2011下半年\图形学\计算机图形学基础教程(Visual C++版)\第五章\案例9-二维基本几何变换算法\TestView.cpp" ] Creating command line "cl.exe @C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSP8A.tmp" Creating temporary file "C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSP8B.tmp" with contents [ /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /Fp"Debug/Test.pch" /Yc"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c "E:\E03教学\2011下半年\图形学\计算机图形学基础教程(Visual C++版)\第五章\案例9-二维基本几何变换算法\StdAfx.cpp" ] Creating command line "cl.exe @C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSP8B.tmp" Creating temporary file "C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSP8C.tmp" with contents [ /nologo /subsystem:windows /incremental:yes /pdb:"Debug/Test.pdb" /debug /machine:I386 /out:"Debug/Test.exe" /pdbtype:sept ".\Debug\MainFrm.obj" ".\Debug\Picdlg.obj" ".\Debug\StdAfx.obj" ".\Debug\Test.obj" ".\Debug\TestDoc.obj" ".\Debug\TestView.obj" ".\Debug\Test.res" ] Creating command line "link.exe @C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSP8C.tmp" <h3>Output Window</h3> Compiling resources... Compiling... StdAfx.cpp Compiling... MainFrm.cpp Picdlg.cpp Test.cpp TestDoc.cpp TestView.cpp Generating Code... Linking...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值