精华内容
下载资源
问答
  • 版本:python3.5
  • 二、最大类间方差法(大津法) 2.1 最大类间方差法原理 2.2 基于opencv的实现(简单阈值分割、Otsu阈值分割) 三、自适应阈值分割 参考 一、简介 图像阈值化分割是一种传统的最常用的图像分割方法,因其实现...

    目录

    一、简介

    二、最大类间方差法(大津法)

    2.1 最大类间方差法原理

    2.2 基于opencv的实现(简单阈值分割、Otsu阈值分割)

    三、自适应阈值分割

    参考


    一、简介

    图像阈值化分割是一种传统的最常用的图像分割方法,因其实现简单、计算量小、性能较稳定而成为图像分割中最基本和应用最广泛的分割技术。它特别适用于目标和背景占据不同灰度级范围的图像。它不仅可以极大的压缩数据量,而且也大大简化了分析和处理步骤,因此在很多情况下,是进行图像分析、特征提取与模式识别之前的必要的图像预处理过程。图像阈值化的目的是要按照灰度级,对像素集合进行一个划分,得到的每个子集形成一个与现实景物相对应的区域,各个区域内部具有一致的属性,而相邻区域不具有这种一致属性。这样的划分可以通过从灰度级出发选取一个或多个阈值来实现。

    二、最大类间方差法(大津法)

    大津法又叫最大类间方差法、最大类间阈值法(OTSU)。它的基本思想是,用一个阈值将图像中的数据分为两类,一类中图像的像素点的灰度均小于这个阈值,另一类中的图像的像素点的灰度均大于或者等于该阈值。如果这两个类中像素点的灰度的方差越大,说明获取到的阈值就是最佳的阈值(方差是灰度分布均匀性的一种度量,背景和前景之间的类间方差越大,说明构成图像的两部分的差别越大,当部分前景错分为背景或部分背景错分为前景都会导致两部分差别变小,因此,使类间方差最大的分割意味着错分概率最小)。利用该阈值可以将图像分为前景和背景两个部分,而我们所感兴趣的部分一般为前景。通过上述,我们可以看出,大津法是一种全局阈值法。

    大津法计算简单快速,不受图像亮度和对比度的影响。但对图像噪声敏感;只能针对单一目标分割;当目标和背景大小比例悬殊、类间方差函数可能呈现双峰或者多峰,这个时候效果不好。

    2.1 最大类间方差法原理

    对于图像I(x,y),前景(即目标)和背景的分割阈值记作T,属于前景的像素点数占整幅图像的比例记为ω0,其平均灰度μ0;背景像素点数占整幅图像的比例为ω1,其平均灰度为μ1。图像的总平均灰度记为μ,类间方差记为σ2。

    假设图像的背景较暗,并且图像的大小为M×N,图像中像素的灰度值小于阈值T的像素个数记作N0,像素灰度大于阈值T的像素个数记作N1,则有:

    将公式(5)代入式(6),得到等价公式为:

    上式就是求得的类间方差,再通过遍历,对图片的像素级进行遍历,找到使类间方差最大的阈值T,即为所求的分割阈值。

    根据上面的公式,我们可以做进一步的变形:

    根据定义我们能够进一步推导μ0和μ1的变形公式如下:

    式中,L表示图像灰度级,ni表示灰度为i的像素的数量。

    考虑灰度级T的累加均值m(非完全严格定义)和图像的全局均值μ为:

    根据公式(10)和(11)可以将公式(8)和(9)改写成:

    将公式(12)(13)代入式(7),可得:

     

    2.2 基于opencv的实现(简单阈值分割、Otsu阈值分割)

    简单阈值分割

    在opencv中可以使用cv2.threshold()函数进行简单阈值分割。

    这个函数的第一个参数就是原图像,原图像应该是灰度图。第二个参数就是用来对像素值进行分类的阀值,第三个参数就是当像素值高于(或者小于)阀值时,应该被赋予新的像素值。OpenCV提供了多种不同的阀值方法,这是有第四个参数来决定的。方法包括:

    cv2.THRESH_BINARY 二值阈值化

    cv2.THRESH_BINARY_INV 反向二值阈值化

    cv2.THRESH_TRUNC 截断阈值化

    cv2.THRESH_TOZERO 超过阈值归零

    cv2.THRESH_TOZERO_INV 低于阈值归零

    该方法返回两个输出。第一个是使用的阈值,第二个输出是阈值后的图像

    简单阈值分割代码实现:

    import cv2 as cv
    import numpy as np
    from matplotlib import pyplot as plt
    
    img = cv.imread('gradient.png',0)
    
    ret,thresh1 = cv.threshold(img,127,255,cv.THRESH_BINARY)
    ret,thresh2 = cv.threshold(img,127,255,cv.THRESH_BINARY_INV)
    ret,thresh3 = cv.threshold(img,127,255,cv.THRESH_TRUNC)
    ret,thresh4 = cv.threshold(img,127,255,cv.THRESH_TOZERO)
    ret,thresh5 = cv.threshold(img,127,255,cv.THRESH_TOZERO_INV)
    
    titles = ['Original Image','BINARY','BINARY_INV','TRUNC','TOZERO','TOZERO_INV']
    images = [img, thresh1, thresh2, thresh3, thresh4, thresh5]
    for i in xrange(6):
        plt.subplot(2,3,i+1),plt.imshow(images[i],'gray')
        plt.title(titles[i])
        plt.xticks([]),plt.yticks([])
    plt.show()

    简单阈值分割效果:

    Otsu阈值分割

    正如上面的实例,在全局阈值化中,我们使用任意选择的值作为阈值。而Otsu的方法避免了必须选择一个值并能够自动确定阈值。在cv2.threshold()函数中因为Otsu’s方法会产生一个阈值,那么函数cv2.threshold的的第二个参数(设置阈值)就是0了,并且在cv2.threshold的方法参数中还得加上语句cv2.THRESH_OTSU。

    考虑仅具有两个不同图像值的图像(双峰图像),其中直方图将仅包含两个峰。一个好的阈值应该在这两个值的中间。类似地,Otsu的方法从图像直方图中确定最佳全局阈值。

    查看以下示例。输入图像为噪点图像。在第一种情况下,采用值为127的全局阈值。在第二种情况下,直接采用Otsu阈值法。在第三种情况下,首先使用5x5高斯核对图像进行滤波以去除噪声,然后应用Otsu阈值处理。了解噪声滤波如何改善结果。

    Otsu阈值分割代码实现:

    import cv2 as cv
    import numpy as np
    from matplotlib import pyplot as plt
    
    img = cv.imread('noisy2.png',0)
    
    # 全局阈值
    ret1,th1 = cv.threshold(img,127,255,cv.THRESH_BINARY)
    # Otsu阈值
    ret2,th2 = cv.threshold(img,0,255,cv.THRESH_BINARY+cv.THRESH_OTSU)
    # 高斯滤波后再采用Otsu阈值
    blur = cv.GaussianBlur(img,(5,5),0)
    ret3,th3 = cv.threshold(blur,0,255,cv.THRESH_BINARY+cv.THRESH_OTSU)
    
    # 绘制所有图像及其直方图
    images = [img, 0, th1,
              img, 0, th2,
              blur, 0, th3]
    titles = ['Original Noisy Image','Histogram','Global Thresholding (v=127)',
              'Original Noisy Image','Histogram',"Otsu's Thresholding",
              'Gaussian filtered Image','Histogram',"Otsu's Thresholding"]
    for i in xrange(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()

    Otsu阈值分割效果:

    三、自适应阈值分割

    前面介绍了OTSU算法,但这算法属于全局阈值法,所以对于某些光照不均的图像,这种全局阈值分割的方法会显得苍白无力,如下图情况:

    我们可以通过自适应阈值法(adaptiveThreshold)改变这种情况。它的思想不是计算全局图像的阈值,而是根据图像不同区域亮度分布,计算其局部阈值,所以对于图像不同区域,能够自适应计算不同的阈值,因此被称为自适应阈值法(其实就是局部阈值法)。我们可以通过计算某个邻域(局部)的均值、中值、高斯加权平均(高斯滤波)来确定阈值,从而实现自适应阈值分割。值得说明的是:如果用局部的均值作为局部的阈值,就是常说的移动平均法。

    在opencv中提供了cv2.adaptiveThreshold()实现自适应阈值分割。

    adaptiveThreshold(src: Any,             #源图像
                      maxValue: Any,        #分配给超过阈值的像素值的最大值
                      adaptiveMethod: Any,  #在一个邻域内计算阈值所采用的算法,有两个取值,分别为 ADAPTIVE_THRESH_MEAN_C 和 ADAPTIVE_THRESH_GAUSSIAN_C 
                      thresholdType: Any,   #这是阈值类型,只有两个取值,分别为 THRESH_BINARY 和THRESH_BINARY_INV
                      blockSize: Any,       #adaptiveThreshold的计算单位是像素的邻域块,这是局部邻域大小
                      C: Any,               #这个参数实际上是一个偏移值调整量,用均值和高斯计算阈值后,再减或加这个值就是最终阈值
                      dst: Any = None)      #输出图像

    自适应阈值分割代码实现:

    import cv2
    import matplotlib.pyplot as plt
    
    literacy_path = 'imageData/literacy.jpg'
    
    img = cv2.imread(literacy_path, 0)
    
    # threshold
    ret, thresh = cv2.threshold(img_literacy, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)
    print(ret)  # 124
    # adaptive threshold
    thresh1 = cv2.adaptiveThreshold(img_literacy, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 0)
    thresh2 = cv2.adaptiveThreshold(img_literacy, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)
    thresh3 = cv2.adaptiveThreshold(img_literacy, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 0)
    thresh4 = cv2.adaptiveThreshold(img_literacy, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)
    
    # show image
    plt.figure('adaptive threshold', figsize=(12, 8))
    plt.subplot(231), plt.imshow(img_literacy, cmap='gray'), plt.title('original')
    plt.subplot(234), plt.imshow(thresh, cmap='gray'), plt.title('otsu')
    plt.subplot(232), plt.imshow(thresh1, cmap='gray'), plt.title('adaptive_mean_0')
    plt.subplot(235), plt.imshow(thresh2, cmap='gray'), plt.title('adaptive_mean_2')
    plt.subplot(233), plt.imshow(thresh3, cmap='gray'), plt.title('adaptive_gaussian_0')
    plt.subplot(236), plt.imshow(thresh4, cmap='gray'), plt.title('adaptive_gaussian_2')
    plt.show()

    自适应阈值分割效果:

     

     

    参考

    http://www.woshicver.com/FifthSection/4_3_%E5%9B%BE%E5%83%8F%E9%98%88%E5%80%BC/

    https://www.kancloud.cn/aollo/aolloopencv/267591

    自适应阈值(adaptiveThreshold)分割原理及实现

     

    展开全文
  • 预告:下一篇我们将会讲解经典的Markowitz均值-方差模型,它能帮助我们决定如何控制投资组合的配置比例,感兴趣的同学可以关注下。为了避免风险,投资人往往会将资产分散到不同的金融工具中,比如信托、债券、基金、...

    不要把所有的鸡蛋放在同一个篮子里,这是投资界中历久弥新的至理名言。

    预告:下一篇我们将会讲解经典的Markowitz均值-方差模型,它能帮助我们决定如何控制投资组合的配置比例,感兴趣的同学可以关注下。

    为了避免风险,投资人往往会将资产分散到不同的金融工具中,比如信托、债券、基金、股票、期货、期权甚至房地产市场等。那么在这么多金融产品中,我们如何选择才能在风险可控的情况下获取尽可能高的收益呢?资产配置就是为了解决这个问题。

    那么,如何去衡量不同配置下我们的组合资产的收益率与风险呢?

    一、投资组合的收益率计算

    投资组合的收益率很容易计算,总得来说就是总收益除以初始投入资本。假如我们一共投资了n种金融产品,则我们的投资组合的收益率为:

    4a681003672597c094b93dd31be445af.png

    投资组合收益率的计算过程,类似于加权平均值的计算。我们将每个金融产品的收益率乘以该产品的投资占比,并对结果求和即可。

    需要注意的是,这里计算的收益率是从头到尾的收益率,如果我们要计算一个收益率序列,是不能使用这种方式的。因为在第一期的时候,我们的配置比例是固定的,但是在第一期之后,随着不同产品的不同波动,它们占我们资产配置的比例已经发生了变化,因此需要不断迭代更新我们的比例参数,直接使用原始比例是错误的。

    二、投资组合的风险度量

    我们仍然以方差来度量我们的投资组合的风险:

    2e658f3ae4d681540eccdbddec9960b1.png

    观察上式可知,这里既包含了每个金融产品各自的方差与系数的乘积,也包含了两两产品之间的协方差项。也就是说,金融产品之间相关性越高,风险越大。

    这里就不推导了,事实上我们完全可以先计算出我们的投资组合收益率的序列,然后再用方差、下行风险等来计算投资组合的风险,这样还能应对不同时期不同金融产品比例发生变化的情况。

    三、Python实战:收益率

    那么接下来我们就用Python来看一下,不同的投资比例会对我们的收益率和风险带来什么影响。我们以万科A和东方财富两支股票来演示不同配置比例下整体的收益率和风险变化趋势。

    import pandas as pdimport tushare as tsimport numpy as np# 获取股票近两年行情数据pro = ts.pro_api()wanke = pro.daily(ts_code='000002.SZ', start_date='20170101')dongcai = pro.daily(ts_code='300059.SZ', start_date='20170101')# 数据清洗,仅保留收益率数据df = pd.merge(wanke, dongcai, on='trade_date', how='outer')df.index = pd.to_datetime(df.trade_date)df = df.sort_index(ascending=True)df = df[['pct_chg_x', 'pct_chg_y']].fillna(0) / 100df.columns = ['r_wanke', 'r_dongcai']
    d87d30a32b303d1fe4dc21b512144271.png
    166d32bf4b996023ca53aca08571e8a6.png

    1. 先计算各产品的整体收益然后加权平均

    那么接下来我们来看收益率情况,我们先用期末各资产收益直接加权平均的方式来计算。

    import matplotlib.pyplot as pltimport matplotlib as mplimport seaborn as snssns.set()mpl.rcParams['font.family'] = 'sans-serif'mpl.rcParams['font.sans-serif'] = 'SimHei'w_wanke = np.linspace(0, 1, 11)w_dongcai = 1 - w_wanker_wanke = (df['r_wanke'] + 1).product() - 1r_dongcai = (df['r_dongcai'] + 1).product() - 1returns = [r_wanke * w1 + r_dongcai * w2  for w1, w2 in zip(w_wanke, w_dongcai)]plt.figure(figsize=(10, 6))plt.plot(w_wanke, returns)plt.xlabel('万科资产占比', fontsize=16)plt.ylabel('投资组合17年以来收益率', fontsize=16)plt.title('不同比例下组合投资万科A与东方财富的收益率', fontsize=20);
    a0231cb3832d00be2895656d2f252ecb.png

    由于过去两年万科的收益率是高于东方财富的,所以万科的持有比例越高,组合收益率就越高。不过我们还要看一下风险。

    2. 先计算投资组合的收益序列,再累乘

    前边提到,我们是可以先计算出投资组合的收益序列,然后再计算整体收益率以及风险的。

    import matplotlib.pyplot as pltimport matplotlib as mplimport seaborn as snsimport numpy as npsns.set()mpl.rcParams['font.family'] = 'sans-serif'mpl.rcParams['font.sans-serif'] = 'SimHei'# 计算累计毛利率,类似于基金净值,以16年最后一个交易日的收盘价作为成本价df['worth_wanke'] = (df['r_wanke'] + 1).cumprod()df['worth_dongcai'] = (df['r_dongcai'] + 1).cumprod()w_wanke = np.linspace(0, 1, 11)w_dongcai = 1 - w_wankereturns = []for w1, w2 in zip(w_wanke, w_dongcai): worth_portfolio = np.array(w1 * df['worth_wanke'] + w2 * df['worth_dongcai']) worth_last_day = worth_portfolio.copy() worth_last_day = np.insert(np.delete(worth_last_day, -1, axis=0), 0, 1) r_portfolio = worth_portfolio / worth_last_day returns.append(r_portfolio.prod())plt.figure(figsize=(10, 6))plt.plot(w_wanke, returns)plt.xlabel('万科资产占比', fontsize=16)plt.ylabel('投资组合17年以来收益率', fontsize=16)plt.title('不同比例下组合投资万科A与东方财富的收益率', fontsize=20);

    这种方法和上一种方法的计算结果完全一致,但是我们获得了投资组合的收益率序列,后续就可以做更多事情。

    四、Python实战:投资组合的风险

    一种方法是使用各金融产品的方差及协方差,结合不同金融产品的投资占比,套入公式来计算,这部分留给读者自己探讨,我们接下来看一下另一种方法。

    先求投资组合的收益率序列

    w_wanke = np.linspace(0, 1, 11)w_dongcai = 1 - w_wankerisk = []for w1, w2 in zip(w_wanke, w_dongcai): worth_portfolio = np.array(w1 * df['worth_wanke'] + w2 * df['worth_dongcai']) worth_last_day = worth_portfolio.copy() worth_last_day = np.insert(np.delete(worth_last_day, -1, axis=0), 0, 1) r_portfolio = worth_portfolio / worth_last_day - 1 risk.append(r_portfolio.std())plt.figure(figsize=(10, 6))plt.plot(w_wanke, risk, '-')plt.xlabel('万科资产占比', fontsize=16)plt.ylabel('投资组合17年以来收益率方差', fontsize=16)plt.title('不同比例下组合投资万科A与东方财富的风险', fontsize=20);
    b45a3b533d062b6b278ab6d2e9fe80a0.png

    可以看到,当万科资产配置比例在0.4-0.5左右的时候,投资风险是最低的。但是前边我们也看到了,投资万科的潜在获利空间也比较高,所以我们要结合自己的风险承受能力以及预期获益水平来调整自己的资产配置比例。

    下行风险

    我们还记得,使用下行风险可以消除方差度量法的一些问题。那么我们就来计算一下不同配置比例下的下行风险。

    w_wanke = np.linspace(0, 1, 11)w_dongcai = 1 - w_wankerisk = []for w1, w2 in zip(w_wanke, w_dongcai): worth_portfolio = np.array(w1 * df['worth_wanke'] + w2 * df['worth_dongcai']) worth_last_day = worth_portfolio.copy() worth_last_day = np.insert(np.delete(worth_last_day, -1, axis=0), 0, 1) r_portfolio = worth_portfolio / worth_last_day - 1 mean = r_portfolio.mean() _r_tmp = r_portfolio - mean _r_tmp = np.array(list(map(lambda x: x if x < 0 else 0, _r_tmp))) _risk = sum(_r_tmp ** 2) risk.append(_risk)plt.figure(figsize=(10, 6))plt.plot(w_wanke, risk, '-')plt.xlabel('万科资产占比', fontsize=16)plt.ylabel('投资组合收益率的标准差', fontsize=16)plt.title('不同比例下组合投资万科A与东方财富的风险(2017年以来数据)', fontsize=20);
    8dafb7b1a67a3d0c07946fac2f55d52b.png

    可以看到,在万科A与东方财富各占一半时,我们投资组合的下行风险最低。这种方法最大的好处就是不会将向上超出预期的收益计算进来,只会考虑低于预期收益的波动,这样与我们主观上的风险更为一致。

    还有其他几种风险量化方式,比如风险价值、最大回撤等,聪明如你,可以自己尝试一下哦。

    展开全文
  • 直接上代码,原理大家都可以查到 注意:以下img自己加载即可,我是事先把图片转换成了单通道的Array形式,并且我的img是归一化后在0-1的。生成的label只有0,1两个值。 import cv2 import numpy as np ...

    直接上代码,原理大家都可以查到

    注意:以下img自己加载即可,我是事先把图片转换成了单通道的Array形式,并且我的img是归一化后在0-1的。生成的label只有0,1两个值。

    import cv2
    import numpy as np
    
    img = np.uint8(img*255)
    retval, label = cv2.threshold(img, 0, 255, cv2.THRESH_OTSU)
    label = label//255
    
    展开全文
  • 参考文章1:图像二值化与otsu算法介绍 参考文章2:python opencv cv2.threshold() (将固定级别的阈值应用于每个数组元素)ThresholdTypes 最大类间方差法(大津法,OTSU) ...
    展开全文
  • #THRESH_BINARY和#THRESH_BINARY_INV阈值类型使用的最大值。 . @param type thresholding type (see #ThresholdTypes). 阈值类型(请参阅#ThresholdTypes)。 . @return the computed threshold value ...
  • 一种是固定阈值法,另一种是自适应阈值法,总的来说,自适应阈值法在某些方面要由于固定阈值法,但还没完,这次我们将隆重介绍我们的重量级选手,也就是OTSU算法(又称为大津算法和最大类间方差法)。最大类间方差法是...
  • 造轮子——python手动实现OTUSOtus算法原理...Otus法又称最大类间方差法或者大津法,基本思想就是计算前景类与背景类之间的类间方差,当某个灰度级对应得到的类间方差最大时,即认为此时的阈值为最佳阈值。相关原理可以
  • Otsu源码复现---python

    2019-04-10 11:29:20
    最大类间方差法,是一种图像二值化的算法,利用阈值将原图像分成前景,背景两个图象。当取最佳阈值时,背景应该与前景差别最大,关键在于如何选择衡量差别的标准,而在otsu算法中这个衡量差别的标准就是最大类间...
  • Python与图像处理2

    千次阅读 2016-09-27 23:34:10
    OTSU(最大类间方差法)就是计算出灰度图最佳阈值的算法。如下所示: (1)先对灰度图进行直方图计算并归一化处理,得到0-255之间每个像素在灰度图中出现的概率,即表示为某个像素 在灰度图中出现了个,灰度图总的...
  • 一种是固定阈值法,另一种是自适应阈值法,总的来说,自适应阈值法在某些方面要由于固定阈值法,但还没完,这次我们将隆重介绍我们的重量级选手,也就是OTSU算法(又称为大津算法和最大类间方差法)。最大类间方差法是...
  • 引言由于笔者从事二分类问题的研究,另外实验室也有此类算法的实现需要,因此从该文开始,笔者将连续讲解基于Python封装函数进行遥感图像特征的分割方法与实现。...主要方法原理(1)最大类间方差法(OTSU...
  • Python+OpenCV大津法源代码编写

    千次阅读 2019-04-04 20:35:46
    OTSU算法是由日本学者大津于1979年提出的一种对图像进行二值化的高效算法。具体原理CSDN上一大堆,在此不再赘述,直接上自己写的源代码之前先说一下本人的算法...(6)最大类间方差对应的灰度级即为阈值,根据阈值...
  • 引言由于笔者从事二分类问题的研究,另外实验室也有此类算法的实现需要,因此从该文开始,笔者将连续讲解基于Python封装函数进行遥感图像特征的分割方法与实现。...主要方法原理(1)最大类间方差法(OTSU...
  • 引言由于笔者从事二分类问题的研究,另外实验室也有此类算法的实现需要,因此从该文开始,笔者将连续讲解基于Python封装函数进行遥感图像特征的分割方法与实现。...主要方法原理(1)最大类间方差法(OTSU...
  • 基础算法是确定图像二值化分割阈值的大津法,将图像分成背景和前景两部分,最大化背景和前景之间的类间方差。具体理论部分可以搜索大津法了解一下,代码部分只要在调用threshold的函数中,参数选择THRESH_OTSU就可以...
  • 二值化:像素点的灰度值设置为0或255,凸显黑白的视觉效果 ...OTSU法:最大类间方差法,是一种常用的图像分割算法。核心思想是设一个初始阈值把图像分为两类,然后计算两类之间的方差,更新阈值,重新计算类间方差,...
  • 基础算法是确定图像二值化分割阈值的大津法,将图像分成背景和前景两部分,最大化背景和前景之间的类间方差。具体理论部分可以搜索大津法了解一下,代码部分只要在调用threshold的函数中,参数选择THRESH_OTSU就可以...
  • 从大津法的原理上来讲,该方法又称作最大类间方差法,因为按照大津法求得的阈值进行图像二值化分割后,前景与背景图像的类间方差最大。 应用: 是求图像全局阈值的最佳方法,应用不言而喻,适用于大部分需要求图像...
  • 遗传算法优化otsu分割问题python实现

    千次阅读 2018-11-27 16:54:47
    最大类间方差法(Otsu) 详见https://www.cnblogs.com/xiaomanon/p/4110006.html,这里就不去赘述了。 遗传算法策略 关于遗传算法的详解什么的,可以参考其他的类似文章,下面讲讲我自己的策略 种群编码策略 二...
  • 一种是固定阈值法,另一种是自适应阈值法,总的来说,自适应阈值法在某些方面要由于固定阈值法,但还没完,这次我们将隆重介绍我们的重量级选手,也就是OTSU算法(又称为大津算法和最大类间方差法)。 最大类间方差...
  • 大津法,又叫最大类间方差法,简称Otsu,是由日本学者大津于1979年提出的,是一种自适应的阈值确定方法。本文在Python 2.7下实现了Otsu算法。
  • 图像分割算法实现(matlab/python

    千次阅读 2019-10-21 19:50:57
    1.最大类间方差法:根据直方图以某一会灰度为阈值将图像分割成两部分,计算两组的方差,当被分成的两组之间的方差最大时,这个灰度为阈值灰度值。(基于阈值分割) img = imread('1.jpg');%原图 I_gray=rgb2...
  • 在PCA中,我们寻找数据集中最大方差的成分,在MDA中,我们对类间最大散布的方向更感兴趣。一句话,通过PCA,我们将整个数据集(不带类别标签)映射到一个子空间中,在MDA中,我们致力于找到一个能够最好区分各类的...
  • Python-Pillow-OTSU算法

    千次阅读 2019-05-19 13:44:59
    OTSU算法介绍 大津法(OTSU),由日本学者大津于1979年提出。...由于两两平方距离恒定,所以即它们的类间方差最大。 按图像的灰度特性,将图像分成背景和前景两部分。 因方差是灰度分布均匀性的一种度量,背...
  • 在PCA中,我们寻找数据集中最大方差的成分,在MDA中,我们对类间最大散布的方向更感兴趣。一句话,通过PCA,我们将整个数据集(不带类别标签)映射到一个子空间中,在MDA中,我们致力于找到一个能够最好区分各类的...
  • 在说Otsu之前,先说几个...Otsu算法假设这副图片由前景色和背景色组成,通过最大类间方差选取一个阈值,将前景和背景尽可能分开。 一、代码展示 import cv2 from matplotlib import pyplot as plt img ...

空空如也

空空如也

1 2 3
收藏数 50
精华内容 20
关键字:

最大类间方差python

python 订阅