精华内容
下载资源
问答
  • 密度和密集程度
    千次阅读
    2021-02-28 10:18:36

    很多时候有这样一个需求,比如显示的数据,由于数据不连续,但大多数都会让它们连接成直线。如果为了看清楚每一个数据点分布在哪里,就需要使用采散点图来显示数据点出来,这样是可以解决显示的问题,但是数据点是画在曲线上,又会导致曲线不平滑的问题。这样就处于两难的境地,既想把曲线光滑地显示,又想知道数据点的密集程度,又有什么方法来解决呢?

     

    下面就来介绍一个解决方案,这个方案就是把数据点的密集程度显示在坐标轴上,而不是显示在显示的曲线上面,这样就轻松地避开了上面存在的问题。

    class matplotlib.collections.EventCollection(positions, orientation='horizontal', lineoffset=0, linelength=1, linewidth=None, color=None, linestyle='solid', antialiased=None, **kwargs)

    在matplotlib里定义EventCollection函数,这个函数会沿着某个轴的方向收集数据点出现的位置,然后就可以绘画出来数据点的标记。

    xevents1 = EventCollection(xdata1, color='tab:blue', linelength=0.05)

    更多相关内容
  • 其拟合效果如下所示: 通过拟合得到人数像素数的关系曲线为: 即在低密度的条件下,像素数人数的关系曲线。 clc; clear; close all; Max_num = 8;%本视屏的最大人数数目 folder = 'Vedio\01\'; list = dir('...

    1.软件版本

    matlab2013b

    2.部分核心代码

    第一步:读取图片视屏序列

    function [n_frames,I3] = func_readvedio(folder,list);

    n_frames = 0;

    for i=1:length(list)

        I  = imread(fullfile(folder,list(i).name));

        I2 = rgb2gray(uint8(I));

        I3(:,:,i) = I2;

        n_frames  = n_frames + 1;

    end

    这样写可以专门用来读取连续编号的图片序列作为视屏。

    第二步:提取背景

        这个部分的方法参考您提供的论文的这个部分:

    对应的代码如下所示:

    function back3 = func_getbackground(image,frames,T);

    rows = size(image,1);   

    cols = size(image,2);   

    d(1:rows,1:cols,1)          = image(1:rows,1:cols,1);

    for k = 2:frames

        d(1:rows,1:cols,k)      = image(1:rows,1:cols,k) - image(1:rows,1:cols,k-1);

    end

    //以上就是求解图像的差分

    CDM(1:rows,1:cols,2:frames) = d(1:rows,1:cols,2:frames);

    CDM(abs(CDM) <  T)=0;

    CDM(abs(CDM) >= T)=255;

    //CDM

    m=0;

    for i=1:rows

       for j=1:cols

            for k=2:frames

                 if CDM(i,j,k) == 0

                 m(k)=1;

                 end

                 if CDM(i,j,k) == 255

                 m(k)=rand(1);

                 end         

            end

                 position(i,j) = func_position(m);

        end

    end

    //求解CDM中最大的连0的坐标

    for i=1:rows

        for j=1:cols

        back3(i,j) =image(i,j,position(i,j));   

        end

    end

    //获得背景

    第三步:当前图片与背景的差

    function images2 = func_subbackground(image,back,frames,T2);

    rows = size(image,1);   

    cols = size(image,2);

    for k=1:frames

        images(1:rows,1:cols,k)  = back(1:rows,1:cols)-image(1:rows,1:cols,k);  

        images2(1:rows,1:cols,k) = im2bw(images(1:rows,1:cols,k),T2); 

    end

    这里求解差,并将得到的结果求二值图

    第四步:形态学处理

    rows = size(image,1);   

    cols = size(image,2);

    for k=1:frames

         images3(1:rows,1:cols,k)=bwareaopen(image(1:rows,1:cols,k),10);

    end

    这里我们主要将视屏中的个别噪点去掉使画面更加’干净’;

    第五步:边缘检测

    function images = func_edgecheck(image,frames);

    rows = size(image,1);   

    cols = size(image,2);

    for k = 1:frames

        for i=2:rows

           for j=2:cols

             if image(i,j,k)==1 &&(image(i+1,j,k)==0||image(i-1,j,k)==0||image(i,j+1,k)==0||image(i,j-1,k)==0)

             images(i,j,k)=255;

             else

             images(i,j,k)=0;

             end

           end

        end

    end

    普通边间求解法

    第六步:求解前景像素数

    function Num = func_pixel(image,frames);

    rows = size(image,1);   

    cols = size(image,2);

    Num(1:frames)  = 0;

    for k = 1:frames

        for i=2:rows

           for j=2:cols

                  if image(i,j,k)>0

                  Num(k) = Num(k)+1;

                  end

           end

        end

    end

    plot(Num,'r-*');

    grid;

    ylabel('ÏñËØÊý');

    xlabel('Ö¡ÊýÄ¿');

    title('µÍÃܶÈÈË¿ÚÃܶÈ');

    第七步:拟合说明

         这个步骤主要是通过求的的像素值与实际存在的人数进行拟合。其拟合效果如下所示:

     

    通过拟合得到人数和像素数的关系曲线为:

    即在低密度的条件下,像素数和人数的关系曲线。

    clc;
    clear;
    close all;
    
    Max_num = 8;%本视屏的最大人数数目
    
    folder     = 'Vedio\01\';
    list       = dir('Vedio\01\*.jpg');
    level      = 60;
    level2     = 0.25;
    %step1:读取图片序列
    [n_frames,I3] = func_readvedio(folder,list);
    implay(I3);
    
    %step2:提取背景
    back3 = func_getbackground(I3,n_frames,level);
    figure;
    imshow(uint8(back3));
    
    %step3:背景差
    images2 = func_subbackground(I3,back3,n_frames,level2);
    implay(images2);
    
    %step4:形态学处理
    images3 = func_Xintai(images2,n_frames);
    implay(images3);
     
    %step5:边缘检测
    images4 = func_edgecheck(images3,n_frames);
    implay(images4);
    
    
    %step6:统计前景像素数目
    Num1 = func_pixel(images3,n_frames);
    %曲线拟合
    xdata1=1:length(Num1);
    a1=polyfit(xdata1,Num1,1);
    y1=polyval(a1,xdata1);
    figure;
    plot(y1,'b-*');hold on;
    plot(Num1,'r-*');
    a1
    %人数曲线拟合
    figure;
    x1=1:Max_num;
    y1=5*a1(1)*x1+a1(2);
    plot(y1,x1,'r-*');
    title('前景人数');
    grid on;
    
    
    %step6:统计前景边缘像素数目
    Num2 = func_pixel(images4,n_frames);
    %曲线拟合
    xdata2=1:length(Num2);
    a2=polyfit(xdata2,Num2,1);
    y2=polyval(a2,xdata2);
    figure;
    plot(y2,'b-*');hold on;
    plot(Num2,'r-*');
    a2
    %人数曲线拟合
    figure;
    x2=1:Max_num;
    y2=5*a2(1)*x2+a2(2);
    plot(y2,x2,'r-*');
    title('前景边缘人数');
    grid on;
    

    3.参考文献

    A10-07

    4.完整源码获得方式

    方式1:微信或者QQ联系博主

    方式2:订阅MATLAB/FPGA教程,免费获得教程案例以及任意2份完整源码

    展开全文
  • 指定半径下,使用meanshift算法原理对分布在二维平面上的多个点做密度聚类,求出每个聚类包含点的个数及中心坐标。
  •  4)用求得的m(x)来更新iter_position,然后重复3) ,根据迭代次数限制,或者判断 m(x)与iter_position 距离变动大小来决定推出迭代,从而我们就得到了2d散点集合种,密度最大的位置,也就是点最密集的位置 ...

    【Python Meanshif】

    参考来源http://www.chioka.in/meanshift-algorithm-for-the-rest-of-us-python/

    这个参考链接是提供代码的,针对于用mean shift对2D点集 进行聚类,并返回聚类中心,那位大佬还对理论进行了较为详细的介绍,还有一些用相应API进行分割,聚类的说明,可以看看。

    算法简介

    1、meanshift 目前有几个比较常用的接口提供: Scikit-Learn,Opencv

    2、meanshift 在追踪领域,聚类等都有着比较多的应用

    3、本次主要介绍meanshift的算法逻辑,以及以及简单的实现方法:

          1)输入一堆2D点集记为X

          2)设置初始点坐标,建议选择,X的均值点记为x_mean,同时设置一个距离阈值,选择高斯函数作为权重核函数

          3)输入其实点位置iter_position,根据距离阈值求出所有近邻点N(X),然后根据如下公式求出这些点的带权中心

                                    

          4)用求得的m(x)来更新iter_position,然后重复3) ,根据迭代次数限制,或者判断 m(x)与iter_position 距离变动大小来决定推出迭代,从而我们就得到了2d散点集合种,密度最大的位置,也就是点最密集的位置

    实例说明:

           下图中黑色点表示 图中 黑色点为所有数据点,蓝色点为最开始初始化的位置,黄色点为5次迭代之后找到的密度最大位置。

                                                                                

    实现:

    #以下函数 主要来自于参考链接内容中的 大佬写的函数,输入数据是numpy array的2d点,shape like(30,2)
    def mean_shift(data,iter_position):
        
        look_distance = 500  # 设置近邻点搜索阈值
        kernel_bandwidth = 25  # 设置权重函数(高斯)的一个阈值
    
        def euclid_distance(x, xi):  #求 两点之间的欧式距离
            return np.sqrt(np.sum((x - xi)**2))
    
        def neighbourhood_points(X, x_centroid, distance = 5): #求N(X)近邻点集合
            eligible_X = []
            for x in X:
                distance_between = euclid_distance(x, x_centroid)
                if distance_between <= distance:
                    eligible_X.append(x)
            return eligible_X
    
        def gaussian_kernel(distance, bandwidth): #权重函数,对应到公式中的k(x-xi)
            val = (1/(bandwidth*math.sqrt(2*math.pi))) * np.exp(-0.5*((distance / bandwidth))**2)
            return val
        
        X = np.copy(data)
        n_iterations = 5  #迭代次数
        for it in range(n_iterations):
            neighbours = neighbourhood_points(X, iter_position, look_distance)
            #print(neighbours)
            numerator = 0.
            denominator = 0.
            for neighbour in neighbours:
                distance = euclid_distance(neighbour, iter_position)
                weight = gaussian_kernel(distance, kernel_bandwidth)
                numerator += (weight * neighbour)
                denominator += weight
            new_x = numerator / denominator
            iter_position=new_x
            
        return iter_position

     

    展开全文
  • KMeans原理和密度聚类

    2019-09-04 17:24:06
    给定K,目标是找到K个聚类中心,使得所有样本点的高斯概率之积最大,取log之后变成所有样本距离自己聚类中心的平方之最小; 初始聚类中心的选择:如KMeans++,依次选择聚类中心时,每次选的点距离其他聚类中心的...

    KMeans聚类:

    认为每个聚类都是以聚类中心为均值,方差在各维度相同,且每个聚类的方差也相同,的高斯分布("半径"相等的球形)

    给定K,目标是找到K个聚类中心,使得所有样本点的高斯概率之积最大,取log之后变成所有样本距离自己聚类中心的平方之和最小;

    初始聚类中心的选择:如KMeans++,依次选择聚类中心时,每次选的点距离其他聚类中心的距离越大,被选中做聚类中心的概率就越大;

    K的个数如何确定:elbow(胳膊肘)法,横轴是K,纵轴是误差,选择曲线下降的“拐点”

    选中位数做聚类中心,可以降低噪音点带来的影响

     

    密度聚类

    核心对象:该点固定半径r内的点数超过bar,就是核心对象;

    直接可达:核心对象x的半径r范围内的点y们,叫做x到y直接可达(y到x不一定直接可达,因为y不一定是核心对象)

    一个聚类,就是从一个未访问的核心对象开始,找所有的从他直接可达的核心对象们,迭代下去直到找不到新的核心对象;这些核心对象和他们半径r里的所有点,构成这个聚类;

    展开全文
  • 我不久前写了一些代码,使用高斯kde来绘制简单的密度散点图。然而,对于大于100000点的数据集,它只是“永远”运行(几天后我就把它杀死了)。一个朋友在R中给了我一些代码,可以在几秒钟内创建这样一个密度图(plot...
  • ArcGIS入门(五) 密度分析

    千次阅读 2021-11-01 21:59:30
    ArcGIS入门(五) 密度分析 1.网格密度 首先使用渔网工具 为了统计每个网格内点的个数,使用空间连接工具。 其中得到的join_count就是每个格内点的个数 得出的效果: 将值为0的方格调整为透明: 利用ArcScene...
  • H.J.Zhao汇总CASTEP获得电荷密度等高线的Matlab作图法MATLAB程序用来处理MS电荷密度的等高线做法,分四步:1.找到电荷密度图的存储文件,一般是在自己所建的计算project中,隐藏的,castep模块是.charg_frm格式的,...
  • 基于密度的聚类算法假设聚类结构能够通过样本分布的紧密程度确定,以数据集在空间分布上的稠密程度为依据进行聚类,即只要一个区域中的样本密度大于某个阈值,就把它划入与之相近的簇中。 密度聚类从样本密度的...
  • 人群密度计数是指估计图像或视频中人群的数量、密度或分布,它是智能视频监控分析领域的关键问题研究热点,也是后续行为分析、拥塞分析、异常检测事件检测等高级视频处理任务的基础。随着城市化进程的快速推进,...
  • 进展 | 密集人群分布检测与计数

    千次阅读 2022-01-21 01:11:46
    点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达最新密集人群分布预测,人数评估统计、论文、代码、数据集汇概述高密度人群聚集容易发生各种意外事件、所以监控与分析高密度人...
  • 人群密度检测-CSRnet

    千次阅读 2022-05-02 21:39:58
    CSRNet神经网络主要用于高密度人群图片的人数估计。 前端直接使用预先训练好的VGG16神经网络, 输出图像的大小为原始输入图像的1/8 后端使用空洞卷积神经网络 在保持分辨率的同时扩大感知域, 生成高质量的人群分布...
  • 如何计算点云密度

    千次阅读 2020-09-24 15:42:50
    点云密度是数据分辨率的指标:较高的密度意味着更多的信息(高分辨率),而较低的密度意味着较少的信息(低分辨率)。了解点云密度很重要,因为这可能会影响基于点云(例如创建DEM)的其他项目的质量或准确性,向...
  • 跨某个地理区域的语言使用者的互动程度通常与该区域的语言方言变异程度相关。 诸如广播电视内容之类的大众媒体可以允许来自广泛领域的发言人进行交互,并且可以对区域差异产生平滑作用,但是对于许多未被充分...
  • Python-Matplotlib做二维密度分布图

    千次阅读 2020-12-14 07:58:37
    但对NumpyMaltplotlib的熟练程度还不够,对于计算程序产生的非矩阵式的数据结构不知道该怎么处理。今天花了一早上仔细研究了一下,终于将这块硬骨头啃下来了。做colormap图的关键在于矩阵的创建,作为坐标的x与y在...
  • 最初遇到这个问题的时候,找到的大答案是绘制contour图,比如: ... 这当然很漂亮,但是这需要有三列数字来标示一个平面;但其实我的问题是仅有两列数的时候如何标示密度: 方法一,使用hist2d: ...
  • MATLAB 计算点云点密度(二维投影)
  • 感受野: ... 通道 channel: ...CNN中stride(步幅)padding(填充)的详细理解_G果的博客-CSDN博客_paddingstride 设置步幅的目的:希望减小输入参数的数目,减少计算量 设置填充的目的:希..
  • ArcGIS 路网密度制作

    万次阅读 多人点赞 2021-01-09 11:53:43
    ArcGIS 路网密度制作前言路网密度概念所需数据目标ArcGIS操作步骤 前言 路网密度概念 路网密度等于某一计算区域内所有的道路的总长度与区域总面积之比,单位为千米每平方千米. 所需数据 某地区道路数据(线矢量图层...
  • arcgis密度分析

    万次阅读 2020-11-18 21:11:48
    在 ArcGIS 中,分布密度的计算方法有点密度分析、线密度分析密度分析三种。 1.点密度分析 导入实验数据居民点图层道路图层 在自定义里勾选空间分析模块Spatial Analyst 点击空间分析工具中密度分析...
  • 来源:Deephub Imba 本文约4900字,建议阅读5分钟 在本文中,首先简要解释一下 混合密度网络 MDN (Mixture Density Network)是什么,然后将使用Py...
  • 为了克服粗糙K-均值聚类算法初始聚类中心点随机选取,以及样本密度函数定义所存在的缺陷,基于数据对象所在区域的样本点密集程度,定义了新的样本密度函数,选择相互距离最远的K个高密度样本点作为初始聚类中心,...
  • 5G超密集组网

    千次阅读 2022-03-14 20:46:10
    主要介绍5G超密集组网形式、存在的问题以及干扰管理
  • np.vstack([x,y]) z = gaussian_kde(xy)(xy) fig, ax = plt.subplots() ax.scatter(x, y, c=z, s=100, edgecolor='') plt.show() 如果希望按密度顺序绘制点,以使最密集的点始终位于顶部(类似于链接的示例),只需...
  • CrowdNet模型主要有深层卷积神经网络浅层卷积神经组成,通过输入原始图像高斯滤波器得到的密度图进行训练,最终得到的模型估计图像中的行人的数量。 当然这不仅仅可以用于人流密度估计,理论上其他的动物等等的...
  • 密度峰值聚类算法(DPC)

    千次阅读 2021-11-22 15:35:19
    通过学习密度峰值聚类算法(DPC),掌握算法的原理及其优缺点,对改进方法的论文进行总结,最后给出了MATLAB代码实现该算法。
  • 1.人群计数的方法主要分为四类:detection-based, regression-based, density estimation, CNN-based density 的预测方法。...这主要是将CNN用于密度估计人群计数的初始方法。 Multi-column:这些网
  • 用MATLAB统计数据的密度

    千次阅读 2020-04-27 13:53:20
    设y是一个n维的向量 [f,xi]=ksdensity(y); plot(xi,f);
  • 本文主要讲解有关聚类的相关算法,包括K均值聚类、层次聚类以及密度聚类等,除此之外,还会讲解聚类算法中的一些基本概念,以及聚类算法效果评判的一个标准——轮廓系数。 <!--more--> 本文主要是依据李航...
  • 支持不同的像素密度 Android设备不仅有不同的屏幕尺寸(手机,平板电脑,电视等),而且它们的屏幕也有不同的像素大小。 也就是说,虽然一个设备每平方英寸有160个像素,但另一个设备在同一空间中可以容纳480个像素...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,469
精华内容 2,987
热门标签
关键字:

密度和密集程度