【图像分割】如何使用超绿特征值(ExG)灰度化和二值化分割图像处理技术(Python代码实现)

【图像处理|图像分割】如何使用超绿特征值(ExG)灰度化和二值化分割图像处理技术(Python代码实现)

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

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

==========================================================================

python代码:

 -*- coding: utf-8 -*-
"""
Created on Fri Sep 20 14:13:34 2019
@author: ywx
"""
import cv2
import numpy as np
import matplotlib.pyplot as plt
image = cv2.imread('1.jpg', 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()

实验过程:
【图像分割】如何使用超绿特征值(ExG)灰度化和二值化分割图像处理技术(Python代码实现)_第1张图片
实验结果:
【图像分割】如何使用超绿特征值(ExG)灰度化和二值化分割图像处理技术(Python代码实现)_第2张图片
欢迎转载,转载请注明出处,谢谢!
有问题也可以给小编私信留言评论,欢迎各位小伙伴一起学习!

你可能感兴趣的:(python,python,图像处理,计算机视觉)