02 数字图像技术——颜色空间转换与颜色空间分割实验结果与分析——python

04 数字图像技术——图像特征提取之实验结果与分析
03 数字图像技术——频域滤波实验结果与分析
02 数字图像技术——颜色空间转换与颜色空间分割实验结果与分析
01 数字图像基本操作——图像采样、量化、算术运算、点运算实验结果及分析

一、实验目的

1.了解颜色空间转换与颜色空间分割在数字图像处理中的初步应用。
2.体会颜色空间转换与颜色空间分割的过程和处理前后图像的变化。

二、实验内容

1.拆分并显示图像RGB空间的三个通道。
2.RGB空间转换为HSI空间。
3.图像的强度分层。
4.灰度值到彩色变换并画出映射函数。
5.颜色空间分割

三、实验设备/仪器

电脑、编程语言(Matlab或Python)、图像数据和存储器。

四、实验原理

(一)三基色原理
  图像是由人的视觉系统接收物体透射或者反射的光学信息,然后在大脑中形成的印象和认识,它其实只是客观存在的多维物体在人脑中的“成像”。
  客观存在是不变的,而人的感觉是与周围环境有关的 ,所以人感觉是会变的。
  人眼视网膜上存在大量能在适当亮度下分辨颜色的锥状细胞,它们分别对应红、绿、蓝三种颜色,即分别对红光、绿光、蓝光敏感。因此,红(R)、绿(G)、蓝(B)这三种颜色被称为三基色。

在这里插入图片描述

  在三维直角坐标系中,用相互垂直的三个坐标轴代表R、G、B三个分量,并将R、G、B分别限定在[0,1],则该单位正方体就代表颜色空间,其中的一个点就代表一种颜色。如下图所示,其中,r、g、b、c、m和y分别代表红色(red)、绿色(green)、蓝色(blue)、青色(cyan)、品红(magenta)和黄色(yellow)。
在这里插入图片描述

  数字图像的本质是一个多维矩阵,如彩色图像是一个三维矩阵,灰度图像和黑白图像由二维矩阵表示。彩色图像一般可分为红、绿、蓝3个颜色通道,每个颜色通道对应一个完整的二维矩阵。可以对这3个二维矩阵进行操作,达到操作图像通道的目的。
  国际照明委员会(CIE)于1931年制订了特定波长的三基色标准(RGB)。任一彩色C可表示为:
在这里插入图片描述
在这里插入图片描述

(二)颜色模型
  色度图(国际亮度委员会International Committee on Illumination, CIE)表明定义颜色至少需要3个参数。用3元组(x, y, z)表达一个颜色和在3维空间定义一个点相似,称为颜色空间。
常见颜色空间:
  RGB: 显示器、打印机、摄像机
  HSI(HSV):人眼识别
  CMY:彩色印刷
  YUV (YCbCr) :电视信号
1.RGB模型
  在三维直角坐标系中,用相互垂直的三个坐标轴代表R、G、B三个分量,并将R、G、B分别限定在[0,1],则该单位正方体就代表颜色空间,其中的一个点就代表一种颜色。如下图所示,其中,r、g、b、c、m和y分别代表红色(red)、绿色(green)、蓝色(blue)、青色(cyan)、品红(magenta)和黄色(yellow)。
在这里插入图片描述

