精华内容
下载资源
问答
  • 图像二值化处理

    2018-07-24 16:56:39
    matlab对图像二值化处理,matlab对图像二值化处理,matlab对图像二值化处理
  • matlab图像二值化处理

    2018-07-14 20:36:22
    用于图像二值化处理的简单代码。可以自动确定合适的阈值,并显示处理前、处理后的效果图。
  • 初学图像处理的人,一般首先熟悉图像格式,图像存储方式,8位灰度图,24位彩色图等基础知识,然后接触到的图像算法一般都是图像直方图、图像二值化处理等基础算法。二值化算法作为图像处理入门级算法,在很多场合都...

    4f10ffb2524931a863e10784381cb601.png

    初学图像处理的人,一般首先熟悉图像格式,图像存储方式,8位灰度图,24位彩色图等基础知识,然后接触到的图像算法一般都是图像直方图、图像二值化处理等基础算法。二值化算法作为图像处理入门级算法,在很多场合都有应用。常用的二值化算法是固定阈值二值化,算法本身很简单,机器视觉处理的很多都是8位灰度图像,灰度值从0到255,。所谓二值化就是给定一个阈值,让小于这个阈值的灰度值为0,大于等于这个阈值的设为255,这样在图像上显示出来就是一幅黑白图像。当然,很多资料介绍的是小于阈值为0,大于阈值为1。这其实是一个意思。但是,如果想看到显示效果,一般不会用1来表示亮的点,而是用255。如果熟悉了最早我写的opencv对于mat数据的操作,要实现这种固定阈值算法是非常简单的。但是,opencv已经写好了二值化算法,也不需要我们自己写了。下面看一下具体的例子,代码在vs2015+opencv4.0.1上实现。如果已经配置好了opencv,可以直接运行。

    #include "iostream"
    #include "opencv2opencv.hpp"
    using namespace std;
    int main(int argc, char ** argv)
    {
    Mat src = imread("e:img1.ppm", 0);
    Mat dst;
    threshold(src, dst, 100, 255, 0);
    Mat adpDst;
    adaptiveThreshold(src, adpDst, 100, 0, 0, 31,-20);
    namedWindow("src", 0);
    imshow("src", src);
    namedWindow("dst", 0);
    imshow("dst", dst);
    namedWindow("adp", 0);
    imshow("adp", adpDst);
    waitKey(0);
    return 0;
    }

    可以看到,算法本身很简单,只需要一个函数threshold就可以实现。第一个参数是输入图像,第二个是输出图像,第三个是阈值,第四个是指将大于等于阈值的灰度值设置为多大的值,最后一个参数是二值化方式。在opencv里面用了一个枚举类型来定义。如下:

    enum ThresholdTypes {

    THRESH_BINARY = 0,

    THRESH_BINARY_INV = 1,

    THRESH_TRUNC = 2,

    THRESH_TOZERO = 3,

    THRESH_TOZERO_INV = 4,

    THRESH_MASK = 7,

    THRESH_OTSU = 8,

    THRESH_TRIANGLE = 16

    };

    在这几种二值化方式的中,最常用的也就是前面两种。有的人还喜欢用THRESH_OTSU进行二值化,这是大律法。然而,如果直接用大律法进行二值化,实际效果并不是很好,因为这是全局阈值,比较好的二值化方法应该用局部阈值,毕竟图像上每个地方的灰度值差别是比较大的。所以,opencv里面有提供了一个局部自适应二值化函数adaptiveThreshold。这个函数的效果比较好,但是,很多人用这个函数的时候,却不知道参数怎么设置比较好,结果往往出来的效果不理想,反而认为算法不好。其实,就算固定阈值二值化算法,在很多时候都能得到很好的效果,只不过我们很多人不是很清楚算法怎么配合使用而已。比如,我们设置参数的时候,对于adaptiveThreshold算法,设置的块大小很多人都是3、5、7。好像觉得把块设大一点图像就不对了一样,对于adaptiveThreshold的最后一个参数,其实还可以设置为负值,可能最后得到的效果就完全不一样。所以,这就是我们对算法不够了解,只知道如何调用这些函数,却不知道怎么使用是最好的。

    另外,对于threshold函数,由于只有一个固定阈值,而很多时候我们可能需要分段阈值,有可能图像上的感兴趣区域灰度值在100到180之间,那么这个函数就需要我们自己改造一下才能够达到效果。此外,其实很多时候是不直接对原图进行二值化操作的,这种效果并不好,这也是很多人觉得threshold函数效果不好的原因,给个提示,如果你先将图像进行一下边缘检测,再用这个函数试试,可能效果就完全不一样了,当然边缘检测的函数也要有选择,不能随便哪个函数都可以。

    上面代码只是展示了threshold和adaptiveThreshold两个函数的调用方法,具体的参数怎么调节才能到达最好的效果,还需要根据具体的图像来确定,在视觉检测中,一般要将参数发布出来,供技术人员调试,不然很难达到实际检测需求。下面的图是上面两种算法的结果,可以参考一下。

    7b81661e639cf4796f15c72eaa027065.png

    图1 原图

    4eeb7316644ce16f41403f7b6ac00797.png

    图2 固定阈值二值化

    3bca07cbe13ea54ea0a9e7098a7d28dc.png

    图3 自适应二值化

    展开全文
  • 提出了一种指纹图像二值化处理方法,该方法利用维纳滤波对原始图像进行预处理,然后采用连续块方向图计算指纹方向,结合方向信息用方向滤波模板对图像进行增强二值化。实验结果表明,该算法可以消除孔洞、去除粘线、...
  • Python - OpenCV 图像二值化处理

    千次阅读 2020-11-21 16:35:46
    图像二值化处理时图像处理过程中非常常见的一种操作,在python中比较常用的主要是opencv,pil两个第三库,对比来看的话,opencv使用要更加的方便灵活, 文本主要介绍以下基于opencv的图像二值化处理方法。 首相我们...

          图像二值化处理时图像处理过程中非常常见的一种操作,在python中比较常用的主要是opencv,pil两个第三库,对比来看的话,opencv使用要更加的方便灵活,
    文本主要介绍以下基于opencv的图像二值化处理方法。
         首先我们来看一种比较简单的图像二值化处理方法。

    全局阈值二值化

    主要思路就是设置一个阈值,低于该阈值的像素置为0(黑色),高于该阈值的像素置为255(白色),下面来看代码

    def image_binarization(img):
            # 将图片转为灰度图
            gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    
            # retval, dst = cv2.threshold(gray, 110, 255, cv2.THRESH_BINARY)
            # 最大类间方差法(大津算法),thresh会被忽略,自动计算一个阈值
            retval, dst = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
            cv2.imwrite('binary.jpg', dst)

    cv2.threshold(src, thresh, maxval, type)

    • src:表示的是图片源
    • thresh:表示的是阈值(分割值)
    • maxval:表示的是最大值
    • type:表示的是这里划分的时候使用的是什么类型的算法,包含以下几种


    该函数有两个返回值,第一个retVal(得到的阈值),第二个就是阈值化后的图像。

    上述方法较为简单,且运算效率较高,但是存在一个问题,如果你想批量处理一批文本图片,有的图片文本较深,有的图片文本较浅,那么你设置一个单一的阈值就会存在问题,如果阈值较小,那么颜色较浅的文本图片二值化过后内容会丢失,如果阈值较大,图片二值化处理后,文本内容很可能和背景融为一体较难区分。

    阈值设置为70

                

                     处理前                                                                   处理后

    阈值设置为110

                      

                   处理前                                                                   处理后

    大津算法
    cv2.threshold处理上述5种算子之外,还提供了一种可以根据图片像素自动计算阈值的一种方法,cv2.THRESH_OTSU(最大类间方差法,也叫大津算法),thresh会被忽略,自动计算一个阈值。

     retval, dst = cv2.threshold(gray, 0, 255,  cv2.THRESH_BINARY | cv2.THRESH_OTSU)

     

                             处理前                                                                  处理后 

    虽然该算子可以在一定程度上可以解决上述问题,但是该算子对于比较复杂的图片处理效果还是很不理想,尤其是一些明暗差异较大的图片,下面记录一种可以局部自适应的二值化的方法

    局部阈值二值化

    为了解决我们上述所说的问题,我们可以采用cv2.adaptiveThreshold方法进行二值化处理,函数的大致意思是以图片中的每个像素点为中心取他周围n*n的范围内的像素,然后根据这个区域内的像素值来计算出来一个阈值,决定当前像素点是处理成0还是255。

    主要包含以下几个步骤

    1. 加载图像
    2. 转灰度图
    3. 图像预处理(根据个人需求进行处理)
    4. 二值化处理
    5. 降噪(根据个人需求进行处理)

    def image_binarization_part_situation(img):
        '''
        局部二值化
        :return:
        '''
        # 转灰度图
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        # 图像压缩(非必要步骤)
        new_gray = np.uint8((255 * (gray/255.0)**1.4))
        # 二值化
        dst = cv2.adaptiveThreshold(new_gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 15, 1)
        # 中值滤波
        img_median = cv2.medianBlur(dst, 5)
    

    核心函数

    cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C, dst=None)

    src:需要进行二值化的一张灰度图像

    maxValue:满足条件的像素点需要设置的灰度值。(将要设置的灰度值)

    adaptiveMethod:自适应阈值算法。可选ADAPTIVE_THRESH_MEAN_C 或 ADAPTIVE_THRESH_GAUSSIAN_C

    thresholdType:opencv提供的二值化方法,只能THRESH_BINARY或者THRESH_BINARY_INV

    blockSize:要分成的区域大小,上面的N值,取奇数

    C:常数,每个区域计算出的阈值的基础上在减去这个常数作为这个区域的最终阈值,可以为负数

    dst:输出图像,可以忽略

                    

     

    展开全文
  • 初学图像处理的人,一般首先熟悉图像格式,图像存储方式,8位灰度图,24位彩色图等基础知识,然后接触到的图像算法一般都是图像直方图、图像二值化处理等基础算法。二值化算法作为图像处理入门级算法,在很多场合都...

    1704e8552209546d7ed69ff6b8d63fdd.png

    初学图像处理的人,一般首先熟悉图像格式,图像存储方式,8位灰度图,24位彩色图等基础知识,然后接触到的图像算法一般都是图像直方图、图像二值化处理等基础算法。二值化算法作为图像处理入门级算法,在很多场合都有应用。常用的二值化算法是固定阈值二值化,算法本身很简单,机器视觉处理的很多都是8位灰度图像,灰度值从0到255,。所谓二值化就是给定一个阈值,让小于这个阈值的灰度值为0,大于等于这个阈值的设为255,这样在图像上显示出来就是一幅黑白图像。当然,很多资料介绍的是小于阈值为0,大于阈值为1。这其实是一个意思。但是,如果想看到显示效果,一般不会用1来表示亮的点,而是用255。如果熟悉了最早我写的opencv对于mat数据的操作,要实现这种固定阈值算法是非常简单的。但是,opencv已经写好了二值化算法,也不需要我们自己写了。下面看一下具体的例子,代码在vs2015+opencv4.0.1上实现。如果已经配置好了opencv,可以直接运行。

    #include "iostream"
    #include "opencv2opencv.hpp"
    using namespace std;
    int main(int argc, char ** argv)
    {
    Mat src = imread("e:img1.ppm", 0);
    Mat dst;
    threshold(src, dst, 100, 255, 0);
    Mat adpDst;
    adaptiveThreshold(src, adpDst, 100, 0, 0, 31,-20);
    namedWindow("src", 0);
    imshow("src", src);
    namedWindow("dst", 0);
    imshow("dst", dst);
    namedWindow("adp", 0);
    imshow("adp", adpDst);
    waitKey(0);
    return 0;
    }

    可以看到,算法本身很简单,只需要一个函数threshold就可以实现。第一个参数是输入图像,第二个是输出图像,第三个是阈值,第四个是指将大于等于阈值的灰度值设置为多大的值,最后一个参数是二值化方式。在opencv里面用了一个枚举类型来定义。如下:

    enum ThresholdTypes {

    THRESH_BINARY = 0,

    THRESH_BINARY_INV = 1,

    THRESH_TRUNC = 2,

    THRESH_TOZERO = 3,

    THRESH_TOZERO_INV = 4,

    THRESH_MASK = 7,

    THRESH_OTSU = 8,

    THRESH_TRIANGLE = 16

    };

    在这几种二值化方式的中,最常用的也就是前面两种。有的人还喜欢用THRESH_OTSU进行二值化,这是大律法。然而,如果直接用大律法进行二值化,实际效果并不是很好,因为这是全局阈值,比较好的二值化方法应该用局部阈值,毕竟图像上每个地方的灰度值差别是比较大的。所以,opencv里面有提供了一个局部自适应二值化函数adaptiveThreshold。这个函数的效果比较好,但是,很多人用这个函数的时候,却不知道参数怎么设置比较好,结果往往出来的效果不理想,反而认为算法不好。其实,就算固定阈值二值化算法,在很多时候都能得到很好的效果,只不过我们很多人不是很清楚算法怎么配合使用而已。比如,我们设置参数的时候,对于adaptiveThreshold算法,设置的块大小很多人都是3、5、7。好像觉得把块设大一点图像就不对了一样,对于adaptiveThreshold的最后一个参数,其实还可以设置为负值,可能最后得到的效果就完全不一样。所以,这就是我们对算法不够了解,只知道如何调用这些函数,却不知道怎么使用是最好的。

    另外,对于threshold函数,由于只有一个固定阈值,而很多时候我们可能需要分段阈值,有可能图像上的感兴趣区域灰度值在100到180之间,那么这个函数就需要我们自己改造一下才能够达到效果。此外,其实很多时候是不直接对原图进行二值化操作的,这种效果并不好,这也是很多人觉得threshold函数效果不好的原因,给个提示,如果你先将图像进行一下边缘检测,再用这个函数试试,可能效果就完全不一样了,当然边缘检测的函数也要有选择,不能随便哪个函数都可以。

    上面代码只是展示了threshold和adaptiveThreshold两个函数的调用方法,具体的参数怎么调节才能到达最好的效果,还需要根据具体的图像来确定,在视觉检测中,一般要将参数发布出来,供技术人员调试,不然很难达到实际检测需求。下面的图是上面两种算法的结果,可以参考一下。

    648320afcba5e46a6a559302f02ca3bf.png

    图1 原图

    2a7e8a560863bb16cb4835010e003e85.png

    图2 固定阈值二值化

    ca3e40fbac5c5bce6f56879dd0c79d2e.png

    图3 自适应二值化

    展开全文
  • 基于FPGA的传真图像二值化处理,王祁远,姬宝金,本文讨论了数字双网传真机中对传真图像二值化的设计思路与实现方法。通过对图像二值化概念的研究,采用Altera公司的Cyclone芯片,设��
  • 图像二值化处理,可以自由拖动处理 可以直接拖动处理图像局部二值化
  • 1.什么是图像二值化彩色图像: 有blue,green,red三个通道,取值范围均为0-255灰度图:只有一个通道0-255,所以一共有256种颜色二值图像:只有两种颜色,黑色和白色,二值化就是把图像的像素转变为0或者255,只有这...

    1.什么是图像二值化

    彩色图像: 有blue,green,red三个通道,取值范围均为0-255

    灰度图:只有一个通道0-255,所以一共有256种颜色

    二值图像:只有两种颜色,黑色和白色,二值化就是把图像的像素转变为0或者255,只有这两个像素值。0白色 1黑色 。0是黑色,255是白色。

    2.图像二值化

    (2)根据阈值去二值化图

    (3)threshold函数

    原型:threshold(src,thresh,maxval,type,dst=None)。

    作用:将图像的每个像素点进行二值化。

    参数:thresh,阈值(最小值)。maxval,二值化的最大取值。

    type,二值化类型,一般设为0,也可以取以下的值:

    (4)全局阈值 -代码实现

    1 #-*- coding=GBK -*-

    2 importcv2 as cv3 importnumpy as np4

    5

    6 #图像二值化 0白色 1黑色

    7 #全局阈值

    8 defthreshold_image(image):9 gray =cv.cvtColor(image, cv.COLOR_BGR2GRAY)10 cv.imshow("原来", gray)11

    12 ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)#大律法,全局自适应阈值 参数0可改为任意数字但不起作用

    13 print("阈值:%s" %ret)14 cv.imshow("OTSU", binary)15

    16 ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_TRIANGLE)#TRIANGLE法,,全局自适应阈值, 参数0可改为任意数字但不起作用,适用于单个波峰

    17 print("阈值:%s" %ret)18 cv.imshow("TRIANGLE", binary)19

    20 ret, binary = cv.threshold(gray, 150, 255, cv.THRESH_BINARY)#自定义阈值为150,大于150的是白色 小于的是黑色

    21 print("阈值:%s" %ret)22 cv.imshow("自定义", binary)23

    24 ret, binary = cv.threshold(gray, 150, 255, cv.THRESH_BINARY_INV)#自定义阈值为150,大于150的是黑色 小于的是白色

    25 print("阈值:%s" %ret)26 cv.imshow("自定义反色", binary)27

    28 ret, binary = cv.threshold(gray, 150, 255, cv.THRESH_TRUNC)#截断 大于150的是改为150 小于150的保留

    29 print("阈值:%s" %ret)30 cv.imshow("截断1", binary)31

    32 ret, binary = cv.threshold(gray, 150, 255, cv.THRESH_TOZERO)#截断 小于150的是改为150 大于150的保留

    33 print("阈值:%s" %ret)34 cv.imshow("截断2", binary)35

    36 src = cv.imread("C://1.jpg")37 threshold_image(src)38 cv.waitKey(0)39 cv.destroyAllWindows()

    函数threshold()的参数说明:

    cv.THRESH_BINARY | cv.THRESH_OTSU)#大律法,全局自适应阈值 参数0可改为任意数字但不起作用

    cv.THRESH_BINARY | cv.THRESH_TRIANGLE)#TRIANGLE法,,全局自适应阈值, 参数0可改为任意数字但不起作用,适用于单个波峰

    cv.THRESH_BINARY)# 自定义阈值为150,大于150的是白色 小于的是黑色

    cv.THRESH_BINARY_INV)# 自定义阈值为150,大于150的是黑色 小于的是白色

    cv.THRESH_TRUNC)# 截断 大于150的是改为150  小于150的保留

    cv.THRESH_TOZERO)# 截断 小于150的是改为150  大于150的保留

    (5)局部阈值 -代码实现

    1 #局部阈值

    2 deflocal_image(image):3 gray =cv.cvtColor(image, cv.COLOR_BGR2GRAY)4 cv.imshow("原来", gray)5 binary1 = cv.adaptiveThreshold(gray, 255, cv.ADAPTIVE_THRESH_MEAN_C, cv.THRESH_BINARY, 25, 10) #blocksize必须为奇数6 cv.imshow("局部1", binary1)7 binary2 = cv.adaptiveThreshold(gray, 255, cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY, 25, 10)#高斯处理

    8 cv.imshow("局部2", binary2)

    (6)自己计算阈值-代码实现

    1 #-*- coding=GBK -*-

    2 importcv2 as cv3 importnumpy as np4

    5

    6 #求出图像均值作为阈值来二值化

    7 defcustom_image(image):8 gray =cv.cvtColor(image, cv.COLOR_BGR2GRAY)9 cv.imshow("原来", gray)10 h, w = gray.shape[:2]11 m = np.reshape(gray, [1, w*h])#化为一维数组

    12 mean = m.sum() / (w*h)13 print("mean:", mean)14 ret, binary = cv.threshold(gray, mean, 255, cv.THRESH_BINARY)15 cv.imshow("二值", binary)16

    17

    18 src = cv.imread("C://1.jpg")19 custom_image(src)20 cv.waitKey(0)21 cv.destroyAllWindows()

    参考:

    展开全文
  • 一个实例搞定MATLAB GUI界面设计,以图像二值化处理为例。
  • 灰度图像二值化处理

    2018-06-20 18:11:38
    图像灰度化处理算法,涵盖几种经典二值化算法的实现,如:灰度平均值,黄氏模糊阈值,谷底最小值,等13中二值化阈值选择方法
  • 图像二值化处理 (python-opencv) 二值化 图像的二值化,在图像处理中是十分重要的一个步骤。是几乎所有后续的图像处理的基础和前提。只有根据不同场景选择不同的二值化处理,才能对一幅图片较好的初始化。...
  • 在指纹识别算法中,由于现有指纹采集设备的不完善性,均需对采集的图像进行二值化处理,这个过程是相对难突破的一个不可或缺的重要环节。二值化是将含有噪声的灰度图像处理成适于特征提取的二值图像,其处理结果的...
  • 0x00. 图像二值化 图像二值化就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果。 将256个亮度等级的灰度图像... 图像二值化处理 在将图像二值化之前需要将其先灰度化,示例代码:
  • 提出了一种新的带阻滤波二值化处理方法。...最后,用轮廓线对带阻滤波指纹图像进行背景填充,把二值化处理限定在纹线区域内。通过实验证明,提出的二值化处理方法可以有效解决二值化处理方法中指纹的特征点丢失问题。
  • 在指纹识别算法中,由于现有指纹采集设备的不完善性,均需对采集的图像进行二值化处理,这个过程是相对最难突破的一个不可或缺的重要环节。二值化是将含有噪声的灰度图像处理成适于特征提取的二值图像,其处理结果的...
  • 下期见~~1、读入一幅彩色图像,变换为灰度图像二值图像,并在同一个窗口内分成三个子窗口来分别显示RGB图像和灰度图像,注上文字标题。I=imread('001.jpg');%读入原图001.jpg。注意绝对路径与相对路径,此处是相对...
  • 图像二值化处理Java

    2017-05-28 20:13:00
    二值化基本概念:通俗的讲就是把一副彩色图像处理成一副黑白图像,一般是作为后续复杂...(我这里的二值化处理结果是,背景是白色,前景是黑色) 迭代法获取最佳阈值思路: 1.设最小灰度值为Gmin,最大灰度值为Gm...
  • 下期见~~1、读入一幅彩色图像,变换为灰度图像二值图像,并在同一个窗口内分成三个子窗口来分别显示RGB图像和灰度图像,注上文字标题。I=imread('001.jpg');%读入原图001.jpg。注意绝对路径与相对路径,此处是相对...
  • 通过编写cbid类 并运用它实现图像的读写和二值化处理 是初学者学习的好资料
  • 视频图像增强和去雾算法说明 摘要 本文档介绍夜间增强和去雾增强算法及其实现 1将图像由RGB空间转换到HSI空间然后对HSI空间亮度分量I分量的灰度直方图进行均衡化处理然后再转换到RGB空间 2利用暗原色先验图像去雾...
  • 文章目录一、rgb空间下的sobel边缘检测(1)代码(2)结果、hsv-s空间下的加入图像腐蚀和图像膨胀的sobel边缘检测(1)代码(2)结果三、hsv-s空间下的加入图像腐蚀和图像膨胀,并进行孔洞填充后的sobel边缘检测...
  • 本文介绍的为android图像二值化, 参考博客:http://blog.csdn.net/wheroj/article/details/51076219 在参考的算法中添加了一个seekbar进行二值化的阈值调节 private SeekBar binaryvalueSeekbar; public void...
  • 关于图像二值化处理

    2018-12-04 21:34:49
    设原图F,结构元素S: 一、腐蚀:用来消除边界点,...(3)判断给结构元素所覆盖的范围(即S中为1的元素的位置)内的元素是否全为1,如果是,那么腐蚀后图像相同位置上的像素置为1,如果至少有一个像素的为0,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,939
精华内容 1,975
关键字:

图像二值化处理