精华内容
下载资源
问答
  • 最大间方差法(大津法OTSU)

    万次阅读 多人点赞 2016-07-23 16:15:19
    算法介绍最大间方差法是1979年由日本学者大津提出的,是一种自适应阈值确定的方法,又叫大津法,简称OTSU,是一种基于全局的二值化算法,它是根据图像的灰度特性,将图像分为前景和背景两个部分。当取最佳阈值时,...

    算法介绍

    最大类间方差法是1979年由日本学者大津提出的,是一种自适应阈值确定的方法,又叫大津法,简称OTSU,是一种基于全局的二值化算法,它是根据图像的灰度特性,将图像分为前景和背景两个部分。当取最佳阈值时,两部分之间的差别应该是最大的,在OTSU算法中所采用的衡量差别的标准就是较为常见的最大类间方差。前景和背景之间的类间方差如果越大,就说明构成图像的两个部分之间的差别越大,当部分目标被错分为背景或部分背景被错分为目标,都会导致两部分差别变小,当所取阈值的分割使类间方差最大时就意味着错分概率最小[1]。

    记T为前景与背景的分割阈值,前景点数占图像比例为w0w_0w0,平均灰度为u0u_0u0;背景点数占图像比例为w1w_1w1,平均灰度为u1u_1u1,图像的总平均灰度为uuu,前景和背景图象的方差,则有:
    u=w0×u0+w1×u1u = w_0 \times u_0+w_1 \times u_1u=w0×u0+w1×u1
    g=w0×(u0−u)2+w1×(u1−u)2g = w_0 \times (u_0-u)^2+w_1 \times (u_1-u)^2g=w0×(u0u)2+w1×(u1u)2
    联立上面两式可得:
    g=w0×w1×(u0−u1)2g = w_0 \times w_1 \times (u_0-u_1)^2g=w0×w1×(u0u1)2

    g=w01−w0×(u0−u)2g = \frac{w_0}{1-w_0} \times (u_0-u)^2g=1w0w0×(u0u)2
    当方差ggg最大时,可以认为此时前景和背景差异最大,此时的灰度T是最佳阈值。类间方差法对噪声以及目标大小十分敏感,它仅对类间方差为单峰的图像产生较好的分割效果。当目标与背景的大小比例悬殊时(例如受光照不均、反光或背景复杂等因素影响),类间方差准则函数可能呈现双峰或多峰,此时效果不好。直接用OTSU算法处理自然场景铭牌图片的部分结果实例如下:

    1
    图1.最大类间方差法二值化结果图1.最大类间方差法二值化结果1.

    代码实现

    (C语言版,VS2012+opencv249)
    注意,++和*的结合方式是由右向左,所以histogram[*p++]++ = (histogram[*(p++)])++

    #include "stdio.h"
    #include "cv.h"
    #include "highgui.h"
    #include "Math.h"
    
    int Otsu(IplImage* src);
    
    int main()
    {
    	IplImage* img = cvLoadImage("lena.jpg",0); //获取灰度图像img
    	IplImage* dst = cvCreateImage(cvGetSize(img), 8, 1);
    	int threshold = Otsu(img); //调用大津法求出最佳阈值
    	printf("otsu threshold = %d\n", threshold);
    	cvThreshold(img, dst, threshold, 255, CV_THRESH_BINARY); //用otsu的阈值二值化
    
    	cvNamedWindow( "img", 1 );
    	cvNamedWindow( "dst", 1 );
    	cvShowImage("img", img);
    	cvShowImage("dst", dst);
    
    
    	cvWaitKey(-1);
    
    	cvReleaseImage(&img);
    	cvReleaseImage(&dst);
    	
    	cvDestroyWindow( "img" );
    	cvDestroyWindow( "dst" );
    
    	return 0;
    }
    
    int Otsu(IplImage* src)  
    {  
    	int height=src->height;  
    	int width=src->width;      
    
    	//histogram  
    	float histogram[256] = {0};  
    	for(int i=0; i < height; i++)
    	{  
    		unsigned char* p=(unsigned char*)src->imageData + src->widthStep * i;  
    		for(int j = 0; j < width; j++) 
    		{  
    			histogram[*p++]++;  
    		}  
    	}  
    	
    	//normalize histogram & average pixel value 
    	int size = height * width;  
    	float u =0;
    	for(int i = 0; i < 256; i++)
    	{  
    		histogram[i] = histogram[i] / size;  
    		u += i * histogram[i];  //整幅图像的平均灰度
    	}  
    
    	int threshold;    
    	float maxVariance=0;  
    	float w0 = 0, avgValue  = 0;
    	for(int i = 0; i < 256; i++) 
    	{  
    		w0 += histogram[i];  //假设当前灰度i为阈值, 0~i 灰度像素所占整幅图像的比例即前景比例
    		avgValue  += i * histogram[i]; //avgValue/w0 = u0
    
    		float t = avgValue/w0 - u;  //t=u0-u
    		float variance = t * t * w0 /(1 - w0);  
    		if(variance > maxVariance) 
    		{  
    			maxVariance = variance;  
    			threshold = i;  
    		}  
    	}  
    
    	return threshold;  
    } 
    

    代码运行结果:
    2
    图2.otsu程序运行结果图2.otsu程序运行结果2.otsu

    代码下载:http://download.csdn.net/detail/u011285477/9584189

    博客链接:http://blog.csdn.net/u011285477/article/details/52004513

    参考资料:
    [1]Otsu N. A threshold selection method from gray-level histograms[J]. Automatica, 1975, 11(285-296): 23-27.

    展开全文
  • 设计模式的三分类及六原则

    万次阅读 2018-08-20 00:47:11
    总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元...

    一、设计模式的分类

    总体来说设计模式分为三大类:

    创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

    结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。

    行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

    其实还有两类:并发型模式和线程池模式。用一个图片来整体描述一下:

    二、设计模式的六大原则

    1、开闭原则(Open Close Principle)

    开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类。

    详细介绍:https://blog.csdn.net/lovelion/article/details/7537584

     

    2、里氏代换原则(Liskov Substitution Principle)

    里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。—— From Baidu 百科

    详细介绍:https://blog.csdn.net/lovelion/article/details/7540445

    3、依赖倒置原则(Dependence Inversion Principle)

    这个是开闭原则的基础,具体内容:真对接口编程,依赖于抽象而不依赖于具体。

    详解介绍:https://blog.csdn.net/lovelion/article/details/7562783

    4、接口隔离原则(Interface Segregation Principle)

    这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。还是一个降低类之间的耦合度的意思,从这儿我们看出,其实设计模式就是一个软件的设计思想,从大型软件架构出发,为了升级和维护方便。所以上文中多次出现:降低依赖,降低耦合。

    详细介绍:https://blog.csdn.net/lovelion/article/details/7562842

    5、迪米特法则(最少知道原则)(Demeter Principle)

    为什么叫最少知道原则,就是说:一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。

    详细介绍:https://blog.csdn.net/lovelion/article/details/7563445

    6、单一职责原则(Single-Responsibility-Principle)

    核心:一个类只负责一个功能领域中相应的职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。 

    思想:如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。

    详细介绍:https://blog.csdn.net/lovelion/article/details/7536542

     

     

     

    展开全文
  • 一、性能测试的八大类

    万次阅读 2018-06-10 16:55:12
    1、简述性能测试的八大类,并对这八大类进行描述。答:性能测试八大类包括:性能测试、负载测试、压力测试、配置测试、并发测试、容量测试、可靠性测试、失败测试。 性能测试:性能测试是为了描述测试对象与性能...

    1、简述性能测试的八大类,并对这八大类进行描述。

    答:性能测试八大类包括:性能测试、负载测试、压力测试、配置测试、并发测试、容量测试、可靠性测试、失败测试。

          性能测试:性能测试是为了描述测试对象与性能相关的特征并对其进行评价而实施和执行的一类测试。它主要通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项指标进行测试。通常把性能测试、负载测试、压力测试等统称为性能测试。

        负载测试:是通过逐渐增加系统的负载,测试系统性能的变化,并最终确定在满足系统性能指标的情况下,系统所能承受的最大负载量的测试。简而言之,负载测试时通过逐步加压的方式来确定系统的处理能力和能够承受的各项阈值。

        压力测试:是通过逐步增加系统的负载,测试系统性能的变化,并最终确定在什么负载条件下,系统性能处于失效状态,并获得系统能提供的最大服务级别的测试。压力测试是逐步增加负载,使系统某些资源达到饱和和甚至失效。

        配置测试:主要是通过对被测试软件的软硬件配置进行测试,找到系统各项资源的最优分配原则。配置测试能充分利用有限的软硬件资源,发挥系统的最佳处理能力,同时可以将其与其他性能测试类型联合应用,从而为系统提供重要依据。

        并发测试:测试多个用户同时访问同一个应用、同一个模块或者数据记录时是否存在死锁或者其他性能问题,几乎所有的性能测试都会涉及一些并发测试。

        容量测试:在一定的软、硬件条件下,在数据库中构造不同数量级的记录数量,通过运行一种或多种业务场景在一定虚拟用户数量的情况下,获取不同数量级别的性能指标,从而得到数据库能够处理的最大会话能力,最大容量等。系统可处理同时在线的最大用户数,通常和数据库有关。

        可靠性测试:通过给系统加载一定的业务压力(如CPU资源在70%~90%的使用率)的情况下,运行一段时间,检查系统是否稳定因为运行时间较长,通常可以测试出系统是否有内存泄漏等问题。

        失败测试:对于有冗余备份和负载均衡的系统,通过失败测试来检验如果系统局部发生故障,用户能否继续使用系统,用户受到多大的影响,如几台机器做均衡负载,一台或几台机器垮掉后系统能够承受的压力。

    展开全文
  • MATLAB实现最大间方差算法

    万次阅读 2017-02-19 13:54:39
    Otsu算法(律法或最大间方差法)最大间方差法的MATLAB实现

    Otsu算法(大律法或最大类间方差法)

    最大类间方差法是由日本学者大津(Nobuyuki Otsu)于1979年提出的,是一种自适应的阈值确定的方法,又叫大津法,简称OTSU。它是按图像的灰度特性,将图像分成背景和目标2部分。背景和目标之间的类间方差越大,说明构成图像的2部分的差别越大,当部分目标错分为背景或部分背景错分为目标都会导致2部分差别变小。因此,使类间方差最大的分割意味着错分概率最小。
    Matlab中, graythresh函数使用最大类间方差法获得图像的阈值。

    最大类间方差原理

    原理中公式推导来源—Rachel zhang 的专栏

    对于图像I(x,y),前景(即目标)和背景的分割阈值记作T,属于前景的像素点数占整幅图像的比例记为ω0,其平均灰度μ0;背景像素点数占整幅图像的比例为ω1,其平均灰度为μ1。图像的总平均灰度记为μ,类间方差记为g。
    假设图像的背景较暗,并且图像的大小为M×N,图像中像素的灰度值小于阈值T的像素个数记作N0,像素灰度大于阈值T的像素个数记作N1,则有:
          ω0=N0/ M×N (1)
          ω1=N1/ M×N (2)
          N0+N1=M×N (3)
          ω0+ω1=1 (4)
          μ=ω0*μ0+ω1*μ1 (5)
          g=ω0(μ0-μ)^2+ω1(μ1-μ)^2 (6)
    将式(5)代入式(6),得到等价公式: g=ω0ω1(μ0-μ1)^2 (7)
    采用遍历的方法得到使类间方差最大的阈值T,即为所求。

    算法实现

    clc,clf,clear all,close all;
    figure(1);
    Ip=imread('F:\img\car.jpg');
    Ip=rgb2gray(Ip);
    [ma,na]  = size(Ip);
    %-------------------------------------------------%
    %-------------------------------------------------%
    %最大类方间差
    a = Ip;                                 
    [m,n]=size(a);                           % 图像大小
    max_g = 0;
    %t = 180;
    for t = 0 : 255
        N0 = 0;
        N1 = 0;
        u0 = 0.0;
        u1 = 0.0;
        a = double(a);                       % 强制转化,否则平均灰度值将无
                                             % 法计算
        for i = 1:m   
            for j = 1:n   
                if a(i,j) <= t   
                    N0 = N0 + 1;         % 小于阈值的像素点数目
                    u0 = u0 + a(i,j);    % 目标总灰度
                else   
                    N1 = N1 + 1;         % 大于阈值的像素点数目
                    u1 = u1 + a(i,j);    % 背景总灰度
                end   
            end   
        end
        w0 = N0 / (m*n);                    % 初始化
        w1 = N1 / (m*n);
        u0 = u0 / N0;
        u1 = u1 / N1;
        u = w0 * u0 + w1 * u1;
        g = w0 * (u0 - u)^2 + w1 * (u1 - u)^2;
        if (g >= max_g)
            max_g = g;
            T = t;
        end
    end
    %------------------------------------------%
    %------------------------------------------%
    % 二值化
    for i=1:m   
        for j=1:n   
            if a(i,j) < T   
                a(i,j) = 0;   
            else   
                a(i,j) = 255;   
            end   
        end   
    end
    subplot(1,2,1),imshow(mat2gray(Ip));
    title('原图');
    subplot(1,2,2),imshow(mat2gray(a)),title('斑块');
    

    实验结果:

    这里写图片描述

    展开全文
  • IT行业职位分为六大类

    万次阅读 2019-06-13 07:46:47
    IT行业职位分为六大类 一:开发:前端开发、后端开发、移动开发 二:测试:功能测试、性能测试、自动化测试 三:运维:Linux运维、桌面运维、python自动化运维、一体化智能运维 四:产品:产品经理 五:运营:...
  • SQL语言分为五大类

    万次阅读 2018-08-11 12:41:40
    SQL语言分为五大类: DDL(数据定义语言) - Create、Alter、Drop 这些语句自动提交,无需用Commit提交。(Data Definition Language) DQL(数据查询语言) - Select 查询语句不存在提交问题。DML(数据操纵语言) - ...
  • POS机一般分为5大类

    万次阅读 2017-07-14 18:08:33
    POS机一般分为5大类: 1:0费率,医院,救援,公益类,全部为0费率。 2:一般民生类0.38%,超市,加油站,家电,航空售 票,通讯营业厅等。 3:普通民生类0.78%,茶叶店,五金店,百货,便利店,面包铺,服装店,...
  • Docker 的主要用途,目前有三大类

    万次阅读 2018-08-15 17:46:00
    Docker 的主要用途,目前有三大类。 (1)提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。 (2)提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。 ...
  • BootstrapClassLoader是顶级加载器,默认加载的是%JAVA_HOME%中lib下的jar包和class文件,他也是ExtClassLoader的父类,但是不是继承(extends)关系,是ExtClassLoder中有一个parent变量是BootstrapClassLoader ...
  • 最大间方差法是由日本学者大津(Nobuyuki Otsu)于1979年提出的,是一种自适应的阈值确定的方法,又叫大津法,简称...算法分类的原理是让背景和目标之间的间方差最大,因为背景和目标之间的间方差越,说明构成...
  • 供应链金融三大类模式

    万次阅读 2018-07-23 23:17:09
    供应链金融三模式的最全对比分析 2017-08-25 15:56 供应链金融可以解决中小企业供应链中资金分配的不平衡问题,打通上下游物流链、资金链、商流、信息流,提升整个供应链的群体竞争力。因此,供应链金融,备受中...
  • java中流程控制语句(三大类)

    千次阅读 2017-10-16 22:12:18
     * 三大类:  * 顺序结构语句:最简单的  * 代码是从main()方法中依次从上往下执行  * 选择结构语句  * if语句  * switch语句  * 循环结构语句  * for:普通for循环  * java高级特性:集合:增强for循环...
  • /****************************************以下部分内容为转载**********************************************/ /*****转自:... 最大间方差法是由日本学者
  • 最大间方差法(OTSU)求阈值

    万次阅读 2013-07-27 12:44:58
    最大间方差的基本思想是使用一个阈值将整个数据分成两个,假如两个之间的方差最大,那么这个阈值就是最佳的阈值。 方差的定义 假设使用一个阈值T,将灰度级[1 L]分割成两个[1 T-1]和[T L],那么有 ...
  • 最大间方差法(大津法,OTSU)

    万次阅读 2011-07-20 10:34:12
    最大间方差法是由日本学者大津(Nobuyuki Otsu)于1979年提出的,是一种自适应的阈值确定的方法,又叫大津法,简称OTSU...背景和目标之间的间方差越,说明构成图像的2部分的差别越,当部分目标错分为背景或部分背景错
  • 原理 基本思想: 把一幅图像分成两部分C0...'自己的最大间方差' ); subplot( 211 ); imshow(im2bw(x,graythresh(x)), [] ); title( 'matlab自带' ); 效果 可以看到自己编写的与matlab自带效果相同。
  • 机器学习系列——机器学习三大类

    千次阅读 2018-01-19 15:22:24
    根据机器学习的应用,一般说来,机器学习有三种算法: 监督式学习(Supervised Learning, SL) ...监督学习是指原始数据中既有特征值也有标签值的机器学习。...属于这一算法的有马尔可夫决策过程。
  • #!/usr/bin/python print "hello world"

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,872,241
精华内容 2,348,896
关键字:

大类