2.HSI模型
在这里插入图片描述

  • 色调:颜色种类
  • 饱和度saturation:指颜色的纯正程度。
  • 与亮度有关:某一色调参入白光,色调不变但饱和度降低
    与参入其它颜色的光有关:饱和度与色调都会改变。

  • 亮度Intensity:人眼感受到的颜色光的强度。

  •   同一种色块,在不同强度的白光照射下,反射的光波波长一样(色调相同),但人眼感觉到的颜色不同。   某一颜色的光,亮度很弱,趋于黑色,反之,趋于白色。   HSI模型利用颜色的三个属性色调、饱和度和亮度组成一个表示颜色的圆柱体。

    在这里插入图片描述

      HSI模型利用颜色的三个属性色调、饱和度和亮度组成一个表示颜色的圆柱体。

  • 色调H表明颜色的种类;
  •   用角度表示,通常0°表示红色,120°表示绿, 240°表示蓝;

  • 饱和度S表示颜色深、浅、浓、淡程度 ;饱和度参数是色环的原点(圆心)到彩色点的半径的长度。
  • I表示亮度,它决定了像素的像素的整体亮度,而不考虑色彩 ;反射系数越大,物体的亮度愈大,反之愈小。
  • 3.RGB模型与HSI模型的关系

      与RGB从物理和光学角度描述颜色不同, HSI则是根据视觉的主观感觉对颜色进行描述 ;
      人眼不能直接感觉红、绿、蓝三色的比例,只能通过感知颜色的亮度、色调和饱和度来区分物体;
      在HSI模型中,表征像素彩色信息的两个参数是色度(hue)和饱和度(saturation)。
    转换公式
    在这里插入图片描述
    在这里插入图片描述

      色调和饱和度为图像的固有属性,在图像处理中只对亮度分量进行修改和优化,可以避免由于直接对RGB分量进行处理时产生的图像失真。
    在这里插入图片描述

    4.伪彩色处理
      伪彩色处理是把灰度图像的各个不同灰度按照线性或非线性的映射函数变换成不同的彩色,也可以将原来不是图像的数据表示成灰度图像,再转换成彩色图像达到增强的目的。
      最简单的实现从灰度到彩色的变换方法可以把灰度图像的灰度级从0(黑)到Mi(白)分成N 个区间,i=1,2,L, N 。给每个区间Ii指定一种色彩Ci。该方法直观简单,缺点是变换出的彩色有限。
      从灰度到彩色的一种更具代表性的变换方式是根据色度学的原理,将原图像 f(x,y)的灰度分段经过红、绿、蓝三种不同的变换,变成三基色分量R(x,y) 、G(x,y)、B(x,y),然后用它们去控制彩色显示器的红、绿、蓝电子枪,以产生相应的彩色信号,彩色的含量由变换函数的形状决定。
    5.颜色空间分割
      图像分割是把图像分成各具特性的区域并提取出感兴趣区域的技术和过程。
      基于彩色的图像分割是在颜色空间中进行图像分割,首先观察原始彩色图像的各个分量图像,利用分量图像中感兴趣区域的特征对感兴趣区域进行提取,并弱化背景区域。
      HSI颜色空间是面向颜色处理的,用色调H饱和度S描述色彩,用亮度I描述光的强度。HSI模型有两个特点:I 分量与图像的彩色信息无关,H 分量和S 分量与人感受颜色的方式是紧密相连的。
      RGB颜色空间中的分割算法是最直接的,得到的分割效果较好。

    五、实验步骤

    1.拆分并显示图像RGB空间的三个通道,步骤流程图如下:
    在这里插入图片描述

    图1 拆分RGB三通道流程图

    2.RGB空间转换为HSI空间,步骤流程图如下:
    在这里插入图片描述

    图2 RGB空间转换为HSI空间流程图

    3.图像的强度分层,步骤流程图如下:

    在这里插入图片描述

    图3 图像的强度分层流程图

    4.灰度值到彩色变换并画出映射函数,步骤流程图如下:
    在这里插入图片描述

    图4 灰度值到彩色变换并画出映射函数的流程图

    5.颜色空间分割,步骤流程图如下:
    在这里插入图片描述          在这里插入图片描述

    图5 HSI颜色空间中的分割流程图           图6 RGB颜色空间中的分割流程图

    六、实验结果及分析

    1. 实现拆分并显示图像RGB空间的三个通道的代码。

    from skimage import data, io
    from matplotlib import pyplot as plt
    plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
    plt.rcParams['axes.unicode_minus']=False
    # 读入图像
    image=io.imread('cat.jpg')
    # 分别取出红、绿、蓝三个颜色通道
    image_r = image[:, :, 0]
    image_g = image[:, :, 1]
    image_b = image[:, :, 2]
    # 分别显示3个通道
    plt.subplot(2, 2, 1)
    io.imshow(image)
    plt.title('原始图片')
    
    plt.subplot(2, 2, 2)
    io.imshow(image_r)
    plt.title('R通道的图片')
    
    plt.subplot(2, 2, 3)
    io.imshow(image_g)
    plt.title('G通道的图片')
    
    plt.subplot(2, 2, 4)
    io.imshow(image_b)
    plt.title('B通道的图片')
    plt.show()
    
    

      使用skimage拆分并显示图像RGB空间的三个通道,实验结果如图7所示:

    在这里插入图片描述

    图7拆分并显示图像RGB空间的三个通道

      分析:RGB颜色空间基于三维直角坐标系,包括R、G、B 3个原始光谱分量,分别描述了红色、绿色、蓝色的亮度值。在处理图像时需要分别对R、G、B三个分量进行处理,因此需要显示此三个通道的图像。

    2.实现RGB空间转换为HSI空间的代码。

    from skimage import data, io
    from matplotlib import pyplot as plt
    import math
    import numpy as np
    import sys
    
    plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
    plt.rcParams['axes.unicode_minus']=False
    # 定义RGB图像转换为HSI图像的函数
    def RGB_to_HSI(r, g, b):
        r = r / 255
        g = g / 255
        b = b / 255
        num = 0.5 * ((r - g) + (r - b))
        den = ((r - g) * (r - g) + (r - b) * (g - b)) ** 0.5
        if b <= g:
            if den == 0:
                den = sys.float_info.min
            h = math.acos(num / den)
        elif b > g:
            if den == 0:
                den = sys.float_info.min
            h = (2 * math.pi) - math.acos(num / den)
        s = 1 - (3 * min(r, g, b) / (r + g + b))
        i = (r + g + b) / 3
        return int(h), int(s * 100), int(i * 255)
    
    image = io.imread('girl.jpg')
    #image = data.coffee()
    hsi_image = np.zeros(image.shape, dtype='uint8')
    for ii in range(image.shape[0]):
        for jj in range(image.shape[1]):
            r, g, b = image[ii, jj, :]
            h, s, i = RGB_to_HSI(r, g, b)
            hsi_image[ii, jj, :] = (h, s, i)
    
    # 显示RGB原图像
    plt.subplot(2, 4, 1)
    plt.imshow(image)
    #plt.axis('off')
    plt.title('RGB原图像')
    
    # 显示RGB原图像R分量
    plt.subplot(2, 4, 2)
    plt.imshow(image[:, :, 0],cmap='gray')
    #plt.axis('off')
    plt.title('RGB-R分量')
    
    # 显示RGB原图像G分量
    plt.subplot(2, 4, 3)
    plt.imshow(image[:, :, 1],cmap='gray')
    plt.axis('off')
    plt.title('RGB-G分量')
    
    # 显示RGB原图像B分量
    plt.subplot(2, 4, 4)
    plt.imshow(image[:, :, 2],cmap='gray')
    plt.axis('off')
    plt.title('RGB-B分量')
    
    # 显示HSI原图像
    plt.subplot(2, 4, 5)
    plt.imshow(hsi_image)
    plt.axis('off')
    plt.title('HSI图像')
    
    # 显示HSI图像H分量
    plt.subplot(2, 4, 6)
    plt.imshow(hsi_image[:, :, 0],cmap='gray')
    plt.axis('off')
    plt.title('HSI-H分量')
    
    # 显示HSI图像S分量
    plt.subplot(2, 4, 7)
    plt.imshow(hsi_image[:, :, 1],cmap='gray')
    plt.axis('off')
    plt.title('HSI-S分量')
    
    # 显示HSI图像I分量
    plt.subplot(2, 4, 8)
    plt.imshow(hsi_image[:, :, 2],cmap='gray')
    plt.axis('off')
    plt.title('HSI-I分量')
    
    plt.show()
    
    

      实现RGB空间转换为HSI空间,实验结果如图8所示:

    在这里插入图片描述

    图8 RGB空间转换为HSI空间

       结果分析:为了更好的描述物体颜色,因此需要将原始彩色图像转为HSI颜色模式,而HSI的颜色空间是需要从RGB颜色空间转换成的。因此需要先拆分出RGB图像的三个通道,再根据公式分别计算HSI图像H分量、S分量、I分量。

    3. 实现图像的强度分层的代码。

    ##图像强度分层
    from skimage import io,color
    from matplotlib import pyplot as plt
    import numpy as np
    import time
    
    def gray_bin(image_matrix):
        initial_conv = np.where((image_matrix < 0.4), 0, 128)
        final_conv = np.where((image_matrix >= 0.8), 255, initial_conv)
        return final_conv
    
    if __name__ == "__main__":
        img = io.imread("cat.jpg")
        gray_img = color.rgb2gray(img)
        plt.rcParams["font.sans-serif"] = ["SimHei"]
        plt.rcParams["axes.unicode_minus"] = False
        plt.subplot(1, 2, 1)
        plt.imshow(gray_img, cmap="gray")
        plt.title("灰度图像")
        rows, cols = gray_img.shape
        labels = gray_bin(gray_img)
        start_time = time.time()
    
        for i in range(rows):
            for j in range(cols):
                if(gray_img[i, j] < 0.4):
                    labels[i, j] = 0
                elif(gray_img[i, j] < 0.8):
                    labels[i, j] = 128
                else:
                    labels[i, j] = 255
        end_time = time.time()
        print('totally cost :', end_time - start_time)
        psd_img = color.label2rgb(labels)
        plt.subplot(1, 2, 2)
        plt.imshow(psd_img)
        plt.title("强度分层图片")
        plt.show()
    
    

    实现图像的强度分层,实验结果如图9所示:
    在这里插入图片描述

    图9图像的强度分层

      结果分析:上图的左边为小猫的灰度图像,白色部分是感兴趣区域。通过观察得知,感兴趣区域的亮度值较高,此时通过 强度分层技术对感兴趣区域着色,变为蓝色,以此与其他区域加以区分。

    4. 实现灰度值到彩色变换并画出映射函数的代码。

    from skimage import data, color,io
    from matplotlib import pyplot as plt
    import numpy as np
    
    # 定义灰度级到彩色变换
    L = 256
    def GetR(gray):
        if gray < L / 2:
            return 0
        elif gray > L / 4 * 3:
            return L
        else:
            return 4 * gray - 2 * L
    def GetG(gray):
        if gray < L / 4:
            return 4 * gray
        elif gray > L / 4 * 3:
            return 4 * L - 4 * gray
        else:
            return L
    def GetB(gray):
        if gray < L / 4:
            return L
        elif gray > L / 2:
            return 0
        else:
            return 2 * L - 4 * gray
    if __name__ == "__main__":
        img = io.imread("cat.jpg")
        grayimg = color.rgb2gray(img) * 255  # 将彩色图像转化为灰度图像
        colorimg = np.zeros(img.shape, dtype='uint8')
        for ii in range(img.shape[0]):
            for jj in range(img.shape[1]):
                a = grayimg[ii, jj]
                a0 = GetR(a)
                a1 = GetG(a)
                a2 = GetB(a)
                r, g, b = a0, a1, a2
                colorimg[ii, jj, :] = (r, g, b)
    
        plt.rcParams['font.sans-serif'] = ['SimHei']
        plt.rcParams['axes.unicode_minus'] = False
        plt.subplot(1, 2, 1)
        plt.axis('off')
        plt.imshow(grayimg, cmap='gray')
        plt.title('灰度图像')
        plt.subplot(1, 2, 2)
        plt.axis('off')
        plt.imshow(colorimg)
        plt.title('伪彩色图像')
        plt.savefig('Intensity2Color.tif')
    plt.show()
    #画出各映射函数
    # 设置字体格式
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.rcParams['font.size'] = 15
    plt.rcParams['axes.unicode_minus'] = False
    x = [0, 64, 127, 191, 255]
    
    # 绘制灰度图像到R通道的映射关系
    R = []
    for i in x:
        R.append(GetR(i))
    plt.subplot(2, 2, 1)
    plt.plot(x, R, 'r', label='红色变换')
    plt.legend(loc='best')
    
    # 绘制灰度图像到R通道的映射关系
    G = []
    for i in x:
        G.append(GetG(i))
    plt.subplot(2, 2, 2)
    plt.plot(x, G, 'g', label='绿色变换')
    plt.legend(loc='best')
    # 绘制灰度图像到B通道的映射关系
    B = []
    for i in x:
        B.append(GetB(i))
    plt.subplot(2, 2, 3)
    plt.plot(x, B, 'b', marker='o', markersize='5', label='蓝色变换')
    plt.legend(loc='best')
    
    # 绘制灰度图像到RGB的映射关系
    plt.subplot(2, 2, 4)
    plt.plot(x, R, 'r')
    plt.plot(x, G, 'g')
    plt.plot(x, B, 'b', marker='o', markersize='5')
    plt.show()
    
    

    实现灰度值到彩色变换并画出映射函数,实验结果如图10所示:
    在这里插入图片描述

    图10 实现灰度值到彩色变换

    在这里插入图片描述

    图11 灰度值到彩色变换的映射函数

      结果分析:图10 为实现灰度值到彩色变换的结果,灰度值到彩色变换首先需要对任何像素的灰度值进行3个独立的变换,然后将3个变换结果分别作为伪彩色图像的红、绿、蓝通道的亮度值。图11 中前3个映射关系图分别为灰度图像到红、绿、蓝通道的映射关系图,最后一个图是将红色、绿色、蓝色变换的映射关系绘制到一幅图像。

    5. 实现颜色空间分割的代码。
    (1)HSI图像颜色空间分割:

    from skimage import data, color, io
    from matplotlib import pyplot as plt
    import numpy as np
    import math
    import sys
    def RGB_to_HSI(r, g, b):
        r = r / 255
        g = g / 255
        b = b / 255
        num = 0.5 * ((r - g) + (r - b))
        den = ((r - g) * (r - g) + (r - b) * (g - b)) ** 0.5
        if b <= g:
            if den == 0:
                den = sys.float_info.min
            h = math.acos(num / den)
        elif b > g:
            if den == 0:
                den = sys.float_info.min
            h = (2 * math.pi) - math.acos(num / den)
        s = 1 - (3 * min(r, g, b) / (r + g + b))
        i = (r + g + b) / 3
        return int(h), int(s * 100), int(i * 255)
    if __name__ == "__main__":
        image = io.imread("girl.jpg")
        hsi_image = np.zeros(image.shape, dtype='uint8')
        for ii in range(image.shape[0]):
            for jj in range(image.shape[1]):
                r, g, b = image[ii, jj, :]
                h, s, i = RGB_to_HSI(r, g, b)
                hsi_image[ii, jj, :] = (h, s, i)
        H = hsi_image[:, :, 0]
        S = hsi_image[:, :, 1]
        I = hsi_image[:, :, 2]
        S_template = S > 0.3 * S.max()
        F = np.multiply(H, S_template)
        plt.rcParams["font.sans-serif"] = ["SimHei"]
        plt.rcParams["axes.unicode_minus"] = False
        plt.subplot(2, 3, 1)
        plt.axis('off')
        plt.imshow(image)  # 显示原始RGB图像
        plt.title("原始RGB图像")
        plt.subplot(2, 3, 2)
        plt.axis('off')
        plt.imshow(H, cmap="gray")  # 显示H分量图像
        plt.title("H分量")
        plt.subplot(2, 3, 3)
        plt.axis('off')
        plt.imshow(S, cmap="gray")  # 显示S分量图像
        plt.title("S分量")
        plt.subplot(2, 3, 4)
        plt.axis('off')
        plt.imshow(I,cmap="gray")  # 显示I分量图像
        plt.title("I分量")
        plt.subplot(2, 3, 5)
        plt.axis('off')
        plt.imshow(S_template,cmap="gray")  # 显示二值饱和图像
        plt.title("二值饱和图像")
        plt.subplot(2, 3, 6)
        plt.axis('off')
        plt.imshow(F)  # 显示分割结果
        plt.title("分割结果")
    plt.show()
    
    

    实现HSI图像颜色空间分割,实验结果如图12所示:

    在这里插入图片描述

    图 12 HSI图像颜色空间分割

      结果分析:门限值等于最大饱和度的30%,在二值饱和度模板中,对大于门限值的赋1值,其他赋0值。H分量图像与二值饱和度模板相乘得到小猫图像的分割结果。
    (2)RGB图像颜色空间分割:
    from skimage import data, color, io
    from matplotlib import pyplot as plt
    import numpy as np
    import math
    # 中文乱码和坐标轴负号的处理
    plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
    plt.rcParams['axes.unicode_minus'] = False
    
    image = io.imread("cat.jpg")
    r = image[:, :, 0]
    g = image[:, :, 1]
    b = image[:, :, 2]
    # RGB颜色空间中的分割
    # 选择样本区域
    r_template = r[128:255, 85:169]
    # 计算该区域的彩色点的平均向量a的红色分量
    r_template_u = # 计算样本点红色分量的标准差
    r_template_d = 0.0
    for i in range(r_template.shape[0]):
        for j in range(r_template.shape[1]):
            r_template_d = r_template_d + (r_template[i, j] - r_template_u) * (r_template[i, j] - r_template_u)
    
    r_template_d = math.sqrt(r_template_d / r_template.shape[0] / r_template.shape[1])
    # 寻找符合条件的点,r_cut为红色分割图像
    r_cut = np.zeros(r.shape, dtype='uint8')
    for i in range(r.shape[0]):
        for j in range(r.shape[1]):
            if r[i, j] >= (r_template_u - 1.25 * r_template_d) and r[i, j] <= (r_template_u + 1.25 * r_template_d):
                r_cut[i, j] = 1
    # image_cut为根据红色分割后的RGB图像
    image_cut = np.zeros(image.shape, dtype='uint8')
    for i in range(r.shape[0]):
        for j in range(r.shape[1]):
            if r_cut[i, j] == 1:
                image_cut[i, j, :] = image[i, j, :]
    plt.subplot(2, 3, 1)
    plt.axis('off')
    plt.imshow(image)  # 显示原始图像
    plt.title("原始RGB图像")
    
    plt.subplot(2, 3, 2)
    plt.axis('off')
    plt.imshow(r,cmap='gray')  # 显示R图像
    plt.title("R图像")
    
    plt.subplot(2, 3, 3)
    plt.axis('off')
    plt.imshow(g,cmap='gray')  # 显示G图像
    plt.title("G图像")
    
    plt.subplot(2, 3, 4)
    plt.axis('off')
    plt.imshow(b,cmap='gray')  # 显示B图像
    plt.title("B图像")
    plt.subplot(2, 3, 5)
    plt.axis('off')
    plt.imshow(r_cut,cmap='gray')  # 显示红色分割图像
    plt.title("红色分割图像")
    plt.subplot(2, 3, 6)
    plt.axis('off')
    plt.imshow(image_cut)  # 显示分割后的RGB图像
    plt.title("分割后的RGB图像")
    plt.show()
    
    

    实现根据红色分割后的RGB图像,运行结果如下图13所示:
    在这里插入图片描述

    图 13 RGB图像颜色空间分割

      分析:对比图12 HSI颜色空间的分割结果,可以看出图13 RGB空间中进行彩色分割的效果更好。对比原始图像,它对感兴趣区域进行提取,并弱化了背景区域。

    七、实验总结

  •   (1)RGB颜色空间基于三维直角坐标系,包括R、G、B 3个原始光谱分量,分别描述了红色、绿色、蓝色的亮度值。在处理图像时需要分别对R、G、B三个分量进行处理,因此需要显示此三个通道的图像,分离出来的RGB单通道图像是灰度图。由实验可知,虽然图像采用RGB颜色模式,但并不能反映图像的形态特征,只是从光学原理上进行颜色的调配。
  •   (2)为了更好的描述物体颜色,因此需要将原始彩色图像转为HSI颜色模式,而HSI的颜色空间是需要从RGB颜色空间转换成的。因此需要先拆分出RGB图像的三个通道,再根据公式分别计算HSI图像H分量、S分量、I分量。这三个分量分别代表了色调、饱和度、亮度。
  •   (3)强度分层:将灰度图像按照灰度值范围划分为不同的层级,然后给每个层级赋予不同的颜色,从而增强不同层级的对比度。实验可得:对灰度图像,根据感兴趣区域。感兴趣区域的亮度值较高,此时通过 强度分层技术对感兴趣区域着色,变为突出的颜色,以此与其他区域加以区分。
  •   (4)灰度值到彩色变换:灰度值到彩色变换首先需要对任何像素的灰度值进行3个独立的变换,然后将3个变换结果分别作为伪彩色图像的红、绿、蓝通道的亮度值。与强度分层技术相比,灰度值到彩色变换的技术更通用,可以突出多个感兴趣区域。
  •   (5)HSI颜色空间是面向颜色处理的,I分量与图像的彩色信息无关,H分量和S分量与人感受颜色的方式是紧密相连的。对比 HSI颜色空间的分割结果,可以看出 RGB空间中进行彩色分割的效果更好。对比原始图像,它对感兴趣区域进行提取,并弱化了背景区域。
  • 7
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1.项目代码功能经验证ok,确保稳定可靠运行。欢迎下载使用!在使用过程,如有问题或建议,请及时私信沟通。 2.主要针对各个计算机相关专业,包括计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师或企业员工使用。 3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为毕设、课程设计、大作业、初期项目立项演示等用途。 4.当然也鼓励大家基于此进行二次开发。 5.期待你能在项目找到乐趣和灵感,也欢迎你的分享和反馈! 【资源说明】 基于TensorFlow深度学习框架实现遥感影像语义分割python源码+项目说明(毕设项目) 数据 * 训练数据集包括803张卫星图片,RGB格式,尺寸2448 * 2448 * 图像分辨率为50cm,由 DigitalGlobe's 卫星提供 * 可通过下载页点击"Starting Kit"下载数据。 标注 * 每张卫星图片有一张与之对应的标注图片。这张标注图片也是RGB格式,一共分为7类,每类对应的图像(R,G,B)编码对应关系如下: * 城市土地: 0,255,255,浅蓝色,人造建筑(可以忽略道路) * 农业用地: 255,255,0,黄色,农田,任何计划(定期)的种植、农田、果园、葡萄园、苗圃、观赏性园艺以及养殖区 * 牧场: 255,0,255,紫色,除了森林,农田之外的绿色土地,草地 * 森林:0,255,0,绿色,任何土地上有x%的树冠密度。 * 水系:0,0,255,深蓝色,江河湖海湿地 * 荒地:255,255,255, 白色,山地,沙漠,戈壁,沙滩,没有植被的地 * 未知土地: 0,0,0,黑色,云层遮盖或其他因素 * 卫星图片和与其对应的标注图片的命名格式为 id_sat.jpg和id_mask.png,id 是一个随机的整数。 * 需要注意: * 由于压缩,标注图像的值可能不是准确的目标颜色值。当转换到标签时,请将每个R/G/B通道按128阈值二值化。 * 高分辨率卫星图像的土地覆被分割仍然是一个探索性的任务,由于标注多类分割的代价很大,标签还远远不够完善。 评价指标 * 我们将采用像素级别的平均IoU分数作为评价指标。 * IoU的定义是:交集/并集,公式: 预测准确的面积/(预测准确面积 + 没有预测出来的面积 + 预测错误的面积) * 平均IoU由各个类别的IoU取均值得到 * 需要注意的是"未知土地"(0,0,0)并不是一个真实的类别,在这个计算也没有起到作用。所以有效的mIoU是前6个类别IoU的均值。 文件结构组织 * deepglobe_land * dataset * land_train (存放下载下来的原始数据 ) * onechannel_label (内部数据通过运行 rgb2label.py 生成) * voc_train_all.record (通过运行 create_tf_record_all.py 生成 ) * ini_checkpoints * resnet_v2_101 (resnet_v2_101.ckpt and train.graph) * utils (工具包) * rgb2label.py * create_tf_record_all.py * deeplab_model.py ### 代码执行顺序与注意事项
为实现自然条件下棉花叶片的精准分割,提出一种粒子群(Particle swarm optimization,PSO)优化算法和K-means聚类算法混合的棉花叶片图像分割法。本算法将棉花叶片图像在RGB颜色空间模式下采用二维卷积 滤波进行去噪预处理,并将预处理后的彩色图像从RGB转换到目标与背景差异性最大的Q 分量、超G 分量、a*分量;随后在K均值聚类的一维数据空间利用PSO算法向全局像素解的子空间搜寻,通过迭代搜寻得到全局最优解,确定最佳聚类心点,改善K均值聚类的收敛效果;最后,对像素进行聚类划分,从而得到棉花叶片分割结 果。按照不同天气条件和不同背景采集了1 200幅棉花叶片样本图像,对本研究算法进行测试。试验结果表明:该算法对于晴天、阴天和雨天图像目标(棉花叶片)分割准确率分别达到92.39%、93.55%、88.09%,总体平均分割精度为91.34%,并与传统K均值算法比较,总体平均分割精度提高了5.41%。分割结果表明,本研究算法能够对 3种天气条件(晴天、阴天、雨天)与4种复杂背景(白地膜、黑地膜、秸秆、土壤)特征混合的棉花叶片图像实现准确分割,为棉花叶片的特征提取与病虫害识别等后续处理提供支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小_喻

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值