精华内容
下载资源
问答
  • 图像处理常用的全局阈值和局部阈值方法有哪些? 最近有个项目是用高斯边缘检测(高斯核+边缘检测权重为0),出来图像效果,肉眼看非常好,不同图像存在亮暗差异,每幅图像都能手动尝试找到一个最佳阈值,但是对于...
  • 全局固定阈值和局部自适应阈值

    万次阅读 2015-07-17 17:32:18
    全局固定阈值很容易理解,就是对整幅图像都是用一个统一的阈值来进行二值化;  局部自适应阈值则是根据像素的邻域块的像素值分布来确定该像素位置上的二值化阈值。这样做的好处在于每个像素位置处的二值化阈值...

             全局固定阈值很容易理解,就是对整幅图像都是用一个统一的阈值来进行二值化;

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

    OpenCV中实现了以上几种二值化方法。

    下面这段代码对比了全局固定阈值与局部自适应阈值的二值化结果。


    1. //  基于局部自适应阈值的图像二值化  
    2. #include <iostream>  
    3. #include <opencv2/opencv.hpp>  
    4.   
    5. int main(int argc, char** argv)  
    6. {  
    7.     cv::Mat image = cv::imread("../test.bmp", CV_LOAD_IMAGE_GRAYSCALE);  
    8.     if (image.empty())  
    9.     {  
    10.         std::cout<<"read image failure"<<std::endl;  
    11.         return -1;  
    12.     }  
    13.   
    14.     // 全局二值化  
    15.     int th = 100;   
    16.     cv::Mat global;  
    17.     cv::threshold(image, global, th, 255, CV_THRESH_BINARY_INV);  
    18.   
    19.   
    20.     // 局部二值化  
    21.   
    22.     int blockSize = 25;  
    23.     int constValue = 10;  
    24.     cv::Mat local;  
    25.     cv::adaptiveThreshold(image, local, 255, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY_INV, blockSize, constValue);  
    26.   
    27.   
    28.     cv::imwrite("global.jpg", global);  
    29.     cv::imwrite("local.jpg", local);  
    30.   
    31.     cv::imshow("globalThreshold", global);  
    32.     cv::imshow("localThreshold", local);  
    33.     cv::waitKey(0);  
    34.   
    35.   
    36.     return 0;  
    37. }  

    七种常见阈值分割代码(Otsu、最大熵、迭代法、自适应阀值、手动、迭代法、基本局阈值法)

    【参考http://www.cnblogs.com/skyseraph/archive/2010/12/21/1913058.html】

    展开全文
  • 全局阈值分割

    全局阈值分割

    迭代法阈值获取方法:
    1)选取一个的初始估计值T(128);
    2)用T分割图像。这样便会生成两组像素集合:G1由所有灰度值大于T的像素组成,而G2由所有灰度值小于或等于T的像素组成。
    3)对G1和G2中所有像素计算平均灰度值u1和u2。
    4)计算新的阈值:T=1/2(u1 + u2)。
    重复步骤(2)到(4),直到得到的T值之差小于一个事先定义的参数T0。

    先导进来图片

    I = imread('rice.png');
    [width,height] = size(I);
    T0 = 1;%设置门限
    T1= 128; %初始阈值T1
    %设置G1,G2两个列向量,各自统计<T和>T的值
    gray_leval_1 = 1;
    gray_leval_2 = 1;
    

    matlab里没有do-while语句,所以用
    while 1

    break
    代替

    while 1
        for i = 1:width
            for j = 1:height
                if I(i,j)>T1
                    G1(gray_leval_1) = I(i,j); %得到分组G1
                    gray_leval_1 = gray_leval_1 + 1;
                else
                    G2(gray_leval_2) = I(i,j); %得到分组G2
                    gray_leval_2 = gray_leval_2 + 1;
                end
            end
        end
        %计算G1、G2均值
        avg1 = mean(G1);
        avg2 = mean(G2);
        T2 = (avg1 + avg2)/2;
        if abs(T2 - T1)<T0 
            break;
        end
        T1 = T2;
        gray_leval_1 = 1;
        gray_leval_2 = 1;
    end
    T1
    T1=uint8(T1);
    

    T1=130.7
    然后画出来

    for i=1:width
        for j=1:height
            if(I(i,j)<T1)
                BW1(i,j)=0;
            else 
                BW1(i,j)=1;
            end
        end
    end
    subplot(1,3,1);imshow(I)
    subplot(1,3,2);imshow(BW1);title('阈值分割');
    

    matlab自带的Otus阈值分割方法

    T3=graythresh(I)
    BW2=imbinarize(I,T3);%Otus阈值分割
    subplot(1,3,3);imshow(BW2);title('Otus阈值分割');
    

    I=130.9,差不多哈。
    结果
    在这里插入图片描述

    这个阈值分割方法存在偏差,如果两个峰值数目相差越多,偏差越大
    (假设第一次迭代前,T在正确位置,很容易看出来,随着迭代进行,越来越偏离)
    在这里插入图片描述
    计算的T=93,目测值应该在110-120吧。

    多说一句,图像处理,一定要double一下,否则可能出现问题。比如,我想把大米图的直方图暗部拉大(偏向0),以体现这种偏差,就用了个一次函数的变换,结果这样了

    在这里插入图片描述

    因为先乘k,结果>255的全归于255,以后全错。

    自适应阈值分割

    1)将整幅图像分成一系列互相之间有50%重叠的子图像;
    2)做出每个子图像的直方图;
    3)检测各个子图像的直方图是否为双峰,如果是,则采用最佳阈值法确定一个阈值,否则就不进行处理;
    4)根据对直方图为双峰的子图像得到的阈值通过插值得到所有子图像(像素点)的阈值。
    仨坑
    1、怎么割图像啊(这个还好吧,也不算割,设置好步长来就行了)
    2、怎么检测单峰还是双峰啊,单峰的话,空缺imresize是不行的。
    3、怎么插值啊(主要是老师上课讲的太玄学,按照距离加权,四点平均,把相距很远的点内部全部插满,听懵了。后来想到,matlab直接imresize啊!然后就码下来啦)
    1、分割方式设置好矩形大小和步长就行
    2、峰值个数没写,matlab统计工具箱里好像有正态拟合图像,而不是plot()这种拟合,plot拟合只是画的圆滑了些还是很多局部峰值
    在这里插入图片描述
    3、插值方式采用了imresize函数
    A=imresize(I,2,‘nearest’);%最近邻插值
    B=imresize(I,2,‘bilinear’);%双线性
    C=imresize(I,2,‘bicubic’);%双三次

    I=imread('rice.png');
    T=zeros(15);
    for i=0:14
        for j=0:14
            img = imcrop(I,[1+i*16 1+j*16 31 31]);%内核32*32,步长设置为16
            t=255*graythresh(img);%我这里直接用了
            T(j+1,i+1)=t;%这里注意坐标顺序反着
        end
    end
    T=uint8(T);
    T1=imresize(T,[256 256],'bilinear');%看了下貌似双线性插值最好
    %%
    for i=1:256
        for j=1:256
            if (I(i,j)<T1(i,j))
                BW(i,j)=0;
            else
                BW(i,j)=1;
            end
        end
    end
    imshow(BW)
    

    有一个地方要注意,图像[i,j],矩阵得是[j,i]。

    阈值图像:
    在这里插入图片描述
    底部更暗,所以阈值也更低才能滤完整
    阈值分割结果
    在这里插入图片描述
    嗯,上部噪声少了,下部也更完整了
    然后试了下这位兄弟博客的图片
    这老哥跑的OPENCV中自带的函数,效果一级棒(怎么看着像边缘检测)
    我这个…毕竟没字的地方有黑背景有白背景,一加权,也没法搞,不过还阔以吧
    在这里插入图片描述

    matlab中自带的阈值分割,对大米图还行。全局阈值分割底部大米都割残了,这个方法完整,可是,这跟局部有关系?貌似先调了调灰度,就好分割了

     I=imread('rice.png');
     I=im2double(I);
    se=strel('disk',10);%se.Neighborhood:10*10圆盘
    ft=imtophat(I,se);% 高帽变换
    gt=uint8(255*ft);
    Th=graythresh(ft);                       
    G=imbinarize(ft,Th);%阈值分割                       
    figure,imshow(G),title('局部阈值');
    

    在这里插入图片描述

    Otsu算法

    matlab自带的阈值分割方法
    参考动态阈值–大津法基于Otsu算法的图像自适应阈值分割,重新打了一下
    调用:

    [counts x] = imhist(img);
    [m n] = size(img);
    BW1 = otsu(counts, m*n);
    第一个元素为直方图,第二个元素为图片大小
    或者:
    T=graythresh(I)
    BW2=imbinarize(I,T);

    原理:
    在这里插入图片描述

    在这里插入图片描述
    让T遍历所有灰度值,找到g的最大值
    代码:

    function level = otsu(histogramCounts, total)%histogramCounts是图像的直方图, total图像的总像素数
    sum0 = 0;
    w0 = 0;%像素个数
    maximum = 0.0;%保存T的最大值
    total_value = sum((0:255).*histogramCounts');
    for ii=1:256
        w0 = w0 + histogramCounts(ii);%<T像素个数累加
        if (w0 == 0)
            continue;
        end
        w1 = total - w0;
        if (w1 == 0)%遍历结束>T像素=0
            break;
        end
        sum0 = sum0 +  (ii-1) * histogramCounts(ii);%灰度和
        m0 = sum0 / w0;%平局灰度u0
        m1 = (total_value - sum0) / w1;%平局灰度u1
        icv = w0 * w1 * (m0 - m1) * (m0 - m1);
        if ( icv >= maximum )
            level = ii;
            maximum = icv;
        end
    end
    end
    
    展开全文
  • 在图像处理应用中二值化操作是一个很常用的处理方式,较为常用的图像二值化方法有:1)全局固定阈值;2)局部自适应阈值;3)OTSU等。 全局固定阈值化:对整幅图像都是用一个统一的阈值来进行二值化; 局部自适应...

    在图像处理应用中二值化操作是一个很常用的处理方式,较为常用的图像二值化方法有:1)全局固定阈值;2)局部自适应阈值;3)OTSU等。

    全局固定阈值化:对整幅图像都是用一个统一的阈值来进行二值化;

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

    OpenCV库里实现了以上方法,可相应地自行调用。

    展开全文
  • 20180338站位
    20180338站位
    展开全文
  • 即将图像的灰度值按照一定的阈值将其变成只有0(黑色)255(白色),这样便于目标区域背景区域分隔开,实际上一般是黑色即灰度值为...自定义也是可行的,如将全局平均值、中值等作为阈值,或者局部的中值等作为阈值
  • python+opencv-05 全局阈值处理阈值处理与区域分割全局阈值处理 阈值处理与区域分割 在图像处理中,我们希望把...在阈值处理中一般有全局阈值处理和局部阈值处理两种方法 全局阈值处理 全局阈值处理一般有两种处理方
  • Otsu的全局阈值处理实现

    千次阅读 2013-07-14 13:05:54
    利用图像中与像素具有相似邻域结构的像素提取当前像素的非局部空间信息,构造了基于像素的灰度信息局部空间灰度信息的二维直方图,并将此二维直方图引入到Otsu曲线阈值分割法中,提出了基于灰度局部空间灰度...
  • 1 全局固定阈值分割 threshold(image, global, th, 255, CV_THRESH_BINARY_INV);  一副图像包括目标、背景噪声,设定某一阈值T将图像分成两部分:大于T的像素群小于T的像素群。 在实际处理时候,...
  • halcon阈值分割

    千次阅读 2017-08-29 10:58:09
    关于阈值分割:全局阈值和局部阈值之分1.动态阈值分割-根据局部均值和方差 var_threshold(Image : Region : MaskWidth, MaskHeight, StdDevScale, AbsThreshold, LightDark : ) var_threshold图像灰度值在均值与...
  • 图像的阈值操作

    2019-05-15 20:12:56
    在opencv 中阈值操作可以分为全局阈值和局部阈值 先说全局阈值,用的API是threshold(),它的原理:对于数组中每个值,根据其高于或者低于这个阈值做出相应的处理,给定一个数组和阈值。根据个人喜欢,也可...
  • 全局阈值和局部阈值 一、图像二值化 定义:图像的二值化,就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的只有黑和白的视觉效果。 灰度值0:黑,灰度值255:白 一幅图像包括目标...
  • 当图像的色彩分布不均衡时,使用全局阈值处理的效果不是很好,这是使用局部阈值处理来进行分割,可以产生很好的效果。 局部阈值的处理原理是,针对每一个像素点专门配置一个阈值来进行处理,这些阈值就构成了原图...
  • 基于局部统计的可变阈值处理

    千次阅读 2019-07-27 11:31:52
    文章目录一、概念二、全局和局部阈值处理的比较 一、概念 当背景照明非常不均匀时,全局阈值处理通常会失败。 该问题的一种解决方案是试图估计明暗函数,并用它来补偿不均匀的灰度模式,然后使用前节讨论的方法对...
  • 图像的二值化分为全局二值化和局部二值化,其区别在于阈值是否在一张图像进行统一。 全局阈值全局阈值法方法就是将图像中低于某个阈值的像素设置为黑色(0),而其他的设置为白色(255)。全局固定阈...
  • 提出一种融合多种特征的图像过曝光区域检测算法。...对实验图像进行过曝光区域检测,结果显着示,相较于亮度阈值采用亮度​​颜色特征的常规检测方法,约会新特征后的改进算法检测出的过照射范围区域连通性更好。
  • 一般会提到局部极小和全局最小。 1.局部极小解:参数空间中某个点,其邻域点的误差函数值均不小于该点的误差函数值。 2.全局最小解:参数空间某个点,所有其他点的误差函数值均不小于该点的误差函数值。 要成为局部...
  • OpenCV_基于局部自适应阈值的图像二值化在图像处理应用中二值化操作是一个很常用的处理方式,例如零器件图片的处理、文本图片验证码图片中字符的提取、车牌识别中的字符分割,以及视频图像中的运动目标检测中的...
  • 在图像处理应用中二值化操作是一个很常用的处理方式,例如零器件图片的处理、文本图片验证码图片中字符的提取、车牌识别中的字符分割,以及视频图像中的运动目标检测中的前景分割,等等。 较为常用的图像二值化...
  • 即将256个亮度等级的灰度图像通过适当的阀值选取而获得仍然可以反映图像整体和局部特征的二值化图像。 在数字图像处理中,二值图像占有非常重要的地位,特别是在实用的图像处理中,以二值图像处理实现而构成的系统是...
  • opencv之阈值二值化

    2020-04-28 21:34:55
    1.全局阈值 定义:全局只使用一个阈值进行二值划分 缺点:没有考虑光照,明暗变化,用全局阈值可能会丢失图像信息 2.局部自适应阈值 定义:对不同区域设置不同的阈值,利用这些不同的阈值进行局部的划分,这些阈值...
  • 先计算图像的灰度直方图,假设灰度值的均值是130,称这个均值为M,现在任意选取一个灰度值t,则可以将直方图分成前后俩部分,称这俩部分分别为AB,这俩部分各自的平均值成为MAMB。A部分里的像素数占总像素数的...
  • 针对在岩石变形实验的熔融图像处理中,图像的曝光不均、单个像素点灰度值异常和裂痕带来的分割噪声问题,本文提出了一种基于数学形态学中的腐蚀、膨胀方法的自适应阈值分割算法,通过和全局阈值和局部阈值法的对比...
  • 阈值分割

    2019-07-08 18:36:57
    #阈值分割:全局和局部阈值分割 #主要阈值的选取 import numpy as np import cv2 src = np.array([[123,234,68], [33,51,17], [48,98,234], [129,89,27], [45,167,134]]...
  • 常用的两种:全局阈值分割自适应局部阈值分割。 全局阈值分割 全局阈值分割指的是将灰度值大于thresh(阈值)的图像设为白色,小于或者等于thresh的像素设为黑色;或者反只。 假设输入图像...
  • 为适应在不同光照、不同尺寸、不同灰度下快速响应矩阵码图像的二值化处理,提出了一种集全局阈值局部阈值和多级阈值化的二值化算法。实验结果表明,该算法性能优越,明显地提高了条码的识别率,可以满足实时场景下...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 258
精华内容 103
关键字:

全局阈值和局部阈值