当前位置: 首页 > news >正文

绵阳网站改版整站外包优化公司

绵阳网站改版,整站外包优化公司,施工企业资质审查系统,语言做网站介绍 GrabCut 算法是一种用于图像分割的交互式前景提取技术,它结合了图割(Graph Cut)方法和迭代优化过程。该算法最初由 Rother, Kolmogorov 和 Blake 在 2004 年提出,并因其高效性和准确性而被广泛应用于计算机视觉领域。OpenCV…

介绍

GrabCut 算法是一种用于图像分割的交互式前景提取技术,它结合了图割(Graph Cut)方法和迭代优化过程。该算法最初由 Rother, Kolmogorov 和 Blake 在 2004 年提出,并因其高效性和准确性而被广泛应用于计算机视觉领域。OpenCV 提供了 cv2.grabCut() 函数来实现这一算法,使得开发者可以方便地在应用程序中使用。

GrabCut 算法的基本原理

  1. 初始化:用户通过绘制矩形或自由手绘的方式标记出大致的前景区域(即对象所在的位置),同时还可以选择性地标记背景区域。
  2. 构建图形模型:基于用户的输入,算法会为每个像素创建一个节点,并且在相邻像素之间建立边。这些边的权重反映了像素间的相似度,通常基于颜色信息。
  3. 概率分布估计:对于已知的前景和背景区域,分别拟合高斯混合模型(GMMs, Gaussian Mixture Models),用以描述其颜色分布特性。
  4. 能量函数最小化:定义一个能量函数,其中包含数据项(反映像素与各自GMM之间的匹配程度)和平滑项(鼓励相邻像素具有相同的标签)。然后利用图割算法找到使能量函数最小化的解决方案。
  5. 迭代改进:根据前一次迭代的结果更新GMM参数,并重复上述步骤直至收敛或达到预定次数。

 

理论

        GrabCut 算法由英国剑桥微软研究院 Carsten Rother,Vladimir Kolmogorov和Andrew Blake发明,并在他们的论文“GrabCut”:使用迭代图切割中提出。该算法需要最少的人工交互做前景提取,被称为 GrabCut。

        从用户角度来看,该算法是如何工作的呢?最初用户在前景区域周围绘制一个矩形(该矩形需要完全框住所有的前景区域) 。然后算法对其进行迭代分割,得到最佳结果。但在某些情况下,分割的不是那么理想,比如说,它可能把一些前景区域标成了背景,或者反过来。如果发生了这样的情况,用户需要进行仔细的修正。只要在有错误结果的地方“划一下”就行了。“划一下”基本的意思是说,这个区域应该是前景,你标记它为背景,在下一次迭代中更正它。"* 或者如果区域是背景,也如此类推。然后再下一次迭代中,你就会得到更好的结果。

        见下图。第一名球员和足球被包围在一个蓝色矩形中。然后进行一些具有白色笔划(表示前景)和黑色笔划(表示背景)的最终修饰。我们得到了一个很好的结果。

grabcut_output1.jpg

那背景会发生什么?

  • 用户输入矩形。这个矩形之外的所有东西都将被视为确定的背景(这就是之前提到的矩形应该包括所有对象的原因)。矩形内的一切都是未知的。类似地,任何指定前景和背景的用户输入都被视为硬标签,这意味着它们不会在过程中发生变化。
  • 计算机根据我们提供的数据进行初始标记。它标记前景和背景像素(或硬标记)
  • 现在使用高斯混合模型(GMM)来模拟前景和背景。
  • 根据我们提供的数据,GMM 学习并创建新的像素分布。也就是说,未知像素被标记为可能的前景或可能的背景,这取决于其在颜色统计方面与其他硬标记像素的关系(它就像聚类一样)。
  • 从该像素分布构建图形。图中的节点是像素。添加了另外两个节点,源节点和 Sink 节点。每个前景像素都连接到源节点,每个背景像素都连接到 Sink 节点。
  • 连接像素到源节点/端节点的边的权重由像素是前景/背景的概率来定义。像素之间的权重由边缘信息或像素相似性定义。如果像素颜色存在较大差异,则它们之间的边缘将获得较低的权重。
  • 然后使用 mincut 算法来分割图形。它将图形切割成两个分离源节点和汇聚节点,具有最小的成本函数。成本函数是被切割边缘的所有权重的总和。切割后,连接到 Source 节点的所有像素变为前景,连接到 Sink 节点的像素变为背景。
  • 该过程一直持续到分类收敛为止。

如下图所示(图片提供: "GrabCut" )

grabcut_scheme.jpg

演示

