【图像分割】ExG超绿特征灰度化、二值化分割(Matlab及Python代码实现)

         超绿色提取绿色植物图像效果较好,阴影、枯 草和土壤图像等均能较明显的被抑制,植物图像更为突出,对于作物识别或杂草的识别最常用的灰度化方法为超绿色法:

                                                                     ExG=2G-R-B

        为将植物和背景分割需先确定一个阈值,然后将每个像素点的灰度值和阈值相比较,根据比较的 结果将该像素划分为植物或者背景。最大类间方差 法(Ostu 法)不需要人为设定其他参数,是一种自 动选择阈值的方法,其计算过程简单、稳定

matlab代码

%超绿特征分割
%先用最大类间方差法自动计算最佳阈值T,然后计算超绿分量ExG=2G-R-B,大于等于T,赋值为255,反之赋值为0
clear all;
clc;
image = imread('test3.png');
image = im2double(image); %图像运算不能用uint8类型,会发生溢出现象,要转成double类型
R = image(:,:,1);
G = image(:,:,2);
B = image(:,:,3);
ExG = 2*G-R-B;
[m,n] = size(ExG);
T = graythresh(ExG);
h = ExG;

for i = 1:m
    for j= 1:n 
        if h(i,j) >= T
            h(i,j)=255;
        else
            h(i,j)=0;
        end
    end
end
subplot(131),imshow(image),title('原始图片');
subplot(132),imshow(ExG),title('超绿灰度化')
subplot(133),imshow(h),title('超绿分割二值图')

实验结果:

python代码

    # -*- coding: utf-8 -*-
    """
    Created on Fri Sep 20 14:13:34 2019
    @author: ywx
    """
    image=cv2.imread('test2.png',cv2.IMREAD_COLOR)
    img1 = np.array(image,dtype='int')  #转换成int型,不然会导致数据溢出
    #超绿灰度图
    b, g, r = cv2.split(img1)
    #ExG_sub = cv2.subtract(2*g,r)
    #ExG = cv2.subtract(ExG_sub,b )
    ExG = 2*g-r-b
    [m,n] = ExG.shape
    
    for i in range(m):
        for j in range(n):
            if ExG[i,j]<0:
                ExG[i,j]=0
            elif ExG[i,j]>255:
                ExG[i,j]=255
                  
    ExG = np.array(ExG,dtype='uint8')  #重新转换成uint8类型
    ret2, th2 = cv2.threshold(ExG, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)

    plt.figure(figsize=(10,5), dpi=80)
    plt.subplot(131),plt.imshow(cv2.cvtColor(image,cv2.COLOR_BGR2RGB)),\
                     plt.title('Original'),plt.axis('off')
    plt.subplot(132),plt.imshow(cv2.cvtColor(ExG,cv2.COLOR_BGR2RGB)),\
                     plt.title('ExG_gray'),plt.axis('off')
    plt.subplot(133),plt.imshow(cv2.cvtColor(th2,cv2.COLOR_BGR2RGB)),\
                     plt.title('OTSU_bw'),plt.axis('off')
    plt.show()

注:由于图片是从论文上截图保存下来的,故分辨率没有原作者的高,效果也没原论文好

之后,可以再进行形态学操作(膨胀腐蚀等)使得分割结果更准确。

方法来源论文:基于机器视觉的株间机械除草装置的作物识别与定位方法

知识扩展:

2.2.1灰度化因子
       对于采集到的彩色图像,绿色植物和背景土壤在R, G, B三个颜色分量上的取值存在着不同的特点。通过将原始图像分离成三个独立的基色平面,然后选择不同的彩色特征组合,对图像中的每个像素点进行转换,可以达到增强图像中目标作物与背景土壤对比度的目的。由于在这一过程中原始图像转变成了灰度图像,因此我们将转换时应用的颜色特征组合称为灰度化因子。
       在下面介绍的灰度化因子中,R, G, B分别代表每个像素的红色分量、绿色分量和
蓝色分量,r, g, b则是归一化后的R, G, B值,具体计算公式为:

来源:作物长势监控图像中绿色植物的识别方法研究-赵晓兰

注:有的论文里面是ExR=1.3R-G

例如:A segmentation method for disease spot images incorporating chrominance in Comprehensive Color Feature and Region Growing

欢迎转载,转载请注明出处,谢谢!


版权声明:本文为weixin_43211480原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。