精华内容
下载资源
问答
  • 图像分割OTSU

    2012-06-26 16:01:45
    jpeg图像进行阈值分割,采用OTSU方法。彩色图像转换为灰度图像,然后计算阈值,分割图像。(包括库函数OTSU,和自编OTSU函数)
  • OTSU算法对图像二值化

    2017-07-20 14:10:03
    OTSU算法对图像二值化
           出处:http://blog.csdn.net/WuHaibing_CVer
           OTSU算法是由日本学者OTSU于1979年提出的一种对图像进行二值化的高效算法。
           1. OTSU算法原理简介
           对于一幅图像,设当前景与背景的分割阈值为t时,前景点占图像比例为w0,均值为u0,背景点占图像比例为w1,均值为u1。则整个图像的均值为u = w0*u0+w1*u1。建立目标函数g(t)=w0*(u0-u)^2+w1*(u1-u)^2,g(t)就是当分割阈值为t时的类间方差表达式。OTSU算法使得g(t)取得全局最大值,当g(t)为最大时所对应的t称为最佳阈值。OTSU算法又称为最大类间方差法。
           2.OTSU算法例程
    下面是OSTU算法的C语言代码及其测试,代码基于opencv。
    1. #include <cv.h>  
    2. #include <highgui.h>  
    3.   
    4. int otsu(IplImage *image)  
    5. {  
    6.     assert(NULL != image);  
    7.   
    8.     int width = image->width;  
    9.     int height = image->height;  
    10.     int x=0,y=0;  
    11.     int pixelCount[256];  
    12.     float pixelPro[256];  
    13.     int i, j, pixelSum = width * height, threshold = 0;  
    14.   
    15.     uchar* data = (uchar*)image->imageData;  
    16.   
    17.     //初始化  
    18.     for(i = 0; i < 256; i++)  
    19.     {  
    20.         pixelCount[i] = 0;  
    21.         pixelPro[i] = 0;  
    22.     }  
    23.   
    24.     //统计灰度级中每个像素在整幅图像中的个数  
    25.     for(i = y; i < height; i++)  
    26.     {  
    27.         for(j = x;j <width;j++)  
    28.         {  
    29.             pixelCount[data[i * image->widthStep + j]]++;  
    30.         }  
    31.     }  
    32.   
    33.   
    34.     //计算每个像素在整幅图像中的比例  
    35.     for(i = 0; i < 256; i++)  
    36.     {  
    37.         pixelPro[i] = (float)(pixelCount[i]) / (float)(pixelSum);  
    38.     }  
    39.   
    40.     //经典ostu算法,得到前景和背景的分割  
    41.     //遍历灰度级[0,255],计算出方差最大的灰度值,为最佳阈值  
    42.     float w0, w1, u0tmp, u1tmp, u0, u1, u,deltaTmp, deltaMax = 0;  
    43.     for(i = 0; i < 256; i++)  
    44.     {  
    45.         w0 = w1 = u0tmp = u1tmp = u0 = u1 = u = deltaTmp = 0;  
    46.   
    47.         for(j = 0; j < 256; j++)  
    48.         {  
    49.             if(j <= i) //背景部分  
    50.             {  
    51.                 //以i为阈值分类,第一类总的概率  
    52.                 w0 += pixelPro[j];        
    53.                 u0tmp += j * pixelPro[j];  
    54.             }  
    55.             else       //前景部分  
    56.             {  
    57.                 //以i为阈值分类,第二类总的概率  
    58.                 w1 += pixelPro[j];        
    59.                 u1tmp += j * pixelPro[j];  
    60.             }  
    61.         }  
    62.   
    63.         u0 = u0tmp / w0;        //第一类的平均灰度  
    64.         u1 = u1tmp / w1;        //第二类的平均灰度  
    65.         u = u0tmp + u1tmp;      //整幅图像的平均灰度  
    66.         //计算类间方差  
    67.         deltaTmp = w0 * (u0 - u)*(u0 - u) + w1 * (u1 - u)*(u1 - u);  
    68.         //找出最大类间方差以及对应的阈值  
    69.         if(deltaTmp > deltaMax)  
    70.         {     
    71.             deltaMax = deltaTmp;  
    72.             threshold = i;  
    73.         }  
    74.     }  
    75.     //返回最佳阈值;  
    76.     return threshold;  
    77. }  
    78.   
    79. int main(int argc, char* argv[])  
    80. {  
    81.     IplImage* srcImage = cvLoadImage("D:\\technology\\CV\\Database\\image\\rice.png",0);  
    82.     assert(NULL != srcImage);  
    83.   
    84.     cvNamedWindow("src");  
    85.     cvShowImage("src",srcImage);  
    86.   
    87.     IplImage* biImage = cvCreateImage(cvGetSize(srcImage),8,1);  
    88.   
    89.     //计算最佳阈值  
    90.     int threshold = otsu(srcImage);  
    91.     //对图像二值化  
    92.     cvThreshold(srcImage,biImage,threshold,255,CV_THRESH_BINARY);  
    93.   
    94.     cvNamedWindow("binary");  
    95.     cvShowImage("binary",biImage);  
    96.       
    97.     cvWaitKey(0);  
    98.   
    99.     cvReleaseImage(&srcImage);  
    100.     cvReleaseImage(&biImage);  
    101.     cvDestroyWindow("src");  
    102.     cvDestroyWindow("binary");  
    103.   
    104.     return 0;  
    105. }  
    下面是上述代码的运行结果图片。其中左边为原图像,右边为使用OTSU算法进行二值化后的图像。
    展开全文
  • OTSU算法 (1)原理: 对于图像I(x,y),前景(即目标)和背景的分割阈值记作T,属于背景的像素个数占整幅图像的比例记为ω0,其平均灰度μ0;前景像素个数占整幅图像的比例为ω1,其平均灰度为μ1。图像的总平均灰度...

    OTSU算法

    (1)原理:

    对于图像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) 这就是类间方差
    采用遍历的方法得到使类间方差g最大的阈值T,即为所求。

    将公式(5)带入(6)即可得到公式(7)。

    (2)matlab函数:

    matlab中函数graythresh既是使用大津法求得分割阈值T。用法如下:

          T = graythresh(img);

          BW = im2bw(img,T);

    链接:https://zhuanlan.zhihu.com/p/34112446


     推导:

     


     

    另一个参考链接:https://blog.csdn.net/liyuanbhu/article/details/49387483

     

    转载于:https://www.cnblogs.com/yibeimingyue/p/10888246.html

    展开全文
  • 大津法,著名的二值化选取值域的方法.本代码为MATLAB运行。为上传者自己编写,可以运行。欢迎下载。
  • 彩色图像的分割,用到的函数都有简单说明,包括滤波、分割、膨胀腐蚀这些,效果一般吧,可以根据自己需求加工改进,比较适合初学者,运行main.m即可,操作简单。
  • 图像分割中OTSU算法

    千次阅读 2015-04-20 21:26:51
    OTSU算法是图像处理里面一个常用的方法,它主要用来自动的选择一个阈值,以此来图片进行分割,更好的区别前景区域和背景区域。OTSU方法的思路比较简单,大体如下: 1. 将图像定义为两个部分,前景和背景; a....

    OTSU算法是图像处理里面一个常用的方法,它主要用来自动的选择一个阈值,以此来对图片进行分割,更好的区别前景区域和背景区域。OTSU方法的思路比较简单,大体如下:

    1.  将图像定义为两个部分,前景和背景;

    a. 前景(foreground),缩写为fg,其像素个数所占图像的比例为 ,其像素的颜色的均值为

    b. 背景(background),缩写为bg,其像素个数所占图像的比例为 ,其像素的颜色的均值为

    整体图像的均值为  


    2.  建立目标函数

    求取最佳阈值t,满足g(t)取得全局最大值,此表达式称为类间方差表达式。


    下面给出OTSU算法的代码:

    int otsu(const IplImage *src_image)
    {
    	double sum = 0.0;
    	double w0 = 0.0;
    	double w1 = 0.0;
    	double u0_temp = 0.0;
    	double u1_temp = 0.0;
    	double u0 = 0.0;
    	double u1 = 0.0;
    	double u = 0.0;
    	double delta_temp = 0.0;
    	double delta_max = 0.0;
    
    	int pixel_count[256]={0};	//256个灰度级
    	float pixel_pro[256]={0};	//每个灰度级出现的概率
    	int threshold = 0;			//所求的最佳临界阈值
    
    	uchar* data = (uchar*)src_image->imageData;
    	//统计每个灰度级中像素的个数
    	for(int i = 0; i < src_image->height; i++)
    	{
    		for(int j = 0;j < src_image->width;j++)
    		{
    			pixel_count[(int)data[i * src_image->width + j]]++;
    			sum += (int)data[i * src_image->width + j];
    		}
    	}
    
        u = sum / ( src_image->height * src_image->width );
    
    	//计算每个灰度级的像素数目占整幅图像的比例
    	for(int i = 0; i < 256; i++)
    	{
    		pixel_pro[i] = (float)pixel_count[i] / ( src_image->height * src_image->width );
    	}
    
    	//遍历灰度级[0,255],寻找合适的threshold
    	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++)
    		{
    			//i值为当前暂定的阈值,小于i为背景,大于i为前景
    			if(j <= i)   //背景部分
    			{
    				w0 += pixel_pro[j];
    				u0_temp += j * pixel_pro[j];
    			}
    			else   //前景部分
    			{
    				w1 += pixel_pro[j];
    				u1_temp += j * pixel_pro[j];
    			}
    		}
    		u0 = u0_temp / w0;
    		u1 = u1_temp / w1;
    		u = u0_temp + u1_temp;
    		delta_temp = w0 * pow((u0 - u), 2) + w1 * pow((u0 - u), 2);
    
    		if(delta_temp > delta_max)
    		{
    			delta_max = delta_temp;
    			threshold = i;
    		}
    	}
    	return threshold;
    }

    下面是用OSTU算法的效果,三幅图依次是原图,掩码图,和提取的灰度图


    
    展开全文
  • otsu自动阈值对图像二值化程序

    千次阅读 2010-04-21 22:15:00
    otsu算法网上都是,原理就不细说了,下面给出一个基于opencv的图像二值化算法。opencv2.0已经包含了这个算法,如果装opencv2.0的话就不用自己写了,cvThreshold的最后一个参数可以选择是否是用otsu自动阈值frame为...

    otsu算法网上都是,原理就不细说了,下面给出一个基于opencv的图像二值化算法。opencv2.0已经包含了这个算法,如果装opencv2.0的话就不用自己写了,cvThreshold的最后一个参数可以选择是否是用otsu自动阈值

    frame为输入图像,dst为二值化后的图像

    void otsuThreshold(IplImage *frame,IplImage* dst)
    {
     int width = frame->width;
     int height = frame->height;
     
     int i, j, pixelSum = width * height, threshold = 0;
     int pixelCount[255]={0};
     float pixelPro[255]={0};
     //uchar* data = (uchar*)frame->imageData;
     
     for(i = 0; i < GrayScale; i++)
     {
      pixelCount[i] = 0;
      pixelPro[i] = 0;
     }
     int dd=0;
     //统计灰度级中每个像素在整幅图像中的个数
     for(j = 0; j < height; j++)
     {
      for(i = 0;i < width;i++)
      {
       //pixelCount[(int)data[i * width + j]]++;
        dd=S(frame,i,j);
       pixelCount[S(frame,i,j)]++;
       if(dd!=255)
       {
        int kk=12;
       }
      }
     }
     
     //计算每个像素在整幅图像中的比例
     for(i = 0; i < GrayScale; i++)
     {
      pixelPro[i] = (float)pixelCount[i] / pixelSum;
     }
     
     //遍历灰度级[0,255]
     float w0, w1, u0tmp, u1tmp, u0, u1, u,
      deltaTmp, deltaMax = 0;
     for(i = 0; i < GrayScale; i++)
     {
      w0 = w1 = u0tmp = u1tmp = u0 = u1 = u = deltaTmp = 0;
      for(j = 0; j < GrayScale; j++)
      {
       if(j <= i)   //背景部分
       {
        w0 += pixelPro[j];
        u0tmp += j * pixelPro[j];
       }
       else   //前景部分
       {
        w1 += pixelPro[j];
        u1tmp += j * pixelPro[j];
       }
      }
      u0 = u0tmp / w0;
      u1 = u1tmp / w1;
      u = u0tmp + u1tmp;
      deltaTmp =
       w0 * (float)pow((u0 - u), 2) + w1 * (float)pow((u1 - u), 2);
      if(deltaTmp > deltaMax)
      {
       deltaMax = deltaTmp;
       threshold = i;
      }
     }
     cvThreshold(frame,dst,threshold,255,CV_THRESH_BINARY);
    }

    展开全文
  • 使用显着性与Otsu阈值相结合皮肤镜图像进行自动分割
  • OTSU算法是由日本学者OTSU于1979年提出的一种对图像进行二值化的高效算法。(大津算法) Otsu原理 对于图像 t (x,y),前景(即目标)和背景的分割阈值记作 T,属于前景的像素点数占整幅图像的比例记为 ω0,平均灰度为...
  • 图像分割值OTSU方法介绍

    千次阅读 2015-05-30 00:08:39
    图像分割方法今天暂时不...假设输入图像为灰度图像(0-255),那么在图像二值化的目的就是对图像进行基于设定阈值的分割得到图像的前景(255)和背景(0),进而得到二值图像。实现过程是,首先统计灰度图像的分布直方
  • Otsu方法是一种全局化的动态二值化方法,又叫大津法,是一种灰度图像二值化的常用算法。该算法的基本思想是:设使用某一个阈值将灰度图像根据灰度大小,分成目标部分和背景部分两类,在这两类的类内方差最小和类间...
  • 阈值分割是图像分割中广泛采用的一种简单有效的方法。将群智能中的人工鱼群算法应用到阈值分割算法中, 提出了二维Otsu阈值分割的人工鱼群...统计结果显示, 该算法不仅能够对图像进行更准确的分割, 而且收敛的速度更快。
  • 针对传统三维 Otsu 法存在抗噪性差、计算复杂度高、难以多阈值扩展等不足,提出了一种基于空间截面投影的...实验结果表明,与现有三维 Otsu 法相比,该算法计算效率高、抗噪性好,能含不同噪声的图像进行较好的分割。
  • 这个渐变图像应用Otsu阈值化,然后进行相似数量的形态闭合(10次迭代),然后获取结果图像的形态梯度。在现在这些区域很容易被发现。可以从等高线中过滤圆形区域,例如,使用基于区域的方法:使用轮廓的边界框尺寸...
  • 图像阈值自本教程开始,我们已经进入了图像处理的一些基本...然而要想实现二值化,就最好先对图像进行灰度化处理,因为我们需要的图像不能具备GBR三元通道。▼ 简单阈值我们先来看函数原型:ret, dst = cv2.thresh...
  • 简介:大津法(OTSU)是一种确定图像二值化分割阈值的算法,由...OTSU算法OTSU算法也称最大类间差法,有时也称之为大津算法,由大津于1979年提出,被认为是图像分割中阈值选取的最佳算法,计算简单,不受图像亮度和...
  • 首先采用最佳熵的方法初步提取图像的目标区域,根据该目标区域特征自适应地调整三维OTSU算法的背景搜索范围,然后采用三维OTSU算法并结合粒子群优化最佳分割阈值图像进行分割。实验结果表明,与三维OTSU阈值分割...
  • 1.用迭代阈值法确定阈值,对图像进行分割,显示阈值和分割结果; import cv2 import numpy as np import matplotlib.pyplot as plt import matplotlib.cm as cm def diedai(img): img_array = np.array(img).a...
  • 灰度图像的自动阈值分割(Otsu 法)

    万次阅读 多人点赞 2015-10-24 20:04:30
    灰度图像的自动阈值分割(Otsu 法)机器视觉领域许多算法都要求先对图像进行二值化。这种二值化操作阈值的选取非常重要。阈值选取的不合适,可能得到的结果就毫无用处。今天就来讲讲一种自动计算阈值的方法。这种...
  • %得到的图像进行自适应算法的隐藏,又可以得到(n-1)幅的图像。%(n-1)幅的图像进行Arnold变换,得到(n-1)幅的图像作为密钥,此外,密钥还有迭代次数,置乱规则,Arnold加密规则%主要缺点是Arnol...
  • 在很多场合,对图像进行二值化,可以忽略图像的颜色信息,背景信息,保留更加重要的形态信息。并且图像二值化处理之后,图像的信息量大为减少,处理起来也更加方便。最简单的图像二值化的方法。就是先将图像转化为...
  • 为实现图像较为精确的分割,充分考虑边界的影响,从二维线阈值分割替代传统的点阈值分割思想出发,提出了折线阈值型Otsu法。该方法以边界信息的迭代分割的手段获得实际用于分割的二维折线阈值。仿真结果表明,该...
  • 提出了一种基于蚁群算法和二维Otsu的图像分割方法,利用蚁群算法快速寻优的特点,求出二维Otsu图像分割的阈值分割点,对图像进行分割。根据源图像和邻域平滑后图像的灰度,以及灰度频数进行聚类。通过灰度直方图的峰值点...
  • 概念OTSU算法是由日本学者OTSU于1979年提出的一种对图像进行二值化的高效算法。(大津算法)Otsu原理对于图像 t (x,y),前景(即目标)和背景的分割阈值记作 T,属于前景的像素点数占整幅图像的比例记为 ω0,平均灰度...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 403
精华内容 161
关键字:

对图像otsu