精华内容
下载资源
问答
  • python版本的GrabCut前景分割和分水岭分割,同时也有深度估计
  • 运动前景分割

    千次阅读 2018-11-27 15:05:05
    运动前景分割在视频监控中有很大的应用,可以应用在超市、机场、广场等人流密集的场景,对于可疑对象侦查,可以物体发现有重大意义。最简单的运动前景分割的算法为帧对帧差分,通过两幅图像相减,固定不变的背景就剪...

    算法综述

    运动前景分割在视频监控中有很大的应用,可以应用在超市、机场、广场等人流密集的场景,对于可疑对象侦查,可以物体发现有重大意义。最简单的运动前景分割的算法为帧对帧差分,通过两幅图像相减,固定不变的背景就剪掉了,只剩下运动前景,这种算法的优点是算法复杂度低,缺点是,对于运动速度较慢的目标很难检测出来。由于在运动前景检测这一应用中,背景大多是固定不变的,因此提出了很多背景建模算法,通过某种数学模型描述每一帧图像中某一像素点在时间序列上满足的统计规律,当出现不符合这个统计规律的像素点认为是运动前景,常有的背景建模算法有单高斯模型、混合高斯模型,单高斯模型即认为每一个像素值在时间序列上满足高斯分布,这是符合实际情况的,单高斯模型可能不能完全描述这一个像素值的规律,比如背景中有摇曳的树枝等运动背景,此时可以考虑混合高斯模型。

    为了完成行人检测任务,使用了基于单高斯模型的检测。算法流程如下图,首先读入原始视频,读取一帧图像,更新每个像素的高斯模型,判断本帧像素是否符合高斯模型,设置检测阈值将图像二值化,此时可以较好地检测出行人,同时还会检测出很多干扰区域,使用开运算这种滤波方法可以很好地去除干扰区域,使用填充、膨胀运算、闭运算可以补充行人的内部空白和不连续区域,接下来找到所有的连通区域,并按连通区域的面积排序,找出相对最大连通区域面积来说较大的区域,认为这些连通区域为行人,使用Sobel算子进行边缘检测。

    单高斯模型

    高斯分布又叫正态分布,自然界的很多事物符合高斯分布。图像中背景基本固定,变化的只有行人,因此使用单高斯模型就可以较好的拟合像素值分布。高斯模型的概率密度函数为:p(x)=\frac{1}{\sqrt{2\pi}\sigma}e^{-(\frac{x-u}{\sigma})^2},其中x为当前的像素值,u\sigma分别为该坐标下像素的均值和标准差,理论上符合该模型的数据有99.7%的概率落在\left | u-3\sigma \right |范围内,因此可以利用此规律将异常点检测出来。

    程序实现

    %===============================================================
    % Tracking.m:行人检测
    % Environment:MATLAB R2017a
    % 实现方法:采用的算法为单高斯模型,将图像转换为灰度图,建立像素级的
    %   单高斯模型,判断每一帧的像素是否大概率符合模型,如果不符合,判断
    %   为行人,利用单高斯模型检测出行人,同时也有很多干扰区域,使用开运
    %   算、填充、闭运算等操作去除干扰区域,使用Sobel算子进行边缘检测。
    %===============================================================
    
    close all;
    clear all;
    clc;
    
    vidObj = VideoReader('level_2.mp4');
    vidHeight = vidObj.Height;
    vidWidth = vidObj.Width;
    
    M = zeros(vidHeight, vidWidth);
    V = zeros(vidHeight, vidWidth);
    
    %===================单高斯模型========================================
    i = 0;
    while hasFrame(vidObj)
        Fig = readFrame(vidObj);
        Fig = rgb2gray(Fig);
        Fig = double(Fig);
        M = (M * i + Fig) / (i + 1);
        i = i + 1;
        Ph{i} = Fig;
    end
    
    for j = 1 : i
        V = V + (Ph{i} - M) .^ 2;
    end
    
    V = sqrt(V / (i));
    
    vidObj = VideoReader('level_2.mp4');
    
    s = struct('cdata', zeros(vidHeight, vidWidth, 'double'), 'colormap', []);
    k = 1;
    j = 10;
    
    k = 50;
    ii = 0;
    
    writeObj = VideoWriter('P_data2.avi');
    open(writeObj)
    
    while hasFrame(vidObj)
        ii = ii + 1;
        Fig = readFrame(vidObj);
        FigReal = Fig;
        Fig = rgb2gray(Fig);
        Fig = double(Fig);
        
    %===================单高斯模型========================================
        M = (M * (k - 1) + Fig) / k;
        V = sqrt((V .^2  * (k - 2) + (Fig - M) .^ 2) / (k - 1));
        ind_B = find(Fig > M - 3 * V & Fig < M + 3 * V);
        ind_F = find(Fig < M - 2 * V | Fig > M + 2 * V);
        
        Fig(ind_F) = 1;
        Fig(find(Fig ~= 1)) = 0;
    %====================================================================
    
    %=================开运算、填充、闭运算=================================    
        se1 = strel('disk', 5, 6);
        se2 = strel('disk', 9, 6);
        ser = strel('rectangle', [7, 7]);
        bw2 = Fig;
        bw2 = imopen(bw2, se1);
        bw2 = imfill(bw2, 'holes');
        bw2 = imdilate(bw2, se1);
        bw2 = imclose(bw2, se2);
    %====================================================================
    
    %================寻找连通区域=====================================
        [B, L] = bwboundaries(bw2);
        stats = regionprops(L, 'Area', 'Centroid');
        Stat2Array = struct2array(stats);
        Stat2Array = reshape(Stat2Array, [3, length(Stat2Array) / 3]);
        tempArray = Stat2Array;
        BigestArea = max(Stat2Array(1, :));
    %===================================================================
    
    %==============边缘检测==============================================
        while ~ isempty(BigestArea)
            tempBigestArea = max(tempArray(1, :));
            if tempBigestArea(1) / BigestArea(1) < 0.5
                break
            end
            tempAreaIndex = find(Stat2Array(1, :) == tempBigestArea(1));
            tempArray(find(tempArray == tempBigestArea(1))) = 0;
            if ~ isempty(tempAreaIndex)
                boundary = B{tempAreaIndex(1)};
                plot(boundary(:, 2), boundary(:, 1), 'w', 'LineWidth', 2, ...
                    'Color', 'red');
                for kk = 1 : size(boundary, 1)
                    for kii = -1 : 1
                        for kjj = -1 : 1
                            if boundary(kk, 1) + kii < 1 | ...
                                    boundary(kk, 1) + kii > size(FigReal, 1) |...
                                    boundary(kk, 2) + kjj < 1 |...
                                    boundary(kk, 2) + kjj > size(FigReal, 2)
                                continue
                            end
                            FigReal(boundary(kk, 1) + kii, ...
                                boundary(kk, 2) + kjj, 1) = 0;
                            FigReal(boundary(kk, 1) + kii, ...
                                boundary(kk, 2) + kjj, 2) = 255;
                            FigReal(boundary(kk, 1) + kii, ...
                                boundary(kk, 2) + kjj, 3) = 0;
                        end
                    end
                end
            else
                break
            end
        end
    %======================================================================
    
        writeVideo(writeObj, FigReal(1: size(bw2, 1), 1: size(bw2, 2), :));
        
        k = k + 1;    
    end
    
    close(writeObj);
    

     

    展开全文
  • 基于三维光场的静态场景前景分割
  • matlab前景分割

    2017-07-10 12:13:00
    用最简单的差分法实现了一下前景分割。使用的mall数据集。 思路是这样的:首先设定一个队列的长度,若读取的图片张数少于队列长度则以当前读取到的图片做平均。否则则以队列中的图片做平均。 这样之后和当前图片做...

    用最简单的差分法实现了一下前景分割。使用的mall数据集。

    思路是这样的:首先设定一个队列的长度,若读取的图片张数少于队列长度则以当前读取到的图片做平均。否则则以队列中的图片做平均。

    这样之后和当前图片做差分,大于差分阈值的就是前景。

    %init
    close all ;
    path = './mall_dataset/frames/'; 
    numofImages = 30 ;
    image_cells = cell(numofImages,1) ;
    E = cell(numofImages,1) ;
    Em = cell(numofImages,1) ;
    
    %param
    Wh = 10 ;%人高
    Ww = 5 ;%人宽
    defualtLenOfList = 5 ;%前景差分时默认的队列长度
    dif_t = 60 ;%差分阈值
    
    %kenel
    gaussian_kenel = fspecial('gaussian',3,0.5) ;
    
    %program
    for i=1:numofImages
        temp = i ;
        prefix = 'seq_00' ;
        while temp < 1000
            prefix = strcat(prefix,'0') ;
            temp = temp*10 ;
        end
        prefix = strcat(prefix,num2str(i)) ;
        I=imread([path,prefix,'.jpg']); %依次读取每一幅图像
        I = rgb2gray(I);
        I = imfilter(I,gaussian_kenel) ;
        %I = uint8(I) ;
        [Gmag,Gdir] = imgradient(I) ;
        E{i}.Gmag =  Gmag;
        E{i}.Gdir = Gdir ;
        image_cells{i} = I ;
        %todo strip高=wp/W? 不一定好
        %差分处理
        Gmean = 0 ;
        if i~=1
            
            if i>defualtLenOfList
                lenoflist = defualtLenOfList ;
            else
                lenoflist = i-1 ;
            end
            
            Lstart = i-lenoflist ;
            Ltail = i-1 ;
            for j=Lstart:Ltail
                Gmean = Gmean + (E{j}.Gmag ./ lenoflist) ;
            end
            
            Lmean = 0 ;if lenoflist>=defualtLenOfList
                for k=Lstart:Ltail
                    Lmean = Lmean + (E{k}.Gmag./lenoflist) ;
                end
                for k=Lstart:Ltail
                    Lvar = Lvar+((E{k}.Gmag-Lmean).^2)./lenoflist ;
                end
            end 
            
            Gmoving = E{i}.Gmag - Gmean ;
            Gmoving = Gmoving .* (Gmoving>dif_t) ;
            G = uint8(Gmoving);
            imshow(G) ;
        end
    end

     

    转载于:https://www.cnblogs.com/maskmtj/p/7145184.html

    展开全文
  • grabcut 图像前景分割

    2012-11-21 19:46:13
    grabcut 图像前景分割 C++ 详细注释
  • 基于阴影特性分析的抗移动投射阴影的前景分割
  • 基于深度学习的非特定类图像前景分割 本文用语义分割模型来实现对图像的前景分割。首先对数据集进行清洗,筛选出类别多且更具一般性的训练样本,增强网络模型的泛化性,使其针对非特定类的图像都能实现前景和背景的...

    基于深度学习的非特定类图像前景分割

    本文用语义分割模型来实现对图像的前景分割。首先对数据集进行清洗,筛选出类别多且更具一般性的训练样本,增强网络模型的泛化性,使其针对非特定类的图像都能实现前景和背景的分割。

    1、数据集选取及处理

    选取开源数据集BF_Stylee(https://github.com/loveis98/BF_Style/tree/master/dataset
    该数据集包含人、动物、车辆、室内物品等多种类别,共计 6073 张图像。在图像预处理阶段,图像的大小统一为 256×256,图片进行归一化和白化处理等规范化处理,使得图片的特征更易于学习,进一步增强了模型的泛化能力。处理后图像的平均像素值为 0 ,图像的方差为单位方差 1。

    2、算法实现

    我们用DenseNet 通过特征重用和旁路设置,既大幅度减少了网络的参数量,又在一定程度上缓解了梯度弥散(vanishing-gradient)问题,采用FC-DenseNet神经网络既保证了模型分割结果的质量,又满足了命题组轻量化的需求。实验结果表明,针对公开数据集 BF_Style,DenseNet 深度模型的平均交并比 MIOU(Mean Intersection over Union)值为 0.9696,即模型预测背景和物体两类的交集与并集之比的平均值达到 0.9697。上述结果表明本项目训练的模型是稳定和可靠的,能够有效地捕获主体并区分目标和背景区域。

    3、应用场景

    可以应用于多类别、多目标的识别、定位和分割,特别是在针对前景抠
    图、视频背景替换等场景能发挥巨大的作用。

    4、结果展示

    用户可通过输入模块输入待分割的图片,程序会展示原图,如图 2.2 所示,用户可以根据左侧菜单选择分割的 MASK 图和前景图像。
    输入原始图像
    分别点击遮罩和前景后,前端调用深度网络模型并执行分割预测并显示语义分割的结果。
    在这里插入图片描述
    在这里插入图片描述
    源码下载:https://download.csdn.net/download/qq_44018760/17624508

    展开全文
  • 基于示例的视频立体化,具有前景分割和深度传播
  • 近两年的视频前景分割论文收集: 1、Video Segmentation by Tracking Many Figure-Ground Segments 是2013年发表在ICCV的,采用Image boundary、flow boundary以及两者的和Image+flow boundary来寻找边缘分割。

    近两年的视频前景分割论文收集:

    1、Video Segmentation by Tracking Many Figure-Ground Segments 是2013年发表在ICCV的,采用Image boundary、flow boundary以及两者的和Image+flow boundary来寻找边缘分割。

    展开全文
  • 高斯混合模型/前景分割算法

    千次阅读 2017-11-10 09:57:52
    高斯混合模型/前景分割算法
  • 针对室外视频包含噪声、复杂气象条件等引起的视频退化问题,对噪声特点及前景目标运动性质的差异进行分析,提出一种二次前景分割方法.使用窗口序列PCA并结合高斯混合模型对室外视频降噪后进行背景建模,初次分割前景...
  • 文章目录一、backgroundSubtractor类1、backgroundSubtractor的继承图2...该类仅用于为整个背景/前景分割算法系列定义通用接口。 1、backgroundSubtractor的继承图 2、成员函数 1. apply 说明 计算前景蒙版。 ...
  • FPGA的前景分割实现

    千次阅读 2014-01-06 00:16:26
    到目前为止FPGA的前景分割项目已经基本完成,可以实现深度图数据中的运动前景的检测与分割。人型BLOB输出完美。 系统概况如下: 输入:Kinect深度图数据 处理:某A厂FPGA,一片DDR3作为数据缓存,实际使用DDR3容量不...
  • #基于Grabcut算法的前景分割 src = cv2.imread("Gaussian_Blur.png") src = cv2.resize(src, (0,0), fx=0.5, fy=0.5) r = cv2.selectROI('input', src, False) # 返回 (x_min, y_min, w, h) roi = src[int(r[1]):...
  • 4、图像前景分割 设计内容 图片的位置与代码处于一个文件夹下;生成的图片也在同一个文件夹下。 ①.添加高斯噪声 import cv2 import numpy as np import math # 加高斯噪声 def clamp(pv): if pv > 255: ...
  • 监控视频中异常检测的前景分割 SBRT 2017论文的Pytorch代码使用深度残差网络在监控视频中进行异常检测的前景分割可 这项工作(在文件夹下)的目的是在给定时间对齐的参考视频(无异常)的情况下,检测并分割目标视频...
  • 点击上方"蓝色小字"关注我呀文章翻译自光头哥哥的博客,原文链接:...前言在本教程中,你将学习如何使用OpenCV和grabCut分割算法来执行前景分割和提取。在deep le...
  • 针对目标分割中存在的背景噪声和阴影干扰问题,提出一种改进的分割方法:利用码书背景建模对视频进行分割后,结合梯度因子、Sobel算子对分割结果进一步...实验结果表明,该方法可以有效地分割前景目标,抗干扰能力强。
  • 植物背景与前景分割

    2020-07-31 11:03:43
    # -*- coding: utf-8 -*- import cv2 import numpy as np import matplotlib.pyplot as plt # 使用2g-r-b分离土壤与背景 src = cv2.imread('E:/20200712/IMG_20200712_100857.jpg') cv2.imshow('src', src) ...
  • ComputerVision:在此存储库中,我正在尝试使用各种Computer Vision功能进行图像处理。 在本文中,我使用了计算机视觉来执行-背景-前景分割和边缘检测
  • 一、OpenCv Grabcut算法:前景提取与分割(Foreground segmentation and extraction) (一)算法工作原理 (二)opencv函数cv2.grabCut (三)实现opencv的带有边框的GrabCut初始化算法 (四)输出结果显示 ...
  • 落地项目:通过深度学习完成复杂背景图像人物前景分割 项目目的:项目最终目的:得到一个训练模型可以对复杂背景的图片进行前景人物的精细化提取 通用里程碑步骤和执行时间举例 当然这是以应用的角度进行的运用开发...
  • 这篇博客将介绍如何使用...虽然基于深度学习的图像分割网络(例如,掩码R-CNN和U-NET)实际检测和近似图像中对象的掩码,但也并不完美,可能带有污点; 实际上可以使用Grabcut来清理这些细分网络返回的“杂乱”掩码!
  • 接受输入图像与任一(1)的边界框,我们想段或(2)所涉及的图像中指定的对象的位置掩模即近似分割 反复执行以下步骤: 步骤1:通过高斯混合模型(GMM)估算前景和背景的颜色分布 步骤#2:在像素标签上构造一个...
  • 图像处理中 有时我们学要将图像中的前景提取出来 因此需要对其进行相应的分割实现 本例程就是其中一个例子 有兴趣的可以看看……
  •  4) 按数字'1',在input图上通过长按鼠标左键进行前景标注,按字母'n'得到初步分割结果。(标注处为前景区域增加保留)  5) 按数字'2',在input图上通过长按鼠标左键进行背景标注,按字母'n'得到初步分割结果。...
  • 近来在学习图像分割的相关算法,准备试试看Mask R-CNN的效果。 关于Mask R-CNN的详细理论说明,可以参见原作论文https://arxiv.org/abs/1703.06870,网上也有大量解读的文章。本篇博客主要是参考了PyTorch官方给出...
  • 视频图像动态前景分割(待续)

    千次阅读 2016-04-20 10:34:30
    暂时先罗列下相关的算法,先做出骨架,待日后慢慢...3、Snake算法三是基于形态学的分割方法:四是基于变化的分割方法: 1、帧间差分法另外是一些其他算法: 1、目标熵分割法 2、Mallat小波分割 3、Gabor小波分割

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,408
精华内容 563
关键字:

前景分割