精华内容
下载资源
问答
  • 简单说就浏览器渲染的问题,以windows7以上的系统为例,并非所有的宋体都“无”渲染的,12-14px如你所说渲染方式“无”,试试16/18或者以上,是不是也和微软雅黑一样类似于PS里的“锐利”呢---------------携程UED...

    简单说就浏览器渲染的问题,以windows7以上的系统为例,并非所有的宋体都是“无”渲染的,12-14px如你所说渲染方式“无”,试试16/18或者以上,是不是也和微软雅黑一样类似于PS里的“锐利”呢

    ---------------携程UED的分割线----------------

    说到web性能,前端工程师很自然地反应是yahoo的30+条优化规则。这些规则可以将网页加载从原来的几秒甚至十几秒较少到3s甚至1s以内。当一个完整界面展现在用户眼前时,内容就通过不同的字体、图片以及多媒体传达给用户。使用户在1s内看到网页和使用户留在网页上几分钟甚至几十分钟同样重要。字体作为内容承载信息的重要部分,若使用不“适当”的字体或者字体由于渲染等缘故对用户不友好,则会(有可能)造成不必要的用户流失。本文介绍浏览器的字体渲染,希望还未接触字体渲染的同事能通过本文对字体渲染有所了解。

    首先看下不同浏览器下的截图,来自携程-攻略社区。

    很明显地看出,Chrome35截图中的非横竖笔画较IE11和Firefox30截图中的有明显的锯齿。

    理想的字体其边缘过渡平滑,而在屏幕上显示时,需要将字体栅格化(rasterization)为一个个像素点。采用黑白(black and white)渲染无法体现字体的细节之处,会造成了边缘呈现锯齿状(jagged)的不平滑。为了解决这个问题,字体渲染引擎采用了以下方法进行平滑(Antialiasing):灰阶(grayscale)渲染、亚像素(sub-pixel)渲染。

    渲染方法

    灰阶渲染是一种通过控制字体轮廓上像素点的亮度达到字体原始形状的方法。

    亚像素渲染利用了LCD屏(液晶屏)中每个像素是由R、G、B三个亚像素的颜色和亮度混合而成一个完整像素的颜色这一原理,将字体轮廓上的像素点由三个亚像素体现以达到原始形状的方法。与灰阶渲染相比,分辨率在垂直方向放大了三倍,因此渲染效果更好,但是所耗内存也更多。因此在手机屏上,为了减少CPU开销,并未采用该字体渲染方法,而是采用的grayscale渲染。

    操作系统中的渲染API

    操作系统OS提供了支持不同的字体渲染方法的API。在windows下是GDI(Graphics Device Interface)和DirectWrite,OS X下是Quartz。

    GDI分为GDI Grayscale和GDI ClearType。前者为灰阶渲染API,后者是亚像素渲染API。由于GDI ClearType并未对字体进行垂直方向的平滑,因此当字体较大时会出现边缘不平滑的情况。为了弥补GDI ClearType的不足,MS实现了DirectWrite API,它在GDI ClearType的基础上增加了垂直方向的平滑。

    但是!字体渲染的API都是由浏览器厂商自己选择的!

    使用同一颜色,感官上的颜色深浅为:黑白渲染>grayscale>sub-pixel。

    Chrome35/36采用的是GDI ClearType,因此在字体较大时边缘会出现毛刺,而FF30采用的DirectWrite则没有此类问题。如下图所示:

    根据以上两图可以发现,Chrome的字体渲染效果没有Firefox的好。为缩小Chrome与FF/IE的差异,一种方法是使用-webkit-text-stroke:0.5px;如果使用1px的话就有点粗了。

    Ctrip携程攻略2014

    Ctrip携程攻略2014

    虽然该hack使Chrome下字体的边缘有所光滑,但字体在webkit内核浏览器中看上去“模糊”了。

    常用字体在浏览器中的渲染情况Simsun“Microsoft Yahei”/Tahoma/ArialChrome3512px-17px:黑白渲染18px-48px:GDI ClearType49px+:GDI Grayscale12px-48px:GDI ClearType49px+:GDI GrayscaleFF30/IE9+12px-17px:黑白渲染18px-99px:DirectWrite100px+:GDI Grayscale12px-99px:DirectWrite100px+:GDI GrayscaleIE7/8GDI ClearType

    FF30/IE7+中的数字和英文字符12px-17px为sub-pixel渲染,而Chrome35为黑白渲染。Simsun

    12px携程|14px携程|16px携程|17px携程|18px携程|20px携程|30px携程|40px携程|48px携程|49px携程|99px携程|100px携程Microsoft Yahei

    12px携程|14px携程|16px携程|17px携程|18px携程|20px携程|30px携程|40px携程|48px携程|49px携程|99px携程|100px携程Tahoma

    12pxCtrip2014|14pxCtrip2014|16pxCtrip2014|17pxCtrip2014|18pxCtrip2014|20pxCtrip2014|30pxCtrip2014|40pxCtrip2014|48pxCtrip2014|49pxCtrip2014|99pxCtrip2014|100pxCtrip2014Arial

    12pxCtrip2014|14pxCtrip2014|16pxCtrip2014|17pxCtrip2014|18pxCtrip2014|20pxCtrip2014|30pxCtrip2014|40pxCtrip2014|48pxCtrip2014|49pxCtrip2014|99pxCtrip2014|100pxCtrip2014

    从使用Microsoft Yahei, Tahoma和Arial字体可以看出,在Chrome35中,由于转换成GDI Grayscale渲染,49px的字比48px的边缘光滑很多。字体较大时,GDI Grayscale比GDI ClearType具有更好的渲染效果。

    在实际中会遇到在如Tahoma/Arial字体下17px和18px的“字重”有明显差别。这个现象涉及到字体设计,简单地说就是在浏览器渲染字体之前,字体本身会调整字型和笔画所占像素。想了解更多细节,请参考a closer look at TrueType hinting。

    启动Chrome中的DirectWrite

    在chrome://flags下启用实验性DirectWrite字体渲染系统:#enable-direct-write会使48px以下的字体均为sub-pixel渲染。仅适用于测试环境!(需重启Chrome)

    Chrome37 beta将该特性移除实验特性,并将在Chrome37中实现在windows下使用DirectWrite API对字体渲染,相信在Chrome37中以上提到的浏览器字体渲染差异会得到解决。

    字体格式在不同浏览器下的渲染Chrome35Firefox30IE9/10/11IE7/8TTF48px-:GDI ClearType

    49px+:GDI Grayscale99px-:GDI ClearType

    100px+:GDI Grayscale99px-:DirectWrite

    100px+:GDI GrayscaleGDI GrayscaleEOT//99px-:DirectWrite

    100px+:GDI GrayscaleGDI GrayscaleOTFGDI Grayscale99px-:DirectWrite

    100px+:GDI Grayscale//WOFF48px-:GDI ClearType

    49px+:GDI Grayscale99px-:DirectWrite

    100px+:GDI Grayscale99px-:DirectWrite

    100px+:GDI Grayscale/SVGGDI Grayscale///

    CSS属性对字体渲染的影响font-smoothing: subpixel-antialiased | antialiased;对应为sub-pixel和grayscale。已废止!font-weight: bold;Chrome35, IE7/8:与normal字体渲染一致(包括数字和字母);IE9+/FF30:grayscale,部分简单中文字体保持原有渲染。font-style:italic;Chrome35, IE7/8:与normal字体渲染保持一致;IE9+/FF30:sub-pixel渲染。opacity: 属性值<1Chrome35:sub-pixel渲染的字体“降级”为grayscale渲染;IE9+/FF30:保持不变transform 2Dtransform: rotate(n);n=90*k deg(k=整数), 保持未旋转的字体渲染;others,sub-pixel渲染。Chrome35在48px+为grayscale渲染。

    transform: scale(x,y); 与字体大小m有关。以simsun为例,具体如下:Chrome35:x*y*m<12, Chrome35 sub-pixel渲染;122304 grayscale渲染,12px-24px存在一定范围的黑白渲染(tahoma是12px-16px)。FF30、IE9+:m*m*n<=99*99=9801 sub-pixel渲染;m*m*n>9801 grayscale渲染。transform: skew(n);n=90*k deg(k为整数), 保持未倾斜的字体渲染;others, sub-pixel渲染。Chrome35在49px+为grayscale渲染,IE9+, FF30在100px+为grayscale渲染。transform 2D & transition

    运动中:以12px为例: 在Chrome35和FF30下,运动中的字体均是grayscale渲染;

    运动结束:Chrome35, FF30, IE9+均为sub-pixel渲染。

    从运动开始到运动结束产生了两次渲染变化(sub-pixel到grayscale,grayscale到sub-pixel)会出现“闪现”的现象。Transform 3D

    当元素进入GPU中渲染时,在Chrome35+中的字体为grayscale渲染,IE11和FF30保持sub-pixel渲染不变。若transform值函数(如translate3d(), scale(), rotate()等)中的参数为非整数,会导致字体模糊。在使用iScroll模拟滚动的项目中会出现字体模糊。以下是对该问题的一个还原:

    -webkit-transform: translate3d(1.5px, 1.5px,0);

    20像素新宋abcABC一二三日昌晶囊攮馕

    -webkit-transform: translate3d(1px, 1px,0);

    20像素新宋abcABC一二三日昌晶囊攮馕

    Chrome 36中使用transform不需要-webkit-前缀了!

    为了防止以上模糊情况的出现,可以通过JS中的Math.round()/Math.ceil()/Math.floor()等函数使其为整数。

    当加入perspective()值时,Firefox30渲染又有所不同。

    transform: perspective(1px) translate3d(1.5px, 1.5px,0);在FF30中作用的元素为grayscale渲染。

    20像素新宋abcABC一二三日昌晶囊攮馕

    transform: perspective(1px) translate3d(1px, 1px,0); 在FF30中作用的元素为sub-pixel渲染

    20像素新宋abcABC一二三日昌晶囊攮馕

    IE11均为sub-pixel渲染。

    此情况下运用opacity<1的声明,IE10+为grayscale。

    20像素新宋abcABC一二三日昌晶囊攮馕Chrome transform: perspective()对文档后面元素的影响

    Chrome35+,当transform中声明有perspective()时,若文档后面声明transform的元素进入该声明作用的元素的layer-borders的区域时,仍然会受到该声明的影响。声明作用元素的溢出部分同样会对后面元素造成影响。合成渲染层内部文字进入GPU渲染。

    Ctrip携程2014

    进入GPU渲染

    Ctrip携程2014

    未进入GPU渲染

    启动Show composited layer borders,在Chrome中测试的结果截图为:

    总结

    字体渲染与操作系统、浏览器、字体格式以及CSS属性有关。本文重点罗列了一些在Windows Chrome中字体渲染与FF/IE的差异和对应缓解/解决问题的方案。Chrome在字体渲染上目前落后于IE/FF,但之前官方博客称Chrome 37将实现在windows下使用DirectWrite API,Chrome在字体渲染方面将赶上IE/FF等浏览器,以上的差异性也将减小甚至消失。

    原文阅读:字体渲染 – 携程设计委员会

    展开全文
  • 深度图的实时平滑

    千次阅读 2017-11-20 15:27:25
    深度图的实时平滑 ...英文原文,使用的第一代kinect youtube上的演示效果 二、深度数据存在的问题 下图我简单处理后的深度图: 蓝色表示采到深度值为0的点,而其他点用颜色来标识

    from: http://blog.csdn.net/jiaojialulu/article/details/53192887?locationNum=12&fps=1

    深度图的实时平滑

    一、背景

    英文原文,使用的是第一代kinect
    youtube上的演示效果

    二、深度数据存在的问题

    下图是我简单处理后的深度图:
    image
    蓝色表示采到深度值为0的点,而其他点用颜色来标识,颜色越深表示离相机越近。数据中的噪声表现为蓝色斑点在画面上不断出现和消失。一些噪点是由于红外在遇到物体表面时发生散射造成的,另一些是由于离得kinect较近的物体的遮挡。
    另一个限制深度数据的地方在于kinect的工作范围(0.8m-4m)。在这个范围之外的物体就会表现为无数据,即深度值为0。

    三、解决办法

    作者提出了像素滤波器加权移动平均两种方法,并且能在实时的要求下达到深度图平滑的效果。

    3.1 像素滤波器

    3.1.1 原理及步骤

    第一步是将深度数据帧转换为我们方便处理的形式,比如UINT16[]。

    UINT16 *depthData = new UINT16[424 * 512];
    m_pDepthFrame->CopyFrameDataToArray(nDepthBufferSize,reinterpret_cast<UINT16*>(depthData));
    • 1
    • 2

    下面就是对一帧上的每个像素搜索,找到深度值为0的位置,我们希望除去这样的像素,但是又不会影响精度和数据的其他特性。那么应该如何去做呢?
    我们先把深度值为0的像素定为候选滤波对象,然后看看它究竟是否符合我们滤去它的标准。我们利用它周围的一些像素对应的深度值来定义这个标准。我们以候选滤波像素为中心定义一个一个两“层”的滤波器,同时用它来寻找这个滤波器框内其他深度值非零的像素。滤波器将这些深度值做一个分布,并关注每层框内这种像素的数量。然后将每层内非零像素个数与一个阈值比较,进而决定这个候选像素是否应该被滤波。如果任意层内非零像素的数目超过了阈值,就要将所有非零像素深度值对应的统计众数(数目最多一个深度值)应用到候选滤波像素上,使其深度值不为0。滤波器如下图所示:
    滤波器
    下图主要表明了采用众数,即滤波器框内频数最高的一个深度值来作为候选像素的深度值,要比直接采用框内所有深度值的平均要更加符合实际(我觉得如果改成内层的众数更好)。
    将所有非零像素深度值对应的统计众数(数目最多一个深度值)应用到候选滤波像素上
    原文使用的是C#,我这里改为C++:

    // 滤波后深度图的缓存
        unsigned short* smoothDepthArray = (unsigned short*)i_result.data;
        // 我们用这两个值来确定索引在正确的范围内
        int widthBound = 512 - 1;
        int heightBound = 424 - 1;
    
        // 内(8个像素)外(16个像素)层阈值
        int innerBandThreshold = 3;
        int outerBandThreshold = 7;
    
        // 处理每行像素
        for (int depthArrayRowIndex = 0; depthArrayRowIndex<424;depthArrayRowIndex++)
        {
            // 处理一行像素中的每个像素
            for (int depthArrayColumnIndex = 0; depthArrayColumnIndex < 512; depthArrayColumnIndex++)
            {
                int depthIndex = depthArrayColumnIndex + (depthArrayRowIndex * 512);
    
                // 我们认为深度值为0的像素即为候选像素
                if (depthArray[depthIndex] == 0)
                {
                    // 通过像素索引,我们可以计算得到像素的横纵坐标
                    int x = depthIndex % 512;
                    int y = (depthIndex - x) / 512;
    
                    // filter collection 用来计算滤波器内每个深度值对应的频度,在后面
                    // 我们将通过这个数值来确定给候选像素一个什么深度值。
                    unsigned short filterCollection[24][2] = {0};
    
                    // 内外层框内非零像素数量计数器,在后面用来确定候选像素是否滤波
                    int innerBandCount = 0;
                    int outerBandCount = 0;
    
                    // 下面的循环将会对以候选像素为中心的5 X 5的像素阵列进行遍历。这里定义了两个边界。如果在
                    // 这个阵列内的像素为非零,那么我们将记录这个深度值,并将其所在边界的计数器加一,如果计数器
                    // 高过设定的阈值,那么我们将取滤波器内统计的深度值的众数(频度最高的那个深度值)应用于候选
                    // 像素上
                    for (int yi = -2; yi < 3; yi++)
                    {
                        for (int xi = -2; xi < 3; xi++)
                        {
                            // yi和xi为操作像素相对于候选像素的平移量
    
                            // 我们不要xi = 0&&yi = 0的情况,因为此时操作的就是候选像素
                            if (xi != 0 || yi != 0)
                            {
                                // 确定操作像素在深度图中的位置
                                int xSearch = x + xi;
                                int ySearch = y + yi;
    
                                // 检查操作像素的位置是否超过了图像的边界(候选像素在图像的边缘)
                                if (xSearch >= 0 && xSearch <= widthBound &&
                                    ySearch >= 0 && ySearch <= heightBound)
                                {
                                    int index = xSearch + (ySearch * 512);
                                    // 我们只要非零量
                                    if (depthArray[index] != 0)
                                    {
                                        // 计算每个深度值的频度
                                        for (int i = 0; i < 24; i++)
                                        {
                                            if (filterCollection[i][0] == depthArray[index])
                                            {
                                                // 如果在 filter collection中已经记录过了这个深度
                                                // 将这个深度对应的频度加一
                                                filterCollection[i][1]++;
                                                break;
                                            }
                                            else if (filterCollection[i][0] == 0)
                                            {
                                                // 如果filter collection中没有记录这个深度
                                                // 那么记录
                                                filterCollection[i][0] = depthArray[index];
                                                filterCollection[i][1]++;
                                                break;
                                            }
                                        }
    
                                        // 确定是内外哪个边界内的像素不为零,对相应计数器加一
                                        if (yi != 2 && yi != -2 && xi != 2 && xi != -2)
                                            innerBandCount++;
                                        else
                                            outerBandCount++;
                                    }
                                }
                            }
                        }
                    }
    
                    // 判断计数器是否超过阈值,如果任意层内非零像素的数目超过了阈值,
                    // 就要将所有非零像素深度值对应的统计众数
                    if (innerBandCount >= innerBandThreshold || outerBandCount >= outerBandThreshold)
                    {
                        short frequency = 0;
                        short depth = 0;
                        // 这个循环将统计所有非零像素深度值对应的众数
                        for (int i = 0; i < 24; i++)
                        {
                            // 当没有记录深度值时(无非零深度值的像素)
                            if (filterCollection[i][0] == 0)
                                break;
                            if (filterCollection[i][1] > frequency)
                            {
                                depth = filterCollection[i][0];
                                frequency = filterCollection[i][1];
                            }
                        }
    
                        smoothDepthArray[depthIndex] = depth;
                    }
                    else
                    {
                        smoothDepthArray[depthIndex] = 0;
                    }
                }
                else
                {
                    // 如果像素的深度值不为零,保持原深度值
                    smoothDepthArray[depthIndex] = depthArray[depthIndex];
                }
            }
        }

    3.1.2 滤波效果

    我这里再次把原图贴上,左图是滤波后的效果图:可以看到物体边缘散乱的深度值为0的点已经减少了不少。
    滤波前后对比

    3.1.3 代码

    因为只是为了理论上了解像素滤波器平滑的机制,因此我选择静态的读取kinect采集的原始图片,然后进行平滑。
    代码下载链接

    请自行配制环境–kinect 2.0SDKOpenCV
    下一节将继续讲解平滑中的加权移动机制

    展开全文
  • 移动平均,英文名叫做 MovingAverage,对前N期的历史数据进行平均,这里的N可变数字,通常为5天、10天、30天、60天、120天和240天。移动平均线,指我们根据计算出的移动平均数值绘制的在一定时间区间内的折线...

    a29f1b59ec63bc2a318fcfd9f327c107.png

    小伙伴们大家好,可能大家之前都听说过移动平均,可是到底什么是移动平均?如何计算移动平均?如何在图表中绘制出移动平均线?这就是我们今天要讨论的重点问题。

    移动平均,英文名叫做 MovingAverage,是对前N期的历史数据进行平均,这里的N是可变数字,通常为5天、10天、30天、60天、120天和240天。移动平均线,是指我们根据计算出的移动平均数值绘制的在一定时间区间内的折线图。5天和10天的短期移动平均线,被称作日均线指标。30天和60的中期移动平均线,被称作季均线指标。120天和240天的长期移动平均线,被称作年均线指标。为啥移动平均线这么重要呢?我想这个股民朋友最深有感触,把某段时间的股价加以平均,再依据这个平均值作出平均线,能够消除时间区间中的不规则波动的影响,以便呈现出总体发展趋势,并根据总体趋势对未来走向进行预测a1f285f4bd78083b5ed920221f988ef4.png如上图所示:将第一季度的每日销售额绘制成折线图,图表会呈现明显的不规则波动,很难通过这条折线看出总体趋势,所以需要对销售额进行移动平均计算。9cde935d602f8378e60433bef7fbc832.gif这里我们使用PowerPivot对数据进行移动平均计算,并且绘制出一条灵活可变的移动平均线(效果如上图所示)我们需要准备两张表,一张为第一季度每日的销售额明细,另一张为2019年全年的日期表,这个日期表需要是连续的,包含2019年每一天的日期。销售额明细:97d6665aa23201ff6e42dcea148f1b34.png日期表:bfec087090142d10fbd261c5fffb7432.png数据准备好后,跟我一起操练起来吧!步骤一:导入数据我们以导入销售额明细表为例,演示如何将数据导入到PowerPivot中,具体操作参见动图演示:6382f19b4d5abdb674ccd48cf901832d.gif日期表的导入方法相同,不再赘述。将数据导入到PowerPivot之前将数据转换成电子表格并重命名是一个好习惯。步骤二:创建关系将两张表通过相同字段 [日期] 建立关系,具体操作参见动图演示:647d46e3d4b30f6d7124c54a893c8e0f.gif创建关系的两张表符合一对多的关系,即一张表(日期表)中的日期是唯一的,另一张表(销售额明细)中的日期不是唯一的。步骤三:创建度量值我们需要创建2个度量值:① 销售总额[销售总额] 度量值的算法很简单,就是将所有的销售额求和,具体操作参见动图演示:91f6c0a8c0cda85eee30307851b43a6c.gif② 移动平均[移动平均] 度量值的创建方法与 [销售总额] 相同,不再演示。具体公式如下:4a9f14a9058788718e79ca341037af64.png想要复制公式,看下面:

    =AVERAGEX(DATESINPERIOD('日期表'[日期],MIN('日期表'[日期]),-7,DAY),[销售总额])

    这个公式用 DATESINPERIOD 函数提取了日期表中从当前日期开始往前推7天的日期列表。用AVERAGEX函数对这些日期的销售总额求平均。公式看不懂没关系,会复制就可以。这个公式写完后我们可以做一个透视表验证一下结果是否正确581691d234ffc2a0b722a7ddd694a04c.gif透视表结果没问题,可是有一个小瑕疵,我们在做透视表时使用的是[日期表]中的日期,[销售额明细]表中的日期只有第一季度的,这就导致我们做出的透视表多出了6天4月份的日期,如何解决这个问题呢?我们改一下公式即可:

    =IF(
        [销售总额]=0,
         blank(),
         AVERAGEX(
                   DATESINPERIOD( '日期表'[日期],
                                  MIN('日期表'[日期]),-7,
                                  DAY
                                 ),
                   [销售总额]
                  )
        )

    这里特意把公式做了缩进,方便大家查看。我们用IF函数加了一个判断条件,如果[销售总额]为0则显示为空,就很好的解决了这个问题。步骤四:创建参数表上面的公式我们只计算了7日平均,如果还想看30天的平均、60日的平均,需要一个一个写度量值吗?当然不用,我们可以创建一个参数表来帮忙。参数表结构如下:58b9464a368a36e9cb044caff3f8bd42.png参数表导入方法同步骤一,不再赘述。参数表无需与任何表创建关系。736f5700daee23a2494a0729470028df.png将度量值公式中的移动平均天数7改成 VALUES('参数表'[移动平均天数] ) 即可,公式如下:

    =IF(
        [销售总额]=0,
         blank(),
         AVERAGEX(
                   DATESINPERIOD( '日期表'[日期],
                                  MIN('日期表'[日期]),
                                 -VALUES('参数表'[移动平均天数]),
                                  DAY
                                 ),
                   [销售总额]
                  )
        )

    步骤五:绘制透视图接下来绘制图表看看效果,具体操作参见动图演示:c64fee3f3c03acd9e0b86e66b871c82f.gif透视图字段设置详情:c077f8d7f006a7d6ef59ddf45eeb3078.png步骤六:插入滚动条我们可以通过调整参数表的数值获得不同天数的移动平均线,这已经足够了,如果还想更高大上一点,我们可以插入一个滚动条。具体操作参见动图演示:f0eadb77e80eb6d9b581eb5f1e19baf3.gif滚动条参数设置详情:ece45991478605137421e99b4db5a3a3.png为啥找不到[开发工具]选项卡?很多小伙伴的工具栏中没有 [开发工具] 选项卡,所以操作之前我们先来学习如何调用 [开发工具] 选项卡。步骤非常简单:文件 → 选项 → 自定义功能区 → 勾选[开发工具],具体操作参见动图演示:c36af62b432818c2684c3b3d366e0e84.gif经过如上设置,[开发工具] 选项卡就会出现在功能区中。步骤六:为滚动条指定宏

    调整滚动条后很多小伙伴会发现虽然移动平均天数变化了,但是图表中的移动平均线没有任何变化,我们需要刷新一下数据才行,这也太不智能了吧!

    于是乎我想了一个办法,给滚动条指定一段宏代码,一旦单击滚动条,就运行刷新数据的操作。具体操作参见动图演示:

    dbe551cf831dc3da11c03fba79a9912c.gif代码如下:

    Sub 刷新()
        ThisWorkbook.RefreshAllEnd Sub

    调整滚动条,我们看一下7日平均线,与销售额对比,移动平均线的趋势平滑了很多,可以大致看出销售额的周期性波动。ac51d19e2747bfd8c80dec8ae7d57297.png再看一下30日均线,更加平滑,几乎没有波动,呈现出缓慢的上升趋势。06885e7c1956f6e5585e7fe3335ce801.png移动平均天数越长,折线越平滑,但也会导致移动平均数对实际数据越不敏感,所以并不是越平滑越好。今天的分享就到这里,你都学会了?光看不练假把式,不断的练习才能促进知识的内化,我们下期再见!更多Excel技能,欢迎您加入布衣公子网易云课堂《揭秘Excel真相》课程。

    PPT课程地址:http://t.cn/Rm4oVdo

    Excel课程地址:http://t.cn/Rm4oCLR

    关联阅读:

    这个下拉列表很另类,但做法超简单!|Excel127

    能根据输入内容自动更新的下拉菜单你用过吗?|Excel126

    新、老、离职员工名单只要刷新一下就能轻松获取|Excel125

    如此不规则的数据是该好好整治整治了!|Excel124

    批注操作,游刃有余,批量导出 So Easy!|Excel123

    打开这篇文章之前,无法想象条件格式能带给我们什么惊喜|Excel122

    送一个提取不重复值的函数给您|Excel121

    逆天啦!Excel居然能按颜色统计|Excel120

    别不信,学会这几个函数能帮你省下一天的时间!|Excel119

    结构大反转简直逆天,PQ超乎你的想象|Excel118

    对筛选结果按条件计数,这招很冷但管用!|Excel117

    ……

    更多技能分享请您后台回复「目录」查看

    福利关键词:70、PNG、地图、姜饼人、图标、样机、手、试看、试听、封面、封底、排版、图表、目录页、过渡页、标题栏,后台回复有惊喜哦!

    布衣公子《揭秘Excel真相》课程原价299

    前5000人惠顾仅需199元

    单击了解>>《揭秘EXCEL真相》课程详情

    74c8703036b514a1e56beca40a4a6834.png

    展开全文
  • 优化技术:资源平滑和资源平滑。 资源平衡定义: 英文名:Resource Level。对资源冲突的两项或多项活动的开始日期和结束日期进行调整以消除或缓解资源冲突的一种技术。资源平衡往往导致关键路劲改变,通常延迟。...

    资源平衡VS资源平滑 https://www.ffeeii.com/1657.html

    资源优化定义:

    在项目进行时,可以根据资源的实际使用情况对资源做相应的调整以满足项目的需要。优化技术:资源平滑和资源平滑。

    资源平衡定义:

    英文名:Resource Level。对资源冲突的两项或多项活动的开始日期和结束日期进行调整以消除或缓解资源冲突的一种技术。资源平衡往往导致关键路劲改变,通常是延迟。

    资源平滑定义:

    英文名:Resource Smooth。利用关键路径上活动的浮动时间,调整非关键路劲上的活动使项目资源数量减少波动的一种技术。

    资源平衡、资源平滑对比图:

    资源平衡、资源平滑对比

    举例:

    1、项目经理发现由于一名资源过度承诺而导致一些任务未完成。项目经理意识到如果使用其他资源,将不影响到关键路径。项目经理应该采用什么来满足进度计划?

    A. 假设情景分析
    B. 资源平衡
    C. 快速跟进
    D. 资源平滑
    答案:D。解析:强调将不影响到关键路径,即锁定答题区域为资源优化。其中资源平滑 是一种资源优化技术,在不影响关键路径的情况下使用自由浮动时间和总浮动时间。

    2、项目要求为关键路径上多个任务的制定资源。整个项目工期的资源是充足的,但是在某个特定月份不能始终充足。项目经理应应用哪种技术在风险最低的情况下延迟非关键任务?

    A:资源平衡
    B:赶工
    C:制定受资源制约的进度表
    D:快速跟进
    答案:A。解析:关键字分析-整个项目工期中资源充足,但某个特定月份不充足,只需资源在关键路径/非关键路径之间的平衡

    展开全文
  • Opencv之图像降噪(平滑

    千次阅读 2020-01-18 09:42:29
    图像降噪的英文名称Image Denoising, 图像处理中的专业术语。现实中的数字图像在数字化和传输过程中常受到成像设备与外部环境噪声干扰等影响,称为含噪图像或噪声图像。减少数字图像中噪声的过程称为图像降噪,...
  • 优化技术:资源平滑和资源平滑。 资源平衡定义: 英文名:Resource Level。对资源冲突的两项或多项活动的开始日期和结束日期进行调整以消除或缓解资源冲突的一种技术。资源平衡往往导致关键路劲改变,通常延迟。...
  • 我们在设计MP3或其他的一些动态显示时,需要作平滑移动的处理,如:向左移动...通常的做法有两种:一种是平滑移动方式,另一种半个字符移动方式。  平滑移动需要占用CPU的时间比较多,一帧数据:28*16/8 = 256 B
  • 详细讲述了利用载波相位观测值对伪距观测值进行平滑的原理,给出了计算公式。文档虽是英文版,但是浅显易懂,相信对于稍有GPS专业知识的,都不会难。
  • 深度图的实时平滑背景英文原文,使用的第一代kinect youtube上的演示效果 深度数据存在的问题下图我简单处理后的深度图: 蓝色表示采到深度值为0的点,而其他点用颜色来标识,颜色越深表示离相机越近。数据...
  • 英文叫做blur, 也叫做smootiing, 中文中叫做模糊或者平滑。 用过photoshop的人都应该知道,滤镜里面就有模糊这个选项,我们现在看看它怎么实现的。 一含义  模糊(平滑一种常用的图片处理方式,它的作用...
  • 它也很薄,只有166页,虽然英文的,如果静下心来认真看一两天就可以读完。 下面我之前整理的读书笔记,以思维导图的方式呈现。 此图关于第八章Smoothing and Blurring平滑与模糊 图上内容部分也参考了...
  • 例如:一直输入的英文,求翻译之后的中文。 语言模型 LM:深度学习模型,判断语义性。 回忆一下联合概率公式 在语料库中先找后面这一句话,找到之后,看后面接的什么。看是否出现,求概率。 缺点:当这这句话...
  • UITableView一种“目录视图或叫表视图”(英文名字table view),这种表视图以列表的形式显示或编辑信息,它由一列、多行组成。用户可以通过垂直滚动的方式导航到一个表视图的任意行上,并可以自定义每一行数据的...
  • 现在计算机的操作系统越来越想用英文版了,不是装逼,而是字符用正则处理十分方便,很多图书也是英文的,使用英文版的电脑学习曲线更平滑,就像李阳说的脱口而出。 ...
  • 在训练中添加抖动可以有效地工作,提高性能,其原因在于我们通过神经网络学习得到的假设函数(hypothesis)通常是平滑的,如Fig 1所示,而不是和Fig 2所示的这种不平滑的。 神经网络能学习到具有非连续性的函数,...
  • ScanFont一款功能强大的图片转文字软件,用户只要先用动笔手写一些字,然后...1、支持灰度和颜色 - 从简单的黑白到具有平滑透明度的32位颜色 2、直接导入EPS图形 - 帮助您将Adobe Illustrator图形转换为字体 3、
  • 简介: Shopkeeper一个多功能WordPress主题,...启用/禁用平滑页面加载过渡 使用自定义CSS扩展 附带一个入门子主题,用于高级定制 字体/排版设置 700多个Google Webfonts; Adobe Typekit集成插件; 2 Premium Webfonts
  • 4.8使用频域滤波器进行图像平滑291 4.8.1理想的低通滤波器291 4.8.2巴特沃斯低通滤波器295 [1] 4.8.3高斯低通滤波器298 4.8.4低通滤波的其他例子299 4.9使用频域滤波器的图像锐化302 4.9.1理想的高通滤波器303 ...
  • 文泉驿字体做得确实很漂亮,而且还是开源的,因此对于...关闭了平滑之 后,当字很小时又一堆在一处,而且英文字体很难看。在Ubuntu 5.10时这个问题基本上得到了解决,而到了6.06使用以前的设置方法已经不管用了,参
  • 二、英文分词基础知识 2.1场景 2.2 公式推导(naisy channel model) 2.3 动态规划 三、代码 3.1数据处理 3.2 平滑处理 3.3计算模型参数 3.4 viterbi算法 viterbi算法学习自然语言处理的基础算法,已经...
  • 转 http://forum.ubuntu.org.cn/viewtopic.php?t=18638文泉驿字体做得确实很漂亮,而且还是开源的,因此对于系统字体的美化我选择了文泉驿。可是有时在和其他人 交流...关闭了平滑 之后,当字很小时又一堆在一处,...
  • 高斯模糊

    千次阅读 2016-02-02 19:03:58
    高斯模糊,也叫高斯平滑英文为:Gaussian Blur,图像处理中常用的一种技术,主要用来降低图像的噪声和减少图像的细节。高斯模糊在许多图像处理软件中也得到了广泛的应用。二、高斯模糊的原理 1、模糊在图像中的...
  • 缓存和缓冲的概念十分容易引起混淆,其实如果用英文来表示的话可能会好一些,用英文表示,缓冲就是buffer,缓存就是cache,buffer有减轻,减震的作用,其实就是为了减少抖动而采取的平滑化方案,而后者cache真实...
  • 双三次插值,英文是Bicubic interpolation。双三次插值一种更加复杂的插值方式,它能创造出比双线性插值更平滑的图像边缘。双三次插值方法通常运用在一部分图像处理软件、打印机驱动程序和数码相机中,对原...
  • 机器人运动估计系列(番外篇)——从贝叶斯滤波到卡尔曼(上) 滤波理论在机器人状态估计里的重要性不言而喻,因此对滤波理论进行系统的了解非常有必要。本篇文章目的从贝叶斯滤波(BF)的角度来串联...英文原版:
  • Opencv入门系列六

    2021-02-02 20:07:30
    图像平滑处理对应的是英文Smoothing Images。图像平滑处理通常伴随图像模糊操作,因此图像平滑处理有时也被称为图像模糊处理,图像模糊处理对应的英文是Blurring Images。 均值滤波 方框滤波 高斯滤波 中值滤波 ...
  • opencv中的cvSmooth函数学习

    千次阅读 2013-04-03 20:54:57
    平滑处理“也称”模糊处理“,英文可以称为”blurring“,一项简单且使用频率很高的图像处理方法。平滑处理的用途有很多,但最常见的用来减少图像上的噪声或失真,还可以降低图像的分辨率。 目前opencv可以...
  • 指标又叫三重指数平滑移动平均指标,其英文全名为“Triple Exponentially Smoothed Average”,一种研究股价趋势的长期技术分析工具。 第一节 TRIX指标的原理和计算方法 一、TRIX指标的原理 TRIX指标根据...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 125
精华内容 50
关键字:

平滑是英文