精华内容
下载资源
问答
  • 针对基于局部熵的过渡区阈值算法中没有同时考虑局部图像灰度变化的频率和幅度,提出一种融合局部描述子的过渡区阈值...实验结果表明,根据一些图像分割的定量评价标准,提出算法提取过渡区的质量高,分割图像效果好.
  • 经过长时间的发展,图像分割已经发展出了多类方法:基于阈值的方法,基于区域的方法,基于边缘的方法,基于深度学习的方法 基于阈值的方法是最基本也是历史比较长的方法,虽然简单直接,但在一些特殊领域中:光学...

    图像分割方法的分类和发展

    1 )分类

    2 )发展

    • 图像分割是计算机视觉中非常重要的研究子领域
    • 从计算机视觉和图像处理最开始发展的时候,图像分割方法就一直是探索的方法之一
    • 经过长时间的发展,图像分割已经发展出了多类方法:基于阈值的方法,基于区域的方法,基于边缘的方法,基于深度学习的方法
    • 基于阈值的方法是最基本也是历史比较长的方法,虽然简单直接,但在一些特殊领域中:光学字符识别应用非常广泛, 得到的效果也非常好
    • 基于区域的方法又分为分水岭算法和图切方法
    • 基于边缘的方法包括廓线点检测和活动廓线法:在检测行人的时候非常的有效
    • 基于深度学习的方法

    局部阈值法分割的基本思想

    1 ) 全局阈值法的问题

    • 大津算法对应全局阈值法存在很多问题
    • 左侧图是一些硬币放在光滑的表面上,由于环境光照的不均匀和硬币种类不同的影响,直接使用二值化方法进行分割,得到的图像又黑又白,而且有些有炫光
    • 为了得到更好的效果,我们可以使用局部阈值法
    • 局部阈值法的基本思想是把多个图像分成若干个不同的区域, 如上图分成小一些的格子
    • 在每个小格子中,我们认为它满足大津算法的条件,使用大津算法进行分割
    • 在实际中我们要考虑一个问题,就是在格子中就没有我们要分割的目标
    • 我们通常使用的方法是不仅仅计算阈值梯,还要计算对应的前景和背景它们的均值
    • m1,m2如果它俩距离过近,那么它们分割并不明显, 如果图像没有前景,对应的是一个单峰的分布,就不用再做进一步的分割了
    • 我们对每个格子,计算最优的阈值和均值之间的距离,如果均值之间的距离d小于一个指定的值,我们就认为这个格子里没有目标,反之,如果有目标,那么d就很大
    • 进一步我们把对应每个格子局部阈值分割的结果放到一起,最终做一个二值化处理,就得到了我们最后的分割结果,明显效果要好得多, 如下图所示

    2 ) OpenCV对局域阈值法提供的实现

    • 自适应阈值分割
      • c++版本
        void adaptiveThreshold( InputArray src, OutputArray dst, double maxValue, int adaptiveMethod, int thresholdType, int blockSize, double C );
        
        • maxValue : 阈值化后的最大值;
        • adaptiveMethod :计算阈值所采用的算法,有两个取值,分别为 ADAPTIVE_THRESH_MEAN_CADAPTIVE_THRESH_GAUSSIAN_C;
        • blockSize : 邻域块大小;
      • python版本
        dst = cv.adaptiveThreshold( src, maxValue, adaptiveMethod, thresholdType, blockSize, C[, dst] )
        

    分水岭算法

    1 )基本思想

    • 是对区域生长算法的改进
    • 左边的图,白色的地方灰度值明显要高,黑色的地方灰度值明显要低
    • 右侧的图,是一个立体的图,白的地方(山脉和山脊)灰度值高,黑的地方(山谷)灰度值低
    • 如果从山谷开始放水,比如从第一个山谷里放水,只要它不超过周围的山脊,它就会一点儿一点儿往上涨,涨到充分高的时候,开始漫过去到另一个山谷
    • 在模拟中,我们设定一个涨水的边界条件, 我们就能区分它在不同的区域,这个也就是我们分水岭分割的一个基本思想

    2 )对应灰度图的几何解释

    • 局部最小值点,也就是漫水的初始点, 该点对应一个盆地的最低点(不仅仅是个点,还可能是个平面),当我们在盆地里滴一滴水的时候,由于重力作用, 水最终会汇聚到该点。注意:可能存在一个最小值面,该平面内的都是最小值点。
    • 盆地的其它位置点,该位置滴的水滴会汇聚到局部最小点。
    • 盆地的边缘点,是该盆地和其它盆地交接点,在该点滴一滴水,会等概率的流向任何一个盆地。可以从该点做一个上下方向的线,分割两个盆地,我们形象称为分水岭
    • 分水岭算法的执行过程是:我首先指定一系列的种子点,这些种子点是对应盆地的随机位置的点,采用类似区域生长的算法,将种子点不断向周围扩散, 模拟水不断浸入的过程
    • 直到两片水合成一个的时候,我们对应的交线就是我们区域的边界

    3 )分水岭算法的过分割问题

    • 左侧是原始图像,右侧是分割结果,就像是马赛克片一样
    • 由于噪声点或者其它干扰因素的存在,使用分水岭算法常常存在过度分割的现象,这是因为很多很小的局部极值点的存在

    4 )解决过分割问题

    • 初始的时候种子点不是从一个点开始,而是从一堆点开始,这些点不仅位于谷底,而且位于谷底和盆地中间
    • 为了解决过度分割的问题,可以使用基于标记(mark)图像的分水岭算法,就是指定mark图像(左侧图像)
    • 在这个区域的洪水淹没过程中,水平面都是从定义的marker开始的,这样可以避免一些很小的噪声极值区域的分割。

    5 ) 具体的动画图解

    • 在我们做marker的时候,实际上就隐含着把多个过于细碎的分割认为是一个区域,并且把这些信息传递给了分割算法

    6 ) 使用marker改善分割结果

    • 有效解决了过分割问题

    7 ) OpenCV实现

    • 分水岭图像分割
      • cpp版本

        void watershed( InputArray image, InputOutputArray markers );
        
        • image : 三通道彩色图像;
        • markers :记号点(种子点),每一个记号需要有不同的编号;
      • python版本

        markers = cv.watershed( image, markers )
        

    基于边缘轮廓的分割

    1 ) 基本思想

    • 可以在边缘检测的基础上,基于闭合边缘构建分割后的结果
    • 在分割前需要进行边缘检测, 很多时候还要使用其他方法得到二值化的分割结果
    • OpenCV提供几种基于边缘轮廓的分割方法,包括简单的基于封闭曲线的方法,以及基于活动廓线(active contour的方法)
    • 边缘轮廓搜索的方法,该算法基于Suzuki, S. 1985的方法,相对古老,但OpenCV基于此提供了关于图像描述的支持,比较好用
    • 换句话说当我们得到搜索完的边缘以后,进一步我们可以计算对一个图像区域,它的各个描述的特征

    2 ) OpenCV的支持

    • 找到目标轮廓
      • cpp版本
        void findContours( InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset=Point());
        
        • image : 单通道图像矩阵,可以是灰度图,但更常用的是经过边缘检测算子处理后的二值图像;
        • contours :定义为“vector<vector> contours”,是一个轮廓列表;
        • hierarchy : 存在嵌套轮廓时,分别为第i个轮廓的后一个轮廓、前一个轮廓、父轮廓、内嵌轮廓的索引编号;
        • mode : 定义轮廓的检索模式, 包括CV_RETR_EXTERNAL只检测最外围轮廓, CV_RETR_LIST检测所有轮廓,但不建立等级关系等;
        • method : 包括CV_CHAIN_APPROX_SIMPLE 仅保存轮廓的拐点信息,把所有轮廓拐点处的点保存入contours等;
        • offset : 所有的轮廓信息相对于原始图像对应点的偏移量, 缺省不设置。
      • python版本
        image, contours, hierarchy = cv.findContours( image, mode, method[, contours[, hierarchy[, offset]]] )
        

    3 ) 搜索轮廓组成轮廓树

    • 这个轮廓可以分为多层,最外层的轮廓给个索引是0
    • 轮廓之间的关系可以用数来展开,顶层是0,下面的叶子节点是1,2
    • 类似的可以把轮廓的结构来进一步描述
    • 通用的描述是:一个轮廓和它的子轮廓可以构成一个轮廓树

    4 )OpenCV提供了轮廓的不同表达方式

    5 ) OpenCV的相关函数实现

    • 画出目标轮廓
      • cpp版本
        void drawCoutours(InputOutputArray image, // 用于绘制的输入图像 InputArrayOfArrays contours, // 点的vectors的vector int contourIdx, // 需要绘制的轮廓的指数 (-1 表示 "all")
        const Scalar& color, // 轮廓的颜色
        int thickness = 1, // 轮廓线的宽度
        int lineType = 8, // 轮廓线的邻域模式('4'邻域 或 '8'邻域) InputArray hierarchy = noArray(), // 可选 (从 findContours得到) int maxLevel = INT_MAX, // 轮廓中的最大下降
        Point offset = cv::Point() // (可选) 所有点的偏移
        )
        
      • python版本
        image = cv.drawContours( image, contours, contourIdx, color[, thickness[, lineType[, hierarchy[, maxLevel[, offset]]]]] )
        

    总结

    • 局部阈值法的图像分割基于图像局部的自动阈值化,在每一个局部区域中应用二值化图像分割方法进行检测,避免光照不均导致的问题
    • 分水岭算法是一类基于区域分割的改进算法,思想可以形象的由漫水上山头来描述
    • 基于边缘的图像分割由闭合曲线描述区域,OpenCV中通过findContours函数支持,通过drawCoutours画出轮廓
    展开全文
  • 图像阈值分割-局部阈值分割 在Halcon中local_thresh算子实现局部阈值分割。其原型如下: local_threshold(Image : Region : Method, LightDark, GenParamName, GenParamValue : ) Image:输入图像 Region:输出分割...

    图像阈值分割-局部阈值分割

    在Halcon中local_thresh算子实现局部阈值分割。其原型如下:

    local_threshold(Image : Region : Method, LightDark, GenParamName, GenParamValue : )

    • Image:输入图像
    • Region:输出分割区域
    • Method:分割策略
    • LightDark:前景和背景的颜色
    • GenParamName:参数名称,‘mask_size’, ‘range’, ‘scale’
    • GenParamValue:参数GenParamName对应的值

    local_threshold使用Method中给出的阈值方法对单通道图像进行分段,并返回Region中的分段区域。 目前该算子仅提供方法’adapted_std_deviation’。 该算法是文本二值化技术,为文档图像提供了良好的结果。

    演示代码如下:

    * Init display
    dev_update_off ()
    dev_close_window ()
    read_image (Letters, 'letters')
    dev_open_window_fit_image (Letters, 0, 0, -1, -1, WindowHandle)
    set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
    
    * the strength of the adapted_std_deviation method more clearly.
    get_image_size (Letters, Width, Height)
    gen_image_surface_first_order (ImageSurface, 'byte', 0.5, 0.5, 0.5, Width / 2, Height / 2, Width, Height)
    add_image (Letters, ImageSurface, ImageCombined, 0.5, 0)
    
    GlobalThreshold := 128
    threshold (ImageCombined, RegionGlobal, 0, GlobalThreshold)
    dev_display (ImageCombined)
    dev_display (RegionGlobal)
    Message := 'In images with inhomogeneous background'
    Message[1] := 'it is impossible to segment the characters'
    Message[2] := 'with a global threshold.'
    disp_message (WindowHandle, Message, 'window', 12, 12, 'black', 'true')
    disp_continue_message (WindowHandle, 'black', 'true')
    stop ()
    
    local_threshold (ImageCombined, Region, 'adapted_std_deviation', 'dark', [], [])
    * 
    * Display results
    dev_display (ImageCombined)
    dev_display (Region)
    Message := 'With a local threshold, the characters'
    Message[1] := 'can be segmented successfully.'
    disp_message (WindowHandle, Message, 'window', 12, 12, 'black', 'true')
    

    原图像:
    在这里插入图片描述
    程序运行结果:
    在这里插入图片描述

    展开全文
  • 针对存在光照不均匀干扰的工业图像,提出了一种基于图像的多方向灰度波动局部阈值分割...实验结果表明,该方法能够有效提高对光照不均匀图像分割的准确性,与二维Otsu、二维Tsallis和Niblack算法相比分割效果有显著提升。
  • 1 全局固定阈值分割 threshold(image, global, th, 255, CV_THRESH_BINARY_INV);  一副图像包括目标、背景和噪声,设定某一阈值T将图像分成两部分:大于T的像素群和小于T的像素群。 在实际处理时候,...

    1 全局固定阈值分割
    threshold(image, global, th, 255, CV_THRESH_BINARY_INV); 
    一副图像包括目标、背景和噪声,设定某一阈值T将图像分成两部分:大于T的像素群和小于T的像素群。

    捕获

    在实际处理时候,为了显示需要一般用255表示背景,用0表示对象物。

    由于实际得到的图像目标和背景之间不一定单纯地分布在两个灰度范围内,此时就需要两个或以上的阈值来提取目标。

    捕获

    图像阈值化分割是一种传统的最常用的图像分割方法,因其实现简单、计算量小、性能较稳定而成为图像分割中最基本和应用最广泛的分割技术。它特别适用于目标和背景占据不同灰度级范围的图像。难点在于如何选择一个合适的阈值实现较好的分割。

     cv::threshold(image, global, th, 255, CV_THRESH_BINARY_INV);

    1. int main(int argc, char** argv)  
    2. {  
    3.     Mat image = imread("E:/VS2013/face/xuelian/png/1.png", CV_LOAD_IMAGE_GRAYSCALE);  
    4.     if (image.empty())  
    5.     {  
    6.         cout << "read image failure" << endl;  
    7.         return -1;  
    8.     }  
    9.   
    10.   
    11.     // 全局二值化  
    12.     int th = 100;//阈值  
    13.     Mat global;  
    14.     threshold(image, global, th, 255, CV_THRESH_BINARY_INV);  
    15.   
    16.   
    17.     // 局部二值化  
    18.   
    19.     int blockSize = 7;  
    20.     int constValue = 11;  
    21.     Mat local;  
    22.     adaptiveThreshold(image, local, 255, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY_INV, blockSize, constValue);  
    23.   
    24.   
    25.     imshow("globalThreshold", global);  
    26.     imshow("localThreshold", local);  
    27.     waitKey(0);  
    28.   
    29.   
    30.     return 0;  
    31. }  


    2 局部自适应阈值

    adaptiveThreshold(image, local, 255, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY_INV, blockSize, constValue);
    
    

       局部自适应阈值则是根据像素的邻域块的像素值分布来确定该像素位置上的二值化阈值。这样做的好处在于每个像素位置处的二值化阈值不是固定不变的,而是由其周围邻域像素的分布来决定的。亮度较高的图像区域的二值化阈值通常会较高,而亮度较低的图像区域的二值化阈值则会相适应地变小。不同亮度、对比度、纹理的局部图像区域将会拥有相对应的局部二值化阈值。常用的局部自适应阈值有:1)局部邻域块的均值;2)局部邻域块的高斯加权和。

    int main(int argc, char** argv)
    {
    	Mat image = imread("E:/VS2013/face/xuelian/png/1.png", CV_LOAD_IMAGE_GRAYSCALE);
    	if (image.empty())
    	{
    		cout << "read image failure" << endl;
    		return -1;
    	}
    
    
    	// 全局二值化
    	int th = 100;//阈值
    	Mat global;
    	threshold(image, global, th, 255, CV_THRESH_BINARY_INV);
    
    
    	// 局部二值化
    
    	int blockSize = 7;
    	int constValue = 11;
    	Mat local;
    	adaptiveThreshold(image, local, 255, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY_INV, blockSize, constValue);
    
    
    	imshow("globalThreshold", global);
    	imshow("localThreshold", local);
    	waitKey(0);
    
    
    	return 0;
    }

    adaptiveThreshold(
    const CvArr* src,    // 输入图像. 
    CvArr* dst,    //  输出图像.
    double max_value,   // max_value:使用 CV_THRESH_BINARY 和 CV_THRESH_BINARY_INV 的最大值.
    int adaptive_method=CV_ADAPTIVE_THRESH_MEAN_C,    // adaptive_method:自适应阈值算法使用:                                                                                                                    //CV_ADAPTIVE_THRESH_MEAN_C 或 CV_ADAPTIVE_THRESH_GAUSSIAN_C 
    int threshold_type=CV_THRESH_BINARY, // threshold_type:取阈值类型:必须是CV_THRESH_BINARY或者                                                                                                         CV_THRESH_BINARY_INV
    int block_size=3,//    block_size:用来计算阈值的象素邻域大小: 3, 5, 7, ...
    double param=5 )//   param:与方法有关的参数。对方法 CV_ADAPTIVE_THRESH_MEAN_C 和                                                                                                   CV_ADAPTIVE_THRESH_GAUSSIAN_C,

     它是一个从均值或加权均值提取的常数(见讨论), 尽管它可以是负数。

    对于max_value中的两个方式中的T是为每一个象素点单独计算的阈值,即每个像素点的阈值都是不同的,就是将该像素点周围B*B区域内的像素加权平均然后减去一个常数param,从而得到该点的阈值。b由block_size指定,常数由param1指定
    对方法 CV_ADAPTIVE_THRESH_MEAN_C,先求出块中的均值,再减掉param。
    对方法 CV_ADAPTIVE_THRESH_GAUSSIAN_C ,那么区域中(x,y)周围的像素根据高斯函数按照他们离中心点的距离进行加权计算, 再减掉param。



    3.最大方差阈值

    最大方差阈值的基本思想是:把直方图在某一阈值处分割成两组,当被分成的的两组之间方差最大时,决定阈值。

    设图像的灰度值为0~m-1级,灰度值i的像素数为ni,此时我们得到像素总数:

    捕获

    然后用T将其分成两组C0={0~T-1},C1={T~m-1},各组的概率如下

    捕获

    平均值为:

    捕获

    其中:捕获是整体图像的灰度平均值,捕获是阈值为T时的灰度平均值,

    所以全部采样的灰度平均值为:捕获

    两组间的方差用下式求出:

    捕获

    从1~m-1之间改变T,求上式为最大时的T,Tmax即为我们需要的阈值。所以上式称为阈值选择函数。

     然后,基于上面的阈值对图像进行二值化处理,即可得到结果。

    最大类间方差法(大津法,OTSU)

    3自适应阈值算法(大津阈值法)

    threshold(g_grayImage, g_ndstImage, 133, 255, THRESH_BINARY|THRESH_OTSU);
    threshold(g_grayImage, g_ndstImage, 1, 255, THRESH_BINARY|THRESH_OTSU);

    threshold(g_grayImage, g_ndstImage, 133, 255, THRESH_OTSU);

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

    对于图像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,即为所求。

    由于,当图像在254或255灰度值上没有像素点时,求平均灰度时会出现0/0的情况,为避免抛出异常,可在当出现前景像素数为零时,跳出循环。

            

    采用遍历的方法得到使类间方差最大的阈值,即为所求。

    在大津法中,我们定义组内方差为

    通过选择使得上述组内方差最小化时的阈值 t,就可以使得图像中的前景和背景尽可能的被区别开(假设我们将最终图像里被分开的两部分称为前景和背景)。w0w1分别是一个像素可能属于前景或背景的概率,而 σ 表示两个类别的方差。如果一个图像的直方图有L个等级(一般L=256),那么在给定阈值 t的情况下,w0w1分别定义为

    大津展之证明最小化组内方差(intra-class variance)与最大化组间方差(inter-class variance)是等价的,于是有

    又因为(其中 μ 表示均值或期望)

    可以推出

    这个证明仅仅涉及一些算术上的推导,我简单演示如下


    otsu算法选择使类间方差最大的灰度值为阈值,具有很好的效果
    算法具体描述见otsu论文,或冈萨雷斯著名的数字图像处理那本书
    这里给出程序流程:
    1、计算直方图并归一化histogram
    2、计算图像灰度均值avgValue.
    3、计算直方图的零阶w[i]和一级矩u[i]
    4、计算并找到最大的类间方差(between-class variance)
    variance[i]=(avgValue*w[i]-u[i])*(avgValue*w[i]-u[i])/(w[i]*(1-w[i]))
    对应此最大方差的灰度值即为要找的阈值
    5、用找到的阈值二值化图像

    #include "opencv2/highgui/highgui.hpp"
    #include "opencv2/imgproc/imgproc.hpp"
    #include <iostream>
    using namespace cv;
    using namespace std;
    
    //-----------------------------------【宏定义部分】-------------------------------------------- 
    //  描述:定义一些辅助宏 
    //----------------------------------------------------------------------------------------------
    #define WINDOW_NAME "【Shi-Tomasi角点检测】"        //为窗口标题定义的宏 
    
    
    
    //-----------------------------------【全局变量声明部分】--------------------------------------
    //          描述:全局变量声明
    //-----------------------------------------------------------------------------------------------
    Mat g_srcImage, g_grayImage,g_ndstImage;
    int main(  )
    {
    	//【0】改变console字体颜色
    	system("color 2F"); 
    	//【1】载入源图像并将其转换为灰度图
    	g_srcImage = imread("S (3).jpg");
    	imshow("【原始图】", g_srcImage);
    	cvtColor( g_srcImage, g_grayImage, CV_BGR2GRAY );
    	imshow("【灰度图】", g_grayImage);
    	//【方法1】全局固定阈值分割
    	//threshold(g_grayImage, g_ndstImage, 133, 1, 1);	//更新效果图
    	//imshow("threshold", g_ndstImage*255);
    
    	//【方法2】局固自适应阈值分割
    	//int blockSize = 13;  
    	//int constValue =9;  
    	//Mat local;  
    	//adaptiveThreshold(g_grayImage, local, 255, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY_INV, blockSize, constValue);    
    	//imshow("localThreshold", local);
    	//【方法3】大津法、Otus法阈值分割
    	//threshold(g_grayImage, g_ndstImage, 133, 255, THRESH_OTSU);
    	threshold(g_grayImage, g_ndstImage, 100, 255, THRESH_BINARY|THRESH_OTSU);	
    	imshow("THRESH_OTSU", g_ndstImage);
    
    	waitKey();
    	return 0;
    }

     PS说明    CV_THRESH_MASK        =7 //不工作问题

    一. 关键函数介绍

    下面就介绍OpenCV中对图像进行二值化的关键函数——cvThreshold()

    函数功能:采用Canny方法对图像进行边缘检测

    函数原型:

    void cvThreshold(

      const CvArrsrc,

      CvArrdst,

      double threshold,

      double max_value,

      int threshold_type

    );

    函数说明:

    第一个参数表示输入图像,必须为单通道灰度图。

    第二个参数表示输出的边缘图像,为单通道黑白图。

    第三个参数表示阈值

    第四个参数表示最大值。

    第五个参数表示运算方法。

    OpenCVimgproc\types_c.h中可以找到运算方法的定义。

    /* Threshold types */

    enum

    {

        CV_THRESH_BINARY      =0,  /* value = value > threshold ? max_value : 0       */

        CV_THRESH_BINARY_INV  =1,  /* value = value > threshold ? 0 : max_value       */

        CV_THRESH_TRUNC       =2,  /* value = value > threshold ? threshold : value   */

        CV_THRESH_TOZERO      =3,  /* value = value > threshold ? value : 0           */

        CV_THRESH_TOZERO_INV  =4,  /* value = value > threshold ? 0 : value           */

        CV_THRESH_MASK        =7,

        CV_THRESH_OTSU        =8  /* use Otsu algorithm to choose the optimal threshold value; combine the flag with one of the above CV_THRESH_* values */

    };

    注释已经写的很清楚了,因此不再用中文来表达了。

     




    展开全文
  • Matlab图像分割(二)局部阈值分割

    千次阅读 2020-04-21 09:45:44
    matlab局部阈值分割代码 I=imread(image); %读取图片 imshow(I),title('原图'); f=im2double(I);%数据类型转换 T=0.5*(min(f(:))+max(f(:))); done=false; while ~done g=f>=T; Tn=0.5*(mean(f(g))+mean(f(~g))...

    matlab局部阈值分割代码

    I=imread(image); %读取图片
    imshow(I),title('原图');
    f=im2double(I);%数据类型转换
    T=0.5*(min(f(:))+max(f(:)));
    done=false;
    while ~done
    	g=f>=T;
    	Tn=0.5*(mean(f(g))+mean(f(~g)));
    	done = abs(T-Tn)<0.1;
    	T=Tn;
    end
    display('Threshold(T)-Iterative');%显示文字
    T
    r=im2bw(f,T);
    Th=graythresh(f);%阈值
    display('Global Thresholding- Otsu''s Method');
    Th
    s=im2bw(f,Th);
    se=strel('disk',10);
    ft=imtophat(f,se);
    Thr=graythresh(ft);
    display('Threshold(T) -Local Thresholding');
    Thr
    l1 = im2bw(ft,Thr);
    figure,imshow(l1),title('局部阈值分割');
    
    

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

    展开全文
  • 学习DIP第57天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan ,出于尊重... 更多图像处理机器学习内容请访问最新网站www.tony4ai.com ...废话开始,今天说下区域阈值(局部阈值),前面介绍的阈值都...
  • 一种指纹图像局部阈值分割算法.pdf 我的资源有 很多图像处理的 主要是指纹识别和文字识别
  • 针对传统鱼群算法在处理图像分割时收敛速度慢,容易陷入局部最优等问题,将云模型和人工鱼群算法结合并有效地应用到多阈值图像分割中。改进后的算法使人工鱼学习能力有所提高,同时满足种群多样性和收敛速度快的特点...
  • 局部阈值法 通过灰度直方图看到图像的照明效果 自适应阈值分割函数: CV_EXPORTS_W void adaptiveThreshold( InputArray src, OutputArray dst, double maxValue, int ...
  • 该部分的学习内容是对经典的阈值分割算法进行回顾,图像阈值化分割是一种传统的最常用的图像分割方法,因其实现简单、计算量小、性能较稳定而成为图像分割中最基本和应用最广泛的分割技术。它特别适用于目标和背景...
  • 图像分割·阈值化分割

    千次阅读 2017-10-26 20:37:15
    图像阈值分割     对图像进行灰度阈值化是最简单的分割处理。图像阈值化算法简单高效,在很多场景中依然得到很多应用,实时性很好。图像阈值化的缺陷也是明显的,不能够很好的利用图像中的诸如色彩、纹理等...
  • Opencv 图像分割阈值化分割 区域分割 边缘分割 卷积 就是两个函数之间的相互关系,然后得出一个新的值,在连续空间做积分计算,然后在离散空间内求和的过程。 在计算机视觉里面,可以把卷积当做一个抽象的过程...
  • 全局阈值分割
  • 图像分割是一种重要的图像处理的技术。对于数字图像,我们往往会对他们中的某一部分感兴趣,这些部分我们称为前景或者目标, 其余部分称为背景。为了识别和分析图像中的目标,我们需要把他们从图像中提取出来,在此...
  • 20180338站位
  • 基于遗传算法的多阈值图像分割

    千次阅读 2020-06-14 15:54:45
    3Otsu阈值分割 3.1经典Otsu法 3.2多阈值Otsu法 3.3 多阈值Otsu法2 4 遗传算法设计 4.1 个体编码 4.2 交配操作 4.2.1 单位置单点交叉 4.2.2 多位置单点交叉 4.3 变异操作 4.4 选择操作 3.5 适应度函数设置...
  • 本为通过Visionpro脚本加载opencv动态连接库,实现了局部阈值图像分割。 提示:以下是本篇文章正文内容,下面案例可供参考 一、如何通过Visionpro实现图像局部自适应阈值二值化? 因为图像背景亮度的变化,..
  • 针对工业图像经常存在不均匀光照的干扰,提出一种光照不均匀图像的灰度波动局部阈值分割算法。从水平及垂直方向上提取图像的灰度波动曲线,并迭代搜索每条曲线上满足给定波动幅度阈值的较大尺度波峰点和波谷点;在每...
  • 关于论文《光照不均匀图像的灰度波动局部阈值分割》最近遇到了需要处理图像上光照不晕的问题,参考了论文《光照不均匀图像的灰度波动局部阈值分割》的方法,觉得它的效果很好,对图像的分析也比较到位。实际尝试以后...
  • 图像分割—灰度阈值分割

    万次阅读 多人点赞 2019-08-14 11:39:55
    阈值分割概念图像阈值分割具有直观和易于实现的特点,在图像分割应用中占有重要地位。许多情况下,图像$f(x,y)$由暗对象和亮对象这两类具有不同灰度级的区域组成,如报纸和书本。这种图像的亮暗部分可以在直方图中...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,608
精华内容 4,243
关键字:

局部阈值图像分割