现在我们使用 OpenCV 进行抓取算法。 OpenCV 具有此功能, cv.grabCut() 。我们将首先看到它的参数:

  • img - 输入图像
  • mask - 这是一个掩膜图像,我们指定哪些区域是背景,前景或可能的背景/前景等。它由以下标志完成, **cv.GC_BGD , cv.GC_FGD , cv.GC_PR_BGD , cv.GC_PR_FGD**,或简单地将 0,1,2,3 传递给图像。
  • rect - 它是一个矩形的坐标,包括格式为(x,y,w,h)的前景对象
  • bdgModel , fgdModel - 这些是内部算法使用的数组。您只需创建两个大小为(n = 1.65)的 np.float64 类型零数组。
  • iterCount - 算法运行的迭代次数。
  • 模式 - 它应该是 **cv.GC_INIT_WITH_RECT**或 **cv.GC_INIT_WITH_MASK**或合并后决定我们是否正在绘图矩形或最终修饰笔画。

        首先让我们看看矩形模式。我们加载图像,创建一个类似的蒙版图像。我们创建 fgdModel 和 bgdModel 。我们给出矩形参数。让算法运行 5 次迭代。模式应该是 _cv.GC_INIT_WITH_RECT_,因为我们使用的是矩形。然后运行抓取。它修改了蒙版图像。在新的掩模图像中,像素将标记有四个标记,表示背景/前景,如上所述。因此,我们修改掩模,使得所有 0 像素和 2 像素都被置为 0(即背景),并且所有 1 像素和 3 像素被置为 1(即前景像素)。现在我们的最后面具准备好了。只需将其与输入图像相乘即可得到分割后的图像。

import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('messi5.jpg')
mask = np.zeros(img.shape[:2],np.uint8)
bgdModel = np.zeros((1,65),np.float64)
fgdModel = np.zeros((1,65),np.float64)
rect = (50,50,450,290)
cv.grabCut(img,mask,rect,bgdModel,fgdModel,5,cv.GC_INIT_WITH_RECT)
mask2 = np.where((mask==2)|(mask==0),0,1).astype('uint8')
img = img*mask2[:,:,np.newaxis]
plt.imshow(img),plt.colorbar(),plt.show()

结果如下:

grabcut_rect.jpg

        我们将用 1 像素(确定的前景)给出一个精细的修饰。与此同时,有些地方已经出现了我们不想要的图片,还有一些标识。我们需要删除它们。在那里我们提供一些 0 像素的修饰(确定背景)。因此,我们如前所述地调整了结果掩膜。

        我实际上做的是,在绘画应用程序中打开了输入图像,并在图像中添加了另一层。在画中使用画笔工具,我在这个新图层上标记了不需要的白色背景(如徽标,地面等)以及黑色的前景(头发,鞋子,球等)。然后用灰色填充剩余的背景。然后在 OpenCV 中加载该掩模图像,编辑我们在新添加的掩模图像中使用相应值的原始掩模图像。查看以下代码:


newmask = cv.imread('newmask.png',0)
mask[newmask == 0] = 0
mask[newmask == 255] = 1
mask, bgdModel, fgdModel = cv.grabCut(img,mask,None,bgdModel,fgdModel,5,cv.GC_INIT_WITH_MASK)
mask = np.where((mask==2)|(mask==0),0,1).astype('uint8')
img = img*mask[:,:,np.newaxis]
plt.imshow(img),plt.colorbar(),plt.show()

看下面的结果:

grabcut_mask.jpg

就是这样了。这里不是在 rect 模式下初始化,而是直接进入掩膜模式。只需用 2 像素或 3 像素(可能的背景/前景)标记蒙版图像中的矩形区域。然后像我们在第二个例子中那样用 1 像素标记我们的 sure_foreground。然后直接应用具有掩膜模式的 grabCut 函数。

http://www.ritt.cn/news/8288.html

相关文章:

  • 单页面企业网站最近发生的重大新闻
  • 麓谷做网站的公司seo整站排名
  • 深圳商城网站制作公司网络营销渠道类型有哪些
  • 设计师作品集网站搜狐财经峰会直播
  • 手机软件开发和网站开发最新小组排名
  • 做本地网站怎么挣钱google搜索排名优化
  • 响应式网站广州网站建设合肥网络公司
  • 网站建设 seo商情网竞价如何屏蔽恶意点击
  • 如何才能找到靠谱的网站建设公司网络营销带来的效果
  • 设计电子商务网站方式苏州市网站
  • 如何做电视剧的短视频网站如何让别人在百度上搜到自己公司
  • 越秀区做网站怎么网络推广
  • 专业建站公司报价单新网站百度收录要几天
  • 怎么做内网网站seo难不难
  • 预约做家庭清洁的网站20条优化措施
  • 网站设计案例百度认证证书
  • 昆明做网站做的好的公司有哪些软件外包公司排行
  • 小店网站怎么做荥阳网站优化公司
  • 免费的html代码模板广州网站优化价格
  • 前端课程网站站长工具seo综合查询分析
  • 谷歌云可以做网站吗福州seo技术培训
  • 海外独立站建站厦门关键词排名seo
  • 唐山网站建设推广app接单网
  • 中宁网站建设站长之家ip地址查询
  • 企业内部网页设计360优化大师
  • 深圳 网站制作百度推广营销怎么做
  • 怎么获取网站数据做统计数据营销策划有限公司经营范围
  • 新时代文明实践站网址去哪里找需要推广的app
  • 资溪做面包招聘的网站百度如何搜索网址
  • 网站搜索排名优化国家免费技能培训