精华内容
下载资源
问答
  • matlab开发-分形时间周期分析的半方差方法和比例窗方差方法。分形时间序列分析的半方差法和比例窗方差法。
  • 在考虑系统旋转备用的容量成本和能量成本、因购买旋转备用而减少的停电损失,以及旋转备用效益的离散程度的基础上,引入风险偏好系数,并采用证券投资组合中的加权半方差度量风险。以期望旋转备用效益最大和风险最小...
  • 以含风电/光伏发电的电力系统为分析对象,以蒙特卡罗计算结果为参考值,以输出随机变量累积分布的方差和的根均值为评价指标,比较分析了各种输入随机变量和不同级数展开下不变量概率潮流计算结果的准确性,并...
  • 多产品报童模型的风险研究,吴志洋,何勇,本文采用损失函数来对多产品报童问题进行分析,与利润函数下的结果进行比较。进而采用半方差法来刻画风险,并将其拓展到衡量多产
  • 自从Markowitz在1952年发表"Portfolio Selection"以来,金融学家已设计了不少的风险度量方法,如方差法、下半方差法、平均偏差法、最大偏差法、VaR, 等等. 然而,这些方法有...
  • 树的opencv打卡Day5

    2020-04-30 11:53:40
    1 最大类间方差法(大津阈值法) 大津法(OTSU)是一种确定图像二值化分割阈值的算法,由日本学者大津于1979年提出。从大津法的原理上来讲,该方法又称作最大类间方差法,因为按照大津法求得的阈值进行图像二值化...

    图像分割/二值化

    1 最大类间方差法(大津阈值法)

    大津法(OTSU)是一种确定图像二值化分割阈值的算法,由日本学者大津于1979年提出。从大津法的原理上来讲,该方法又称作最大类间方差法,因为按照大津法求得的阈值进行图像二值化分割后,前景与背景图像的类间方差最大。

    它被认为是图像分割中阈值选取的最佳算法,计算简单,不受图像亮度和对比度的影响,因此在数字图像处理上得到了广泛的应用。它是按图像的灰度特性,将图像分成背景和前景两部分。因方差是灰度分布均匀性的一种度量,背景和前景之间的类间方差越大,说明构成图像的两部分的差别越大,当部分前景错分为背景或部分背景错分为前景都会导致两部分差别变小。因此,使类间方差最大的分割意味着错分概率最小。

    应用: 是求图像全局阈值的最佳方法,应用不言而喻,适用于大部分需要求图像全局阈值的场合。

    优点: 计算简单快速,不受图像亮度和对比度的影响。

    缺点: 对图像噪声敏感;只能针对单一目标分割;当目标和背景大小比例悬殊、类间方差函数可能呈现双峰或者多峰,这个时候效果不好。

    原理非常简单,涉及的知识点就是均值、方差等概念和一些公式推导。为了便于理解,我们从目的入手,反推一下这著名的OTSU算法。

    求类间方差:

    OTSU算法的假设是存在阈值TH将图像所有像素分为两类C1(小于TH)和C2(大于TH),则这两类像素各自的均值就为m1、m2,图像全局均值为mG。同时像素被分为C1和C2类的概率分别为p1、p2。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    2.自适应阈值

    它的思想不是计算全局图像的阈值,而是根据图像不同区域亮度分布,计算其局部阈值,所以对于图像不同区域,能够自适应计算不同的阈值,因此被称为自适应阈值法。(其实就是局部阈值法)

    如何确定局部阈值呢?可以计算某个邻域(局部)的均值、中值、高斯加权平均(高斯滤波)来确定阈值。值得说明的是:如果用局部的均值作为局部的阈值,就是常说的移动平均法。
    参考代码:

    import cv2
    import numpy as np
    from matplotlib import pyplot as plt
    
    img = cv2.imread('719100.jpg',0)
    ret , thresh1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY)
    ret , thresh2 = cv2.threshold(img,127,255,cv2.THRESH_BINARY_INV)
    ret , thresh3 = cv2.threshold(img,127,255,cv2.THRESH_TRUNC)
    ret , thresh4 = cv2.threshold(img,127,255,cv2.THRESH_TOZERO)
    ret , thresh5 = cv2.threshold(img,127,255,cv2.THRESH_TOZERO_INV)
    
    titles = ['original image','Binary','binary-inv','trunc','tozero','tozero-inv']
    images = [img,thresh1,thresh2,thresh3,thresh4,thresh5]
    
    for i in range(6):
        plt.subplot(2,3,i+1),plt.imshow(images[i],'gray')
        plt.title(titles[i])
        plt.xticks([]),plt.yticks([])
    
    plt.show()
    

    参考代码2:

    import cv2
    import numpy as np
    from matplotlib import pyplot as plt
    
    img = cv2.imread('719100.jpg',0)
    #中值滤波
    img = cv2.medianBlur(img,5)
    
    ret , th1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY)
    # 11为block size,2为C值
    th2 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C , cv2.THRESH_BINARY,11,2 )
    th3 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C , cv2.THRESH_BINARY,11,2)
    
    titles = ['original image' , 'global thresholding (v=127)','Adaptive mean thresholding',
              'adaptive gaussian thresholding']
    images = [img,th1,th2,th3]
    
    for i in range(4):
        plt.subplot(2,2,i+1),plt.imshow(images[i],'gray')
        plt.title(titles[i])
        plt.xticks([]),plt.yticks([])
    
    plt.show()
    
    import cv2
    import numpy as np
    from matplotlib import pyplot as plt
    img = cv2.imread('719100.jpg',0)
    
    ret1,th1=cv2.threshold(img,127,255,cv2.THRESH_BINARY)
    
    ret2,th2=cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
    #(5,5)为高斯核的大小,0为标准差
    blur= cv2.GaussianBlur(img,(5,5),0)
    
    #阀值一定要设为0
    ret3,th3=cv2.threshold(blur,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
    
    images=[img,0,th1,
             img,0,th2,
             img,0,th3]
    titles =['original noisy image','histogram','global thresholding(v=127)',
              'original noisy image','histogram',"otsu's thresholding",
              'gaussian giltered image','histogram',"otus's thresholding"]
    #这里使用了pyplot中画直方图的方法,plt.hist要注意的是他的参数是一维数组
    #所以这里使用了(numpy)ravel方法,将多维数组转换成一维,也可以使用flatten方法
    for i in range(3):
        plt.subplot(3,3,i*3+1),plt.imshow(images[i*3],'gray')
        plt.title(titles[i*3]),plt.xticks([]),plt.yticks([])
        plt.subplot(3,3,i*3+2),plt.hist(images[i*3].ravel(),256)
        plt.title(titles[i*3+1]),plt.xticks([]),plt.yticks([])
        plt.subplot(3,3,i*3+3),plt.imshow(images[i*3+2],'gray')
        plt.title(titles[i*3+2]),plt.xticks([]),plt.yticks([])
        
    plt.show()
    
    展开全文
  • menas聚类进行灰度图像分割,计算各个分割区域像素的均值和方差,通过分析各区域像素均值和方差发现随机误差项具有异方差性,应用加权最小平方法构建新的能量函数,采用各个分割区域像素方差倒数作为权重因子,...
  • 插值算法:克里金(Kriging)

    千次阅读 2019-09-17 14:16:38
    克里金(Kriging) 克里金算法提供的变异函数模型有高斯、线形、球形、阻尼正弦和指数模型等,在对气象要素场插值时球形模拟比较好。既考虑了储层参数的随机性,有考虑了储层参数的相关性,在满足插值方差最小...

    克里金法(Kriging

    克里金算法提供的半变异函数模型有高斯、线形、球形、阻尼正弦和指数模型等,在对气象要素场插值时球形模拟比较好。既考虑了储层参数的随机性,有考虑了储层参数的相关性,在满足插值方差最小的条件下,给出最佳线性无偏插值,同时还给出了插值方差。

    与传统的插值方法(如最小二乘法、三角剖分法、距离加权平均法)相比,克里金法的优势:   

    1、在数据网格化的过程中考虑了描述对象的空间相关性质,使插值结果更科学、更接近于实际情况;

    2、能给出插值的误差(克里金方差),使插值的可靠程度一目了然

    插值方差:就是指实际参数值 zv 与估计值 zv* 两者偏差平方的数学期望:

    插值算法(四):克里金法(KRIGING)  

    而插值点的 zv*,通过N个离散点获得;

    插值算法(四):克里金法(KRIGING) 其中λ与N个离散点指的是加权系; 变差函数的理论模型  

    变差函数与随机变量的距离h存在一定的关系,这种关系可以用理论模型表示。常用的变差函数理论模型包括球状模型、高斯模型与指数模型(还包括:具基台值线性模型、幂函数模型、无基台值线性模型);

    1、   球状模型公式:

    插值算法(四):克里金法(KRIGING)  

    2、   高斯模型公式:

    插值算法(四):克里金法(KRIGING)  

    式中:a不是变程,高斯模型的变程约为√3a

    3、   指数模型公式

    插值算法(四):克里金法(KRIGING)  

    式中:a不是变程,指数模型的变程约为3a

    4、   具基台值线性模型

    插值算法(四):克里金法(KRIGING)  

    式中:k为直线斜率0  时线性化为γ(hi)=b0+b1X1,i

    5、   幂函数模型

    插值算法(四):克里金法(KRIGING)  

    式中:  为幂指数;不存在基台值。两边取对数得ln(γ(h))=αlnh,线性化为γ(hi)=b1X1,i

    6、   无基台值线性模型

    插值算法(四):克里金法(KRIGING)  

    式中:k为直线斜率;不存在基台值和变程,当h>0, γ(hi)=b0+b1X1,i

    普通克里格方法的基本步骤如下

    插值算法(四):克里金法(KRIGING)

    插值算法(四):克里金法(KRIGING)

    转载于:https://my.oschina.net/qihaitao/blog/411208

    展开全文
  • 应用改进的K-means 聚类将原图像分割为几个区域,利用各区域方差倒数做为权重,建立区域误差测度函数。应用改进直接二值搜索方法最小化初始图像和色调图像的误差,得到最优的数字色调图像。模拟结果表明了提出...
  • OpenCV:图像阈值操作

    2018-06-20 15:59:46
    最大类间方差法(otsu)的公式推导: 记t为前景与背景的分割阈值,前景点数占图像比例为w0,平均灰度为u0;背景点数占图像比例为w1,平均灰度为u1。 则图像的总平均灰度为:u=w0*u0+w1*u1。 前景和背景图象的方差...

    目录

     

    大津阈值法(OTSU)

     

    固定阈值法

     

    自适应阈值

     

    双阈值法

     

    半阈值法


    大津阈值法(OTSU)

    最大类间方差法(otsu)的公式推导:

    记t为前景与背景的分割阈值,前景点数占图像比例为w0,平均灰度为u0;背景点数占图像比例为w1,平均灰度为u1。

    则图像的总平均灰度为:u=w0*u0+w1*u1。

    前景和背景图象的方差:g=w0*(u0-u)*(u0-u)+w1*(u1-u)*(u1-u)=w0*w1*(u0-u1)*(u0-u1),此公式为方差公式。

    查找所有灰度级中的最大类方差,并返回最大类方差所对应的的灰度级,就是前景与背景的分割阈值。

    #include <iostream>
    #include "opencv2/highgui/highgui.hpp"
    #include "opencv2/opencv.hpp"
    
    int OTSU(cv::Mat srcImage);
    
    const char* WINDOW = "主窗口";
    
    int main()
    {
    	cv::Mat srcImage, srcGray;
    	cv::namedWindow(WINDOW,cv::WINDOW_AUTOSIZE);
    	//加载图像
    	srcImage = cv::imread("Qt.png",1);
    	if (!srcImage.data)
    	{
    		std::cout << "加载图像失败"<<std::endl;
    		return -1;
    	}
    	resize(srcImage, srcImage,cv::Size(srcImage.cols/3, srcImage.rows/3));
    	imshow(WINDOW, srcImage);
    	//灰度转换
    	cvtColor(srcImage, srcGray, CV_RGB2GRAY);
    	cv::imshow("srcGray", srcGray);
    	
    	//调用OTSU阈值算法得到阈值
    	int  ostuThreshold = OTSU(srcGray);
    	std::cout << ostuThreshold << std::endl;
    	
    	// 定义输出结果图像
    	cv::Mat otsuResultImage =cv::Mat::zeros(srcGray.rows, srcGray.cols, CV_8UC1);
    	
    	// 利用得到的阈值实现二值化操作
    	for (int i = 0; i < srcGray.rows; i++)
    	{
    		for (int j = 0; j < srcGray.cols; j++)
    		{
    			//满足大于阈值ostuThreshold置255
    			if (srcGray.at<uchar>(i, j) > ostuThreshold)
    			{
    				otsuResultImage.at<uchar>(i, j) = 255;
    			}
    			else
    			{
    				otsuResultImage.at<uchar>(i, j) = 0;
    			}
    		}
    	}
    	imshow("otsuResultImage", otsuResultImage);
    	cv::waitKey(0);
    	cv::destroyAllWindows();
    	return 0;
    }
    
    /*
    @ 大津阈值法函数实现
    @ srcImage:输入图像,灰度图
    @ return int 阈值
    */
    int OTSU(cv::Mat srcImage)
    {
    	int nCols = srcImage.cols;
    	int nRows = srcImage.rows;
    	int threshold = 0;
    	// 初始化统计参数
    	int nSumPix[256];
    	float nProDis[256];
    	for (int i = 0; i < 256; i++)
    	{
    		nSumPix[i] = 0;
    		nProDis[i] = 0;
    	}
    	//统计灰度级中每个像素在整幅图像中的个数 
    	for (int i = 0; i < nRows; i++)
    	{
    		for (int j = 0; j < nCols; j++)
    		{
    			nSumPix[(int)srcImage.at<uchar>(i, j)]++;
    		}
    	}
    
    	//计算每个灰度级占图像中的概率分布,平均数
    	for (int i = 0; i < 256; i++)
    	{
    		nProDis[i] = (float)nSumPix[i] / (nCols * nRows);
    	}
    
    	// 遍历灰度级[0,255],计算出最大类间方差下的阈值  
    	float w0, w1, u0_temp, u1_temp, u0, u1, delta_temp;
    	double delta_max = 0.0;
    
    	for (int i = 0; i < 256; i++)
    	{
    		// 初始化相关参数
    		w0 = w1 = u0_temp = u1_temp = u0 = u1 = delta_temp = 0;
    		for (int j = 0; j < 256; j++)
    		{
    			//背景部分 
    			if (j <= i)
    			{
    				//当前i为分割阈值,第一类总的概率  
    				w0 += nProDis[j];
    				u0_temp += j * nProDis[j];
    			}
    			//前景部分   
    			else
    			{
    				// 当前i为分割阈值,第一类总的概率
    				w1 += nProDis[j];
    				u1_temp += j * nProDis[j];
    			}
    		}
    		// 分别计算各类的平均灰度 
    		u0 = u0_temp / w0;
    		u1 = u1_temp / w1;
    		delta_temp = (float)(w0 *w1* pow((u0 - u1), 2));
    		// 依次找到最大类间方差下的阈值    
    		if (delta_temp > delta_max)
    		{
    			delta_max = delta_temp;
    			threshold = i;
    		}
    	}
    	return threshold;
    }

     

    固定阈值法

        图像二值化其实就是阈值操作,先设定一个阈值,然后将灰度图的单通道像素值与固定阈值进行比较,根据比较的结果(大于或者小于),划分为两种的不同的颜色或者灰度,对于二值图像可以更好更好进行边缘检测,然后寻找轮廓。

    流程图

    固定阈值操作:Threshold()函数

        函数Threshold()对单通道数组应用固定阈值操作,阈值可以设定为初始值或者加上一个轨迹条进行控制。该函数的典型应用是对灰度图像进行阈值操作得到二值图像,中间可以进行一下滤波操作,滤除掉很小或者很大像素值的图像点。(注意标红的地方)

    函数原型

    double threshold( InputArray src, OutputArray dst,
                                   double thresh, double maxval, int type );

    src:输入图像或输入数组,单通道灰度图,8或32位浮点类型的Mat。

    dst:输出图像或输出数组,经过阈值操作后得到的二值图。

    thresh:设定的阈值。

    maxval:最大范围值,一般为255,根据最后一个参数type的类型来确定。

    type:阈值类型,通常使用的有5种类型,分别是CV_THRESH_BINARYCV_THRESH_BINARY_INVCV_THRESH_TRUNCCV_THRESH_TOZEROCV_THRESH_TOZERO_INV,这5中类型可以分别用数字0、1、2、3、4来代替使用,不要超过4,不然会报错(还有一个大津阈值法是8)。

    5种类型分别对应的阈值操作方法:

    CV_THRESH_BINARY(可以用标识符0代替,意思是大于阈值为maxval(白),否则为0(黑))

    CV_THRESH_BINARY_INV(可以用标识符1代替,意思是大于阈值为0(黑),否则为maxval(白))

    CV_THRESH_TRUNC(可以用标识符2代替,意思是大于阈值为threshold(阈值),否则为src(x,y)(本色或原色))

    CV_THRESH_TOZERO(可以用标识符3代替,意思是大于阈值为src(x,y)(本色或原色),否则为0(黑))

    CV_THRESH_TOZERO_INV(可以用标识符4代替,意思是大于阈值为0(黑),否则为src(x,y)(本色或原色))

    代码示例:

    /************************************************************************
    <*@创建者:OYXL
    <*@时间:2018/6/20
    <*@实现功能:图片或者视频进行二值化,可选择
    <*@备注:图片二值化,显示图像必须和二值响应函数放在一块,不然不会执行
    <*@备注:on_Threshold( int, void* );不可更改参数
    ************************************************************************/
    #include "opencv2/opencv.hpp"
    #include "iostream"
    
    using namespace std;
    using namespace cv;
    
    int Picture();
    int Video();
    void on_Threshold( int, void* );//回调函数
    void ChooseMode();
    
    Mat img,gray,binary;
    int thr=100;
    int num=0;
    int BinaryType=2;
    
    int main()
    {
    	ChooseMode();
    	if (num==1)
    	{
    		Picture();
    	}
    	else if (num==2)
    	{
    		Video();
    	}
    	return 0;
    }
    //<图片二值化函数
    int Picture()
    {
    	namedWindow("TrackBar", CV_WINDOW_AUTOSIZE); //create a window called "Control"
    	createTrackbar("THR", "TrackBar", &thr, 255,on_Threshold); //Hue (0 - 180)
    	img=imread("F:\\磊神图片\\9527.png");
    	if (!img.data)
    	{
    		cout << "picture failed to load !" << endl;
    		return -1;
    	}
    	cvtColor(img, gray, CV_BGR2GRAY);//<必须先进行二值化操作,不然得到的二值图是彩色的
    	GaussianBlur(gray, gray, Size(15, 15), 0, 0);
    	on_Threshold(0,0);
    	//threshold(gray, binary, thr, 255, 4);
    	imshow("src", img);
    	waitKey(0);
    }
    //<视频二值化函数
    int Video()
    {
    	namedWindow("TrackBar", CV_WINDOW_AUTOSIZE); //create a window called "Control"
    	createTrackbar("THR", "TrackBar", &thr, 255,0); //Hue (0 - 180)
    	VideoCapture capture("F:\\磊神视频\\noglasses.avi");
    	while (true)
    	{
    		capture >> img;
    		if (img.empty())	//判断摄像头是否打开  
    		{
    			cout << "Video failed to load !" << endl;
    			return -1;
    		}
    		cvtColor(img, gray, CV_BGR2GRAY);
    		GaussianBlur(gray, gray, Size(15, 15), 0, 0);
    		threshold(gray, binary, thr, 255, BinaryType);
    		imshow("src", img);
    		imshow("binary image", binary);
    		waitKey(1);
    	}
    }
    /************************************************************************
    <*@阈值回调函数
    <*@显示二值图片需要放在这里,响应一次,显示一次
    ************************************************************************/
    void on_Threshold( int, void* )
    {
    	//<调用阈值函数
    	threshold(gray,binary,thr,255,BinaryType);
    	imshow("binary image", binary);
    }
    void ChooseMode()
    {
    	cout<<"Please enter the type you want to select:"<<endl;
    	cout<<"0、THRESH_BINARY"<<endl;			//<大于阈值为白,小于为黑
    	cout<<"1、THRESH_BINARY_INV"<<endl;		//<大于阈值为黑,小于为白
    	cout<<"2、THRESH_TRUNC"<<endl;			//<大于阈值为阈值,小于为原值
    	cout<<"3、THRESH_TOZERO"<<endl;			//<大于阈值为原值,小于为黑
    	cout<<"4、THRESH_TOZERO_INV"<<endl;		//<小于阈值为原值,于为黑
    	cin>>BinaryType;
    	cout<<"Please enter the mode you want to select:"<<endl;
    	cout<<"1、Picture Mode"<<endl;
    	cout<<"2、Video Mode"<<endl;
    	cin>>num;
    }

    代码分析:

        示例代码中可以分别对图片和视频进行阈值操作,不过有些地方需要注意,对于图片来说,需要添加轨迹条响应函数(跟鼠标响应函数一样),而视频则不需要,可以直接使用Threshold()函数,为了适应轨迹条的阈值,需要将显示二值图放在轨迹条响应函数里面,每滑动一次轨迹条,就显示一次图片,轨迹条响应函数参数不可更改。另外,注意图片和视频的路径是否正确。

    效果图:

     

    自适应阈值

    adaptiveThreshold函数:通过计算每个像素位置周围的b*b区域的加权平均值然后减去常数C得到阈值,b为blockSize。相对于一般的阈值化操作,当图像中出现较大的明暗差异时,自适应阈值法非常有效。

    void adaptiveThreshold( InputArray src, OutputArray dst,
                                         double maxValue, int adaptiveMethod,
                                         int thresholdType, int blockSize, double C );
    src 8位单通道图像。
    dst 与src具有相同大小和相同类型的目标图像
    maxValue 非0的最大像素值
    adaptiveMethod 要使用的自适应阈值算法,0:ADAPTIVE_THRESH_MEAN_C,1: ADAPTIVE_THRESH_GAUSSIAN_C
    thresholdType 阈值类型必须是THRESH_BINARYTHRESH_BINARY_INV
    blockSize 用于计算像素阈值的像素邻域的大小:3,5,7等。
    C 从平均值或加权平均值中减去常数。通常情况下,它是正数,但也可能为零或负数。
    #include "opencv2/imgproc/imgproc.hpp"
    #include "opencv2/highgui/highgui.hpp"
    #include <iostream>
    
    using namespace std;
    using namespace cv;
    
    int main()
    {
    	Mat srcImage, srcGray;
    	// 图像读取及判断
    	srcImage = cv::imread("Qt.png");
    	if (!srcImage.data)
    	{
    		cout << "-------- 加载图像失败 ---------"<<endl;
    		return -1;
    	}
    	resize(srcImage, srcImage,Size(srcImage.cols/3, srcImage.rows/3));
    	cv::imshow("主窗口", srcImage);
    		
    	//灰度转换
    	cvtColor(srcImage, srcGray, CV_RGB2GRAY);
    	imshow("srcGray", srcGray);
    	
    	Mat dstImage;
    	//初始化自适应阈值参数
    	int blockSize = 5;
    	int constValue = 10;
    	const int maxVal = 255;
    	//初始化自适应方法和阈值类型
    	int adaptiveMethod = 0;
    	int thresholdType = 1;
    	// 图像自适应阈值操作
    	adaptiveThreshold(srcGray, dstImage, maxVal, adaptiveMethod, thresholdType, blockSize,constValue);
    	imshow("dstImage", dstImage);
    	waitKey(0);
    	destroyAllWindows();
    	return 0;
    }

     

    双阈值法

    #include "opencv2/imgproc/imgproc.hpp"
    #include "opencv2/highgui/highgui.hpp"
    #include <iostream>
    
    using namespace cv;
    using namespace std;
    
    int main()
    {
    	Mat srcImage;
    	//图像读取及判断
    	srcImage = cv::imread("Qt.png");
    	if (!srcImage.data)
    	{
    		cout << "---------- 加载图像失败 ----------" << endl;
    		return -1;
    	}
    	resize(srcImage, srcImage,Size(srcImage.cols/3, srcImage.rows / 3));
    	imshow("主窗口", srcImage);
    	//灰度转换
    	Mat srcGray;
    	cvtColor(srcImage, srcGray, CV_RGB2GRAY);
    	imshow("srcGray", srcGray);
    	//初始化阈值参数
    	const int maxVal = 255;
    	int low_threshold = 150;
    	int high_threshold = 210;
    	Mat dstTempImage1, dstTempImage2, dstImage;
    	//小阈值对源灰度图像进行阈值化操作
    	threshold(srcGray, dstTempImage1,low_threshold, maxVal, cv::THRESH_BINARY);
    	//大阈值对源灰度图像进行阈值化操作
    	threshold(srcGray, dstTempImage2,high_threshold, maxVal, cv::THRESH_BINARY_INV);
    	//矩阵与运算得到二值化结果
    	bitwise_and(dstTempImage1,dstTempImage2, dstImage);
    	imshow("dstImage", dstImage);
    	waitKey(0);
    	destroyAllWindows();
    	return 0;
    }

     

    半阈值法

    #include "opencv2/imgproc/imgproc.hpp"
    #include "opencv2/highgui/highgui.hpp"
    #include <iostream> 
    
    using namespace std;
    using namespace cv;
    
    int main()
    {
    	// 读取源图像及判断
    	Mat srcImage = imread("Qt.png");
    	if (!srcImage.data)
    	{
    		cout << "" << endl;
    		return -1;
    	}
    	resize(srcImage, srcImage,Size(srcImage.cols/3, srcImage.rows/3));
    	imshow("主窗口", srcImage);
    	// 转化为灰度图像
    	Mat srcGray;
    	cvtColor(srcImage, srcGray, CV_RGB2GRAY);
    	imshow("srcGray", srcGray);
    	// 初始化阈值参数
    	const int maxVal = 255;
    	int thresholdVal = 200;
    	Mat dstTempImage, dstImage;
    	// 阈值对源灰度图像进行阈值化操作
    	threshold(srcGray, dstTempImage,thresholdVal, 255, THRESH_BINARY);
    	// 矩阵与运算得到二值化结果
    	bitwise_and(srcGray, dstTempImage, dstImage);
    	imshow("dstImage", dstImage);
    	waitKey(0);
    	destroyAllWindows();
    	return 0;
    }

    展开全文
  • 李颖新等人[4]认为应该在此基础上考虑方差对样本分类的影响,利用方差不同对样本分类的贡献不同,从而更客观地评价基因包含的分类信息量,提出了修订的特征记分准则RFSC(Revised Feature Score Criterion)。...
  • 2.1.2 线性回归的损失函数为什么是均方差?2.1.3 什么是线性回归?什么时候使用它?2.1.4 什么是梯度下降?SGD的推导?2.1.5 什么是最小二乘法(最小平方法)?2.1.6 常见的损失函数有哪些?2.1.7 有哪些评估回归模型...

    2.线性模型

    2.1 线性回归

    原理: 用线性函数拟合数据,用 MSE 计算损失,然后用梯度下降法(GD)找到一组使 MSE 最小的权重。
    线性回归的推导

    在这里插入图片描述
    在这里插入图片描述

    2.1.1 什么是回归?哪些模型可用于解决回归问题?

    指分析因变量和自变量之间关系.
    线性回归: 对异常值非常敏感
    多项式回归: 如果指数选择不当,容易过拟合。
    岭回归
    Lasso回归
    弹性网络回归

    2.1.2 线性回归的损失函数为什么是均方差?

    在这里插入图片描述

    2.1.3 什么是线性回归?什么时候使用它?

    利用最小二乘函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析.
    (1)自变量与因变量呈直线关系;
    (2)因变量符合正态分布;
    (3)因变量数值之间独立;
    (4)方差是否齐性。

    2.1.4 什么是梯度下降?SGD的推导?

    BGD: 遍历全部数据集计算一次loss函数,然后算函数对各个参数的梯度,更新梯度。

    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述

    2.1.5 什么是最小二乘法(最小平方法)?

    它通过最小化误差的平方和寻找数据的最佳函数匹配。

    2.1.6 常见的损失函数有哪些?

    1.0-1损失
    2.均方差损失(MSE)
    3.平均绝对误差(MAE)
    4.分位数损失(Quantile Loss)
    分位数回归可以通过给定不同的分位点,拟合目标值的不同分位数;
    实现了分别用不同的系数控制高估和低估的损失,进而实现分位数回归。
    5.交叉熵损失
    6.合页损失
    一种二分类损失函数,SVM的损失函数本质: Hinge Loss + L2 正则化
    合页损失的公式如下:
    在这里插入图片描述

    2.1.7 有哪些评估回归模型的指标?

    衡量线性回归法最好的指标: R Squared
    在这里插入图片描述

    2.1.8 什么是正规方程?‍

    正规方程组是根据最小二乘法原理得到的关于参数估计值的线性方程组。
    正规方程是通过求解在这里插入图片描述
    来找出使得代价函数最小的参数
    解出:
    在这里插入图片描述

    2.1.9 梯度下降法找到的一定是下降最快的方向吗?

    不一定,它只是目标函数在当前的点的切平面上下降最快的方向。
    在实际执行期中,牛顿方向(考虑海森矩阵)才一般被认为是下降最快的方向,可以达到超线性的收敛速度。梯度下降类的算法的收敛速度一般是线性甚至次线性的(在某些带复杂约束的问题)。

    2.1.10 MBGD需要注意什么?

    如何选择m?一般m取2的幂次方能充分利用矩阵运算操作。
    一般会在每次遍历训练数据之前,先对所有的数据进行随机排序,然后在每次迭代时按照顺序挑选m个训练集数据直至遍历完所有的数据。
    什么是正态分布?为什么要重视它?
    如何检查变量是否遵循正态分布?‍
    如何建立价格预测模型?价格是否正态分布?需要对价格进行预处理吗?‍

    2.2 LR

    也称为"对数几率回归"。
    知识点提炼
    1.分类,经典的二分类算法!
    2.LR的过程:面对一个回归或者分类问题,建立代价函数,然后通过优化方法迭代求解出最优的模型参数,然后测试验证这个求解的模型的好坏。
    3.Logistic 回归虽然名字里带“回归”,但是它实际上是一种分类方法,主要用于两分类问题(即输出只有两种,分别代表两个类别)
    4.回归模型中,y 是一个定性变量,比如 y = 0 或 1,logistic 方法主要应用于研究某些事件发生的概率。
    5.LR的本质:极大似然估计
    6.LR的激活函数:Sigmoid
    7.LR的代价函数:交叉熵
    优点:
    1.速度快,适合二分类问题
    2.简单易于理解,直接看到各个特征的权重
    3.能容易地更新模型吸收新的数据
    缺点:
    对数据和场景的适应能力有局限性,不如决策树算法适应性那么强。
    LR中最核心的概念是 Sigmoid 函数,Sigmoid函数可以看成LR的激活函数。
    Regression 常规步骤:
    寻找h函数(即预测函数)
    构造J函数(损失函数)
    想办法(迭代)使得J函数最小并求得回归参数(θ)
    LR伪代码:
    初始化线性函数参数为1
    构造sigmoid函数
    重复循环I次
    计算数据集梯度
    更新线性函数参数
    确定最终的sigmoid函数
    输入训练(测试)数据集
    运用最终sigmoid函数求解分类

    LR的推导

    在这里插入图片描述

    2.2.1为什么 LR 要使用 sigmoid 函数?

    1.广义模型推导所得 2.满足统计的最大熵模型 3.性质优秀,方便使用
    (Sigmoid函数是平滑的,而且任意阶可导,一阶二阶导数可以直接由函数值得到不用进行求导,这在实现中很实用)

    2.2.2 为什么常常要做特征组合(特征交叉)?

    LR模型属于线性模型,线性模型不能很好处理非线性特征,特征组合可以引入非线性特征,提升模型的表达能力。
    另外,基本特征可以认为是全局建模,组合特征更加精细,是个性化建模,但对全局建模会对部分样本有偏,
    对每一个样本建模又会导致数据爆炸,过拟合,所以基本特征+特征组合兼顾了全局和个性化。

    2.2.3 为什么LR比线性回归要好?

    LR和线性回归首先都是广义的线性回归,
    其次经典线性模型的优化目标函数是最小二乘,而LR则是似然函数,
    另外线性回归在整个实数域范围内进行预测,敏感度一致,而分类范围,需要在[0,1]。LR就是一种减小预测范围,将预测值限定为[0,1]间的一种回归模型,因而对于这类问题来说,LR的鲁棒性比线性回归的要好

    2.2.4 LR参数求解的优化方法?(机器学习中常用的最优化方法)

    梯度下降法,随机梯度下降法,牛顿法,拟牛顿法(LBFGS,BFGS,OWLQN)
    目的都是求解某个函数的极小值。

    2.2.5 工程上,怎么实现LR的并行化?有哪些并行化的工具?

    LR的并行化最主要的就是对目标函数梯度计算的并行化。
    无损的并行化:算法天然可以并行,并行只是提高了计算的速度和解决问题的规模,但和正常执行的结果是一样的。
    有损的并行化:算法本身不是天然并行的,需要对算法做一些近似来实现并行化,这样并行化之后的双方和正常执行的结果并不一致,但是相似的。
    基于Batch的算法都是可以进行无损的并行化的。而基于SGD的算法都只能进行有损的并行化。

    2.2.6 LR如何解决低维不可分问题?

    通过特征变换的方式把低维空间转换到高维空间,而在低维空间不可分的数据,到高维空间中线性可分的几率会高一些。
    具体方法:核函数,如:高斯核,多项式核等等

    2.2.7 LR与最大熵模型MaxEnt的关系?

    没有本质区别。LR是最大熵对应类别为二类时的特殊情况,也就是当LR类别扩展到多类别时,就是最大熵模型。

    2.2.8 为什么 LR 用交叉熵损失而不是平方损失(MSE)?

    在这里插入图片描述
    如果使用均方差作为损失函数,求得的梯度受到sigmoid函数导数的影响;
    在这里插入图片描述

    如果使用交叉熵作为损失函数,没有受到sigmoid函数导数的影响,且真实值与预测值差别越大,梯度越大,更新的速度也就越快。
    在这里插入图片描述
    记忆:mse的导数里面有sigmoid函数的导数,而交叉熵导数里面没有sigmoid函数的导数,sigmoid的导数的最大值为0.25,更新数据时太慢了。

    2.2.9 LR能否解决非线性分类问题?

    可以,只要使用kernel trick(核技巧)。
    不过,通常使用的kernel都是隐式的,也就是找不到显式地把数据从低维映射到高维的函数,而只能计算高维空间中数据点的内积。
    在这里插入图片描述

    2.2.10 用什么来评估LR模型?

    1.由于LR是用来预测概率的,可以用AUC-ROC曲线以及混淆矩阵来确定其性能。
    2.LR中类似于校正R2 的指标是AIC。AIC是对模型系数数量惩罚模型的拟合度量。因此,更偏爱有最小的AIC的模型。

    2.2.11 LR如何解决多分类问题?(OvR vs OvO)

    在这里插入图片描述

    2.2.12 在训练的过程当中,如果有很多的特征高度相关或者说有一个特征重复了100遍,会造成怎样的影响?

    如果在损失函数最终收敛的情况下,其实就算有很多特征高度相关也不会影响分类器的效果。但是对特征本身来说的话,假设只有一个特征,在不考虑采样的情况下,你现在将它重复100遍。训练以后完以后,数据还是这么多,但是这个特征本身重复了100遍,实质上将原来的特征分成了100份,每一个特征都是原来特征权重值的百分之一。如果在随机采样的情况下,其实训练收敛完以后,还是可以认为这100个特征和原来那一个特征扮演的效果一样,只是可能中间很多特征的值正负相消了。

    2.2.13 为什么在训练的过程当中将高度相关的特征去掉?

    去掉高度相关的特征会让模型的可解释性更好。
    可以大大提高训练的速度。如果模型当中有很多特征高度相关的话,就算损失函数本身收敛了,但实际上参数是没有收敛的,这样会拉低训练的速度。
    其次是特征多了,本身就会增大训练的时间。

    2.3 Lasso

    定义:所有参数绝对值之和,即L1范数,对应的回归方法。
    Lasso(alpha=0.1) # 设置学习率
    在这里插入图片描述

    2.4 Ridge

    定义:所有参数平方和,即L2范数,对应的回归方法。
    通过对系数的大小施加惩罚来解决 普通最小二乘法 的一些问题。
    Ridge(alpha=0.1) # 设置惩罚项系数
    在这里插入图片描述

    2.5 Lasso vs Ridge

    在这里插入图片描述

    2.6 线性回归 vs LR

    在这里插入图片描述

    展开全文
  • 入耳式剂量测定和噪声暴露反馈被用于改变工作人员有关听力保护使用的态度和行为。 该研究专门针对向工人提供入耳式噪声暴露数据是否导致平均噪声剂量率等效连续水平降低的问题。 为美国空军工作的19名战斗武器教官...
  • 微波辐射计温度资料采用气块法,微脉冲激光雷达后向散射信号资料采用曲线拟合法和小波变换法(Haar小波变换法与Mexican Hat小波变换法),CALIPSO Level 1散射廓线采用最大方差法与Mexican Hat小波变换法,同时利用...
  • 部分,通过诊断来调试学习算法并且检查方差和偏差的影响。 (1)可视化数据集 x:表示水位变化,y:表示大坝水流量 数据集被分成三部分:训练集(X,y),用来决定正则化参数的交叉验证集(Xval,yval),用来...
  • 线性回归知识总览

    2019-03-29 18:13:35
    优化方法(梯度下降、牛顿、拟牛顿等) 线性回归的评估指标 sklearn参数详解 机器学习的一些概念 有监督、无监督 统计学习包括监督学习、非监督学习、监督学习及强化学习。 监督学习(superv...
  • Variance(方差)与bias(偏差) 常用性能指标 生成模型与判别模型 集成学习:Bagging、Boosting、Stacking Logistic Regression GBDT(梯度提升树)、 XGboost SVM 与 感知机 Naïve Bayes(朴素贝叶斯) 梯度下降...
  • 最小均方误差

    万次阅读 2017-07-26 20:41:12
    在图像处理方面,最小均方误差通过计算数字调图像与原始图像在人眼视觉中的均方误差,并通过算法使其最小来获得最佳的调图像。该算法设计两个人眼视觉滤波器,分别对原始图像和调处理图像进行滤波,得到两个...
  • 11.3 多元线性回归分析 11.4 逐步回归分析 11.5 对数数据相关 11.6 对数数据相关 第12章 极值问题的求解 12.1 一维极值连分式 12.1 n维维极值连分式 12.3 不等式约束线性规划问 12.4 求n维极值的单行条优 ...
  • 11.5 对数数据相关 11.6 对数数据相关 第12章 极值问题的求解 12.1 一维极值连分式 12.1 n维维极值连分式 12.3 不等式约束线性规划问 12.4 求n维极值的单行条优 12.5 求约束条件下n维极值的复形调优 第13...
  • 11.5 对数数据相关 11.6 对数数据相关 第12章 极值问题的求解 12.1 一维极值连分式 12.1 n维维极值连分式 12.3 不等式约束线性规划问 12.4 求n维极值的单行条优 12.5 求约束条件下n维极值的复形调优 第13...
  • 11.5 对数数据相关 11.6 对数数据相关 第12章 极值问题的求解 12.1 一维极值连分式 12.1 n维维极值连分式 12.3 不等式约束线性规划问 12.4 求n维极值的单行条优 12.5 求约束条件下n维极值的复形调优 第13...
  • 11.5 对数数据相关 11.6 对数数据相关 第12章 极值问题的求解 12.1 一维极值连分式 12.1 n维维极值连分式 12.3 不等式约束线性规划问 12.4 求n维极值的单行条优 12.5 求约束条件下n维极值的复形调优 第13...
  • 11.5 对数数据相关 11.6 对数数据相关 第12章 极值问题的求解 12.1 一维极值连分式 12.1 n维维极值连分式 12.3 不等式约束线性规划问 12.4 求n维极值的单行条优 12.5 求约束条件下n维极值的复形调优 第13...
  • 11.5 对数数据相关 11.6 对数数据相关 第12章 极值问题的求解 12.1 一维极值连分式 12.1 n维维极值连分式 12.3 不等式约束线性规划问 12.4 求n维极值的单行条优 12.5 求约束条件下n维极值的复形调优 第13...
  • 建树的过程中每次会把一堆点按照某一维切,中间的提出来作根,分成两个部分作为左右子树继续建树。 一个比较劣的维度选是循环选取,雨露均沾。 也可以随机钦点。 正统的K-D tree是选方差最大的那一维。 ...
  • 汽车操纵动力学

    2018-11-14 21:22:20
    第十节 汽车侧偏角瞬变过程的间接测定 一、按最小总方差优化数据方法 二、“非零终态”的一种处理方法 第三章 滚动轮胎的静力学特性 第一节 作用在轮胎上的力和力矩 第二节 侧偏角与侧向力特性 第三节 侧偏角与回...
  • 数据处理 11.1 随机样本分析 11.2 一元线性回归分析 11.3 多元线性回归分析 11.4 逐步回归分析 11.5 对数数据相关 11.6 对数数据相关 第12章 极值问题的求解 12.1 一维极值连分式 ...
  • 2.16.20 偏差与⽅方差 2.16.21为什什么使⽤用标准差? 2.16.22点估计思想 2.16.23 点估计优良性原则? 2.16.24 点估计、区间估计、中⼼心极限定理理之间的联系? 2.16.25 类别不不平衡产⽣生原因? 2.16.26 常⻅见的类别...

空空如也

空空如也

1 2 3
收藏数 47
精华内容 18
关键字:

半方差法