二值图像_二值图像处理 - CSDN
精华内容
参与话题
  • 二值图像、灰度图像、彩色图像

    万次阅读 多人点赞 2018-03-31 14:44:08
    ____tz_zs二值图像二值图像(Binary Image),按名字来理解只有两个值,0和1,0代表黑,1代表白,或者说0表示背景,而1表示前景。其保存也相对简单,每个像素只需要1Bit就可以完整存储信息。如果把每个像素看成随机...

    ____tz_zs

    二值图像

    二值图像(Binary Image),按名字来理解只有两个值,0和1,0代表黑,1代表白,或者说0表示背景,而1表示前景。其保存也相对简单,每个像素只需要1Bit就可以完整存储信息。如果把每个像素看成随机变量,一共有N个像素,那么二值图有2的N次方种变化,而8位灰度图有255的N次方种变化,8为三通道RGB图像有255*255*255的N次方种变化。也就是说同样尺寸的图像,二值图保存的信息更少。二值图像(binary image),即图像上的每一个像素只有两种可能的取值或灰度等级状态,人们经常用黑白、B&W、单色图像表示二值图像。 


    灰度图像

    灰度图像是二值图像的进化版本,是彩色图像的退化版,也就是灰度图保存的信息没有彩色图像多,但比二值图像多,灰度图只包含一个通道的信息,而彩色图通常包含三个通道的信息,单一通道的理解可以理解为单一波长的电磁波,所以,红外遥感,X断层成像等单一通道电磁波产生的图像都为灰度图,而且在实际中灰度图易于采集和传输等性质的存在导致基于灰度图像开发的算法非常丰富。

    灰度图像(gray image)是每个像素只有一个采样颜色的图像,这类图像通常显示为从最暗黑色到最亮的白色的灰度,尽管理论上这个采样可以任何颜色的不同深浅,甚至可以是不同亮度上的不同颜色。灰度图像与黑白图像不同,在计算机图像领域中黑白图像只有黑色与白色两种颜色;但是,灰度图像在黑色与白色之间还有许多级的颜色深度。灰度图像经常是在单个电磁波频谱如可见光内测量每个像素的亮度得到的,用于显示的灰度图像通常用每个采样像素8位的非线性尺度来保存,这样可以有256级灰度(如果用16位,则有65536级)。 

    彩色图像

    彩色图像,每个像素通常是由红(R)、绿(G)、蓝(B)三个分量来表示的,分量介于(0,255)。


    彩色图像的灰度化、二值化

    ·
    # -*- coding: utf-8 -*-
    """
    @author: tz_zs
    彩色图像的灰度化、二值化
    """
    from skimage import io
    from skimage.color import rgb2gray
    import numpy as np
    import matplotlib.pyplot as plt
    
    img = io.imread("53788-106.jpg")  # (1080, 1920, 3)
    io.imshow(img)
    io.show()
    print(img)
    '''
    [[[255 255 255]
      [255 255 255]
      [255 255 255]
      ..., 
      [217 224 234]
      [217 224 234]
      [217 224 234]]
    
      ..., 
     [[188 165 131]
      [195 175 140]
      [186 166 131]
      ..., 
      [163 138 108]
      [156 131 101]
      [153 128  98]]]
    '''
    
    # 灰度化
    img_gray = rgb2gray(img)  # (1080, 1920)
    io.imshow(img_gray)
    io.show()
    print(img_gray)
    '''
    [[ 1.          1.          1.         ...,  0.87542549  0.87542549
       0.87542549]
     [ 1.          1.          1.         ...,  0.85973922  0.85973922
       0.85973922]
     [ 1.          1.          1.         ...,  0.86366078  0.86366078
       0.86366078]
     ..., 
     [ 0.64347137  0.6277851   0.71405961 ...,  0.66333137  0.67901765
       0.7103902 ]
     [ 0.57931961  0.62637843  0.70286039 ...,  0.6594098   0.62411569
       0.60450784]
     [ 0.65661216  0.6930451   0.65775098 ...,  0.55352745  0.52607647
       0.51431176]]
    '''
    
    # 二值化
    # rows, cols = img_gray.shape
    # for i in range(rows):
    #     for j in range(cols):
    #         if (img_gray[i, j] <= 0.5):
    #             img_gray[i, j] = 0
    #         else:
    #             img_gray[i, j] = 1
    
    img_binary = np.where(img_gray >= 0.5, 1, 0)  # (1080, 1920)
    print(img_binary)
    '''
    [[1 1 1 ..., 1 1 1]
     [1 1 1 ..., 1 1 1]
     [1 1 1 ..., 1 1 1]
     ..., 
     [1 1 1 ..., 1 1 1]
     [1 1 1 ..., 1 1 1]
     [1 1 1 ..., 1 1 1]]
    '''
    
    io.imshow(img_binary)
    io.show()
    # plt.imshow(img_binary)
    # plt.show()
    

    ·


    ·


    ·

    灰度图的显示

    ·

    # -*- coding: utf-8 -*-
    """
    @author: tz_zs
    
    灰度图的显示情况
    """
    import numpy as np
    import matplotlib.pyplot as plt
    from PIL import Image
    
    '''
    img = Image.open('53788-106.jpg')
    print(img)  # <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=1920x1080 at 0x16BECF00898>
    img = np.array(img)
    '''
    img = plt.imread('53788-106.jpg')
    print(img)
    '''
    [[[255 255 255]
      [255 255 255]
      [255 255 255]
      ..., 
      ..., 
      [163 138 108]
      [156 131 101]
      [153 128  98]]]
    '''
    
    plt.figure(1)  # 第一个figure
    
    plt.imshow(img)
    if img.ndim == 3:
        img = img[:, :, 0]
    print(img)
    '''
    [[255 255 255 ..., 217 217 217]
     [255 255 255 ..., 213 213 213]
     [255 255 255 ..., 214 214 214]
     ..., 
     [181 177 199 ..., 191 195 203]
     [166 178 196 ..., 190 181 176]
     [188 195 186 ..., 163 156 153]]
    '''
    
    plt.figure(2)  # 第二个figure
    
    plt.subplot(221)
    plt.imshow(img)  # 一般显示的情况下,显示为热力图
    plt.subplot(222)
    plt.imshow(img, cmap='gray')  # 灰度图正确的表示方法1
    plt.subplot(223)
    plt.imshow(img, cmap=plt.cm.gray)  # 灰度图正确的表示方法2
    plt.subplot(224)
    plt.imshow(img, cmap=plt.cm.gray_r)  # 黑白反转
    plt.show()
    

    ·


    ·


    ·



    很多图片识别为什么将彩色图像灰度化?

    https://www.zhihu.com/question/24453478

    截取:

    • 我们识别物体,最关键的因素是梯度(现在很多的特征提取,SIFT,HOG等等本质都是梯度的统计信息),梯度意味着边缘,这是最本质的部分,而计算梯度,自然就用到灰度图像了。颜色本身,非常容易受到光照等因素的影响,同类的物体颜色有很多变化。所以颜色本身难以提供关键信息。
    • 大多数的医学图像RGB提供的信息量很少(几乎没有),所以可以直接灰度图像来进行后续计算。在这些问题上,反而对灰度图像预处理更重要(当然,CNN发展以后这些预处理作用也小了)。
    • 灰度化之后颜色信息丢失,很多color-based算法就不可能这么做,但是很多简单的识别算法对于颜色的依赖性不强,hand-craft特征更多关注边缘梯度信息。工程中很多应用加上color信息之后鲁棒性会下降。灰度化之后矩阵维数下降,运算速度大幅度提高,并且梯度信息仍然保留。





    展开全文
  • 使用matlab对图像进行二值化处理

    万次阅读 2018-09-03 22:23:03
    图像二值化就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果的过程。 A=imread(D:\A); thresh=graythresh(A);%确定二值化阈值 B=im2bw(A,thresh);%对图像二值化...

    图像二值化就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果的过程。

        A=imread(D:\A);
        thresh=graythresh(A);%确定二值化阈值
        B=im2bw(A,thresh);%对图像二值化
    展开全文
  • 图像预处理(二值化)

    万次阅读 2018-09-02 15:25:16
    图像预处理(二值化) 本文的实验室主要通过opencv与python3实现,相关的代码可以在GitHub中找到。 1. 图像获取与灰度化 通过摄像头获取到的图像为彩色的图像。彩色图像主要分为两种类型,RGB及CMYK。其中RGB的...

    图像预处理(二值化)

    本文的实验是主要通过opencv与python3实现,相关的代码可以在GitHub中找到。

    1. 图像获取与灰度化

    通过摄像头获取到的图像为彩色的图像。彩色图像主要分为两种类型,RGB及CMYK。其中RGB的彩色图像是由三种不同颜色成分组合而成,一个为红色,一个为绿色,另一个为蓝色。而CMYK类型的图像则由四个颜色成分组成:青C、品M、黄Y、黑CMYK类型的图像主要用于印刷行业。

    每个图像的像素通常对应于二维空间中一个特定的位置,并且有一个或者多个与那个点相关的采样值组成数值。灰度图像,也称为灰阶图像,图像中每个像素可以由0(黑)到255(白)的亮度值(Intensity)表示。0-255之间表示不同的灰度级。

    将彩色图像转化成为灰度图像的过程称为图像的灰度化处理。灰度化,在RGB模型中,如果R=G=B时,则彩色表示一种灰度颜色,其中R=G=B的值叫灰度值,因此,灰度图像每个像素只需一个字节存放灰度值(又称强度值、亮度值),灰度范围为0-255。彩色图像中的每个像素的颜色有R、G、B三个分量决定,而每个分量有255个值可取,这样一个像素点可以有1600多万(255255255)的颜色的变化范围。而灰度图像一个像素点的变化范围为255种,所以在数字图像处理种一般先将各种格式的图像转变成灰度图像以使后续的图像的计算量变得少一些。灰度图像的描述与彩色图像一样仍然反映了整幅图像的整体和局部的色度和亮度等级的分布和特征。对于灰度化的方式有分量法、最大值法、平均值法,加权平均法等。本文使用平均值法对图像进行灰度化。

    对于平均值法,将彩色图像中的R、G、B三个分量的亮度求简单的平均值,将得到的值作为灰度值输出而得到灰度图。其实现的表达式如下:

    1524360552787

    通过实验得到得到如下图所示,灰度化前后:(实现代码)

    2.二值化

    通过以上对彩色图片进行灰度化以后,把获取到的灰度图像进行二值化处理。对于二值化,其目的是将目标用户背景分类,为后续车道的识别做准备。灰度图像二值化最常用的方法是阈值法,他利用图像中目标与背景的差异,把图像分别设置为两个不同的级别,选取一个合适的阈值,以确定某像素是目标还是背景,从而获得二值化的图像。

    对于阈值法二值化,假设阈值设置为T,就可以以T为边界,把数值分为两个部分,则二值化的公式如下:
    1524362043254
    式中,Gray(i,j)表示在图片(i,j)处的灰度值,Ϝ(i,j)表示二值化后的值,只能取0或者1。在阈值二值化中,最主要的是选取合适的阈值,这也是二值化的难点所在。常用的二值化阈值选取方法有双峰法、p参数法、大律法(Otsu法)、最大熵阈值法、迭代法等。

    2.1 双峰法选取阈值T

    如果给定的图像的灰度分布是比较有规律,苗木表和背景在图像的直方图各自形成一个波峰,他们之间存在波谷。那么,阈值T可以在波谷取值,如下图所示:


    1524362867104
    实现的表达式如下:


    式中,T表示阈值,Gray(i,j)表示原始图像的灰度值,G(i,j)表示二值化后的灰度值。通过实验获取得到的道路图像的直方图灰度分布,如图所示。


    从图中可以看出,在道路图像二值化中不适合使用双峰法选取阈值。

    2.2 P参数法选取阈值T

    若已知目标区域的P值,则可以采用P参数的法进行分割。假设已知直方图中目标区域所占的比例为P_1,则该算法实现的步骤如下:
    (1). 计算图像直方图的分布P(t),其中t = 0,1,2…255,表示图像的灰度值;
    (2). 从t=0开始,计算图像的累积分布直方图,实现的表达式为:




    (3). 计算阈值T

    得到的T值也表示P_1最接近累积分布的灰度分布值t。

    2.3 大律法(Otsu法)选取阈值T

    Otsu算法的基本思想是用某一假定的灰度值t将图像的灰度分为两组,当两组的类间方差最大时,此灰度值t就是图像二值化的最佳阈值。假设图像有L个灰度值,那么灰度值的取值范围为0~L-1,在此范围内取灰度值T,将图像分成两组G_1和G_2其中G_1包含的像素值在0~T,G_2的灰度值在T+1~ L-1,用N表示图像图像像素总数,n_i表示灰度值为i的像素的个数。求值过程如下:假设每一个灰度值i出现的概率p_i= n_i/N,G_1和G_2两组像素个数在整体图像中所占的百分比为ω_1和ω_2,两组平均灰度值为μ_1和μ_2,则:
    占比:




    平均值灰度值:



    图像总灰度值:



    类间方差:



    最佳阈值:获取类方差最大值时对应的灰度值t:



    通过以上的步骤即可得到最佳的T值。

    2.4 最大熵阈值法求T值

    在信息论中的Shannon entropy概念用于图像分割,依据是使得图像中目标与背景分布的信息量最大,即通过测试图像灰度直方图的熵,找出最佳的阈值T。对于灰度值范围为0,1,2…L-1的图像,其直方图熵的定义为:




    其中p_i为像素值为i的像素占整个图像的概率。设阈值t将图像划分为目标O和背景B两类,他们的概率分布分别为:



    所以目标O和背景B的熵函数分别为:



    其中,



    图像的总熵为:



    此方法不需要先验知识,而对非理想的双峰直方图也可以进行较好的分割,但不适合信噪比较低的图像分割。
    通过实验,对灰度化的图像进行二值化后的效果如下,

    可以自己调整阈值来到达更好的二值化效果。相关代码,与API在GitHub中可以找到。

    未完待续。

    参考文献

    https://wenku.baidu.com/view/acc24dcf680203d8ce2f2469.html

    https://wenku.baidu.com/view/bb6e38f7c8d376eeaeaa3163.html

    展开全文
  • Matlab图像二值

    万次阅读 热门讨论 2017-03-23 21:17:30
    在数字图像处理中,二值图像占有非常重要的地位,首先,图像的二值化有利于图像的进一步处理,使图像变得简单,而且数据量减小,能凸显出感兴趣的目标的轮廓。其次,要进行二值图像的处理与分析,首先要把灰度图像

           图像二值化就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果。

    将256个亮度等级的灰度图像通过适当的阈值选取而获得仍然可以反映图像整体和局部特征的二值化图像。在数字图像处理中,二值图像占有非常重要的地位,首先,图像的二值化有利于图像的进一步处理,使图像变得简单,而且数据量减小,能凸显出感兴趣的目标的轮廓。其次,要进行二值图像的处理与分析,首先要把灰度图像二值化,得到二值化图像

    所有灰度大于或等于阈值的像素被判定为属于特定物体,其灰度值为255表示,否则这些像素点被排除在物体区域以外,灰度值为0,表示背景或者例外的物体区域。


    clc
    A=imread('a.jpg');   %读取到一张图片   
    thresh = graythresh(A);     %自动确定二值化阈值
    I2 = im2bw(A,thresh);       %对图像二值化
    
    figure(1)
    imshow(A)     %显示二值化之前的图片
    figure(2)
    imshow(I2)    %显示二值化之后的图片
    


    二值化之前:

    二值化之后:



    展开全文
  • 二值图像

    千次阅读 2018-10-08 12:29:54
    学习DIP第10天 转载请标明出处:http://blog.csdn.net/tonyshengtan,欢迎大家转载,...。。。。。。。...二值图像  内容迁移至  http://www.face2ai.com/DIP-3-0-二值图像/  http://www.tony4ai.com/DIP-3-0...
  • 彩色图像,每个像素通常是由红(R)、绿(G)、蓝(B)三个分量来表示的,分量介于(0,255)。RGB图像与索引图像一样都...但与索引图像不同的是,RGB图像每一个像素的颜色(由RGB三原色表示)直接存放在图像矩...
  • 二值图像腐蚀与膨胀操作

    千次阅读 2018-08-19 18:17:07
    申明: 仅个人小记 ...小注: 刚开始操作的时候是同时有三张图,分别为原图像,结构元素图像,输出结果空白图像 注意: 原图像只是提供位置信息,不参与输出图像的构成。 一、操作方法简要说明 腐蚀...
  • MATLAB中将图像转换为二值图像im2bw

    万次阅读 多人点赞 2017-09-06 15:38:27
    在MATLAB中将图像转换为二值图像,主要运用im2bw函数,涉及到一个灰度门槛的数值。 对于灰度图像 bw=im2bw(I,level); level空着的话,默认是0.5。level一般使用graythresh函数来计算,至于graythresh函数中运用到...
  • 二值图像快速细化算法

    万次阅读 2017-01-16 10:03:34
    二值图像的细化是讨论将一个图像中的黑色部分沿着它的中心轴线将其细化为一个像素宽的线条的处理过程,细化的结果能基本保留图形中黑色部分的拓扑结构。图像细化是图像模式识别的关键步骤。快速细化算法的思想是优化...
  • matlab中DIP工具箱函数im2bw使用阈值(threshold)变换法把灰度图像(grayscale image)转换成二值图像。所谓二值图像, 一般意义上是指只有纯黑(0)、纯白(255)两种颜色的图像。 当然, 也可以是其他任意两种...
  • 二值图像腐蚀与膨胀操作样例

    万次阅读 多人点赞 2020-10-03 20:56:21
    目录 操作方法简要说明 腐蚀操作 结构元素原点在结构元素内部 原点在结构元素外部 二值图像的膨胀操作 点在结构元素内部 原点在结构元素外部
  • 二值图像信息隐藏

    千次阅读 2014-02-12 14:25:59
    二值图像信息隐藏的方法是把一个二值图像分成一系列矩形图像区域B,某个图像区域B中黑色像素的个数大于一半,则表示嵌入0,如果白色像素的个数大于一半,则表示嵌入1,但是当需要嵌入的比特与所选区域的黑白像素的比例...
  • 8位二值图像转化为1位二值图像

    千次阅读 2016-03-15 21:41:26
    1位二值图像而同样的bmp格式二值图像,也可以在存储时,每位只占用1个bit的空间,这样格式的二值图像占用的总存储空间约等于8位二值图像的1/8(由于文件头的大小基本不变,当图像较大时,占用存储基本是
  • Visual C++实现二值图像处理

    千次阅读 2009-06-17 10:30:00
    二值图像是一种简单的图像格式,它只有两个灰度级,即"0"表示黑色的像素点,"255"表示白色的像素点,至于如何从一幅普通的图像获得二值图像,请参考我近期在天极网上发表的《Visual C++编程实现图像的分割》一文。...
  • 灰度图像转化为二值图像的matlab实现 据说写博客就可以获得10积分,我试试。 灰度图像转化为二值图像的matlab实现 I=imread(‘C:\Users\Administrator\Desktop/5.bmp’); I2=im2bw(I,0.45);%对图像自动二值化 imshow...
  • OpenCV-二值图像连通域分析

    万次阅读 多人点赞 2017-09-26 16:21:27
    连通区域(Connected Component)一般是指图像中具有相同像素且位置相邻的前景像素点组成的图像区域(Region,Blob)。连通区域分析(Connected Component Analysis,Connected Component Labeling)是指将图像中的...
  • Matlab形态学图像处理:二值图像分割 标记连通区域和重心位置 删除连通区域 Matlab中可以使用graythresh(Img)函数设置二值化的阈值,再用im2bw转化为二值图像。在Matlab中,可以使用bwlabel()和bwlabeln()函数来...
  • 转载请标明出处:http://blog.csdn.net/tonyshengtan,欢迎大家转载,发现博客被某些论坛转载后,图像无法正常显示,无法正常表达本人观点,对此表示很不满意。。。。。。。。 开篇废话  简单来说所谓开操作和...
  • 二值图像的骨架提取

    千次阅读 2017-06-10 22:16:24
    本文介绍的二值图像细化算法是来自 T.Y. Zhang and C.Y. Suen 1984 年发表的论文 “A fast parallel algorithm for thinning digital patterns” 中所介绍的算法。
  • 使用Matlab对二值图像进行轮廓提取

    万次阅读 多人点赞 2017-02-22 21:43:56
    转自:... 本文主要总结一下在matlab中可用于进行轮廓提取的函数。 1 bwperim  根据参考资料[2]的提示,可以使用bwperim()函数进行轮廓提取,具体代码如下:%读取原图 im = imread( filepath );
1 2 3 4 5 ... 20
收藏数 359,328
精华内容 143,731
关键字:

二值图像