数据挖掘案例-基于水色图像的水质评价


在这里插入图片描述

1. 背景与挖掘目标

从事渔业生产有经验的从业者可通过观察水色变化调控水质,以维持养殖水体生态系统中浮游植物、微生物类、浮游动物等合理的动态平衡。由于这些多是通过经验和肉眼观察进行判断,存在主观性引起的观察性偏倚,使观察结果的可比性、可重复性降低,不易推广应用。当前,数字图像处理技术为计算机监控技术在水产养殖业的应用提供更大的空间。在水质在线监测方面,数字图像处理技术是基于计算机视觉,以专家经验为基础,对池塘水色进行优劣分级,达到对池塘水色的准确快速判别。

目标:

(1) 对水样图片进行切割,提取水样图片中的特征。

(2) 基于提取的特征数据,构建水质评价模型。

(3) 对构建的模型进行评价,评价模型对于水色的识别效率。

2. 分析方法与过程

通过拍摄水样,采集得到水样图像,而图像数据的维度过大,不容易分析,需要从中提取水样图像的特征,提取反映图像本质的一些关键指标,以达到自动进行图像识别或分类的目的。显然,图像特征提取是图像识别或分类的关键步骤,图像特征提取的效果如何直接影响到图像识别和分类的好坏。

图像特征主要包括有颜色特征、纹理特征、形状特征、空间关系特征等。与几何特征相比,颜色特征更为稳健,对于物体的大小和方向均不敏感,表现出较强的鲁棒性。本案例中由于水色图像是均匀的,故主要关注颜色特征。颜色特征是一种全局特征,描述了图像或图像区域所对应的景物的表面性质。一般颜色特征是基于像素点的特征,所有属于图像或图像区域的像素都有各自的贡献。在利用图像的颜色信息进行图像处理、识别、分类的研究中,在实现方法上已有大量的研究成果,主要采用颜色处理常用的直方图法和颜色矩方法等。

颜色直方图是最基本的颜色特征表示方法,它反映的是图像中颜色的组成分布,即出现了哪些颜色以及各种颜色出现的概率。其优点在于它能简单描述一幅图像中颜色的全局分布,即不同色彩在整幅图像中所占的比例,特别适用于描述那些难以自动分割的图像和不需要考虑物体空间位置的图像。其缺点在于它无法描述图像中颜色的局部分布及每种色彩所处的空间位置,即无法描述图像中的某一具体的对象或物体。

基于颜色矩提取图像特征的数学基础在于图像中任何的颜色分布均可以用它的矩来表示。根据概率论的理论,随机变量的概率分布可以由其各阶矩唯一的表示和描述。一副图像的色彩分布也可认为是一种概率分布,那么图像可以由其各阶矩来描述。颜色矩包含各个颜色通道的一阶距、二阶矩和三阶矩,对于一副RGB颜色空间的图像,具有R、G和B三个颜色通道,则有9个分量。

颜色直方图产生的特征维数一般大于颜色矩的特征维数,为了避免过多变量影响后续的分类效果,在本案例中选择采用颜色矩来提取水样图像的特征,即建立水样图像与反映该图像特征的数据信息关系,同时由有经验的专家对水样图像根据经验进行分类,建立水样数据信息与水质类别的专家样本库,进而构建分类模型,得到水样图像与水质类别的映射关系,并经过不断调整系数优化模型,最后利用训练好的分类模型,用户就能方便地通过水样图像,自动判别出该水样的水质类别。

2.1 分析步骤与流程

流程图:

image-20240603155656934

1.从采集到的原始水样图像中进行选择性抽取形成建模数据。

2.对步骤1形成的数据集进行数据预处理,包括图像切割和颜色矩特征提取。

3.利用步骤2形成的已完成数据预处理的建模数据,划分为训练集与测试集。

4.利用步骤3的训练集构建分类模型。

5.利用步骤4的构建好的分类模型进行水质评价。

2.2 数据预处理

image-20240603160541389

水质图片命名规则为“类别-编号.jpg”,如“1_1.jpg”说明当前图片属于第1类的样本。

image-20240603160631102

1. 图像切割

l采集到的水样图像包含盛水容器,容器的颜色与水体颜色差异较大,同时水体位于图像中央,为了提取水色的特征,需要提取水样图像中央部分具有代表意义的图像,具体实施方式是提取水样图像中央101×101像素的图像。

使用Python编程软件进行编程,即可把下图中左边的切割前的水样图像切割并保存到右边的切割后的水样图像。

image-20240603161031431

2. 特征提取

选择采用颜色矩来提取水样图像的特征,下面给出各阶颜色矩的计算公式。

  1. 一节颜色矩

一阶颜色矩采用一阶原点矩,反映了图像的整体明暗程度。

image-20240603161158210

  1. 二阶颜色矩

二阶颜色矩采用的是二阶中心距的平方根,反映了图像颜色的分布范围。

image-20240603161238137

  1. 三阶颜色矩

三阶颜色矩采用的是三阶中心距的立方根,反映了图像颜色的对称性。

image-20240603161255618

对切割后的图像提取其颜色矩,作为图像的颜色特征。颜色矩的提取,并且提取每个文件名中的类别和序号,同时针对所有的图片都进行同样的操作,因提取的特征的取值范围差别较大,如果直接输入模型,可能会导致模型精确度下降,因此,在建模之前需要将数据进行标准化。

import numpy as np
import os,re
from PIL import Image

# 图像切割及特征提取
path = './demo/data/images/'  # 图片所在路径
# 自定义获取图片名称函数
def getImgNames(path=path):
    '''
    获取指定路径中所有图片的名称
    :param path: 指定的路径
    :return: 名称列表
    '''
    filenames = os.listdir(path)
    imgNames = []
    for i in filenames:
        if re.findall('^\d_\d+\.jpg$', i) != []:
            imgNames.append(i)
    return imgNames

# 自定义获取三阶颜色矩函数
def Var(data=None):
    '''
    获取给定像素值矩阵的三阶颜色矩
    :param data: 给定的像素值矩阵
    :return: 对应的三阶颜色矩
    '''
    x = np.mean((data-data.mean())**3)
    
return np.sign(x)*abs(x)**(1/3)

# 批量处理图片数据
imgNames = getImgNames(path=path)  # 获取所有图片名称
n = len(imgNames)        # 图片张数
data = np.zeros([n, 9])  # 用来装样本自变量
labels = np.zeros([n])   # 用来放样本标签

for i in range(n):
    img = Image.open(path+imgNames[i])  # 读取图片
    M,N = img.size  # 图片像素的尺寸
    img = img.crop((M/2-50,N/2-50,M/2+50,N/2+50))    # 图片切割
    r,g,b = img.split()     # 将图片分割成三通道
    rd = np.asarray(r)/255  # 转化成数组数据
    gd = np.asarray(g)/255
    bd = np.asarray(b)/255

    data[i,0] = rd.mean()  # 一阶颜色矩
    data[i,1] = gd.mean()
    data[i,2] = bd.mean()

    data[i,3] = rd.std()   # 二阶颜色矩
    data[i,4] = gd.std()
    data[i,5] = bd.std()

    data[i,6] = Var(rd)    # 三阶颜色矩
    data[i,7] = Var(gd)
    data[i,8] = Var(bd)

    labels[i] = imgNames[i][0]  # 样本标签

3. 模型构建

采用决策树作为水质评价分类模型,模型的输入包括两部分,一部分是训练样本的输入,另一部分是建模参数的输入。各参数说明如下表所示。

image-20240603161456472

其中1~9均为输入的特征,对标准化后的样本进行抽样,抽取80%作为训练样本,剩下的20%作为测试样本,用于水质评价检验,使用决策树算法构建水质评价模型。

from sklearn.model_selection import train_test_split
# 数据拆分,训练集、测试集
data_tr,data_te,label_tr,label_te = train_test_split(data,labels,test_size=0.2,
                                                     random_state=10)

from sklearn.tree import DecisionTreeClassifier
# 模型训练
model = DecisionTreeClassifier(random_state=5).fit(data_tr, label_tr) 
4. 水质评价

取所有测试样本为输入样本,代入已构建好的决策树模型,得到输出结果,即测的水质类型。

# 水质评价
from sklearn.metrics import confusion_matrix
pre_te = model.predict(data_te)
# 混淆矩阵
cm_te = confusion_matrix(label_te,pre_te)
print(cm_te)
from sklearn.metrics import accuracy_score
# 准确率
print(accuracy_score(label_te,pre_te))

水质评价的混淆矩阵如下表所示,分类准确率为70.73%,说明水质评价模型对于新增的水色图像的分类效果较好,可将模型应用到水质自动评价系统,实现水质评价。(注意,由于用随机函数来打乱数据,因此重复试验所得到的结果可能有所不同。)

image-20240603161637666

3. 总结

我国环境质量评价工作是年代后才逐步发展起来的。发展至今,在评价指标体系及评价理论探索等方面均有较大进展。但目前我国环境评价实际工作中,所采用的方法通常是一些比较传统的评价方法,往往是从单个污染因子的角度对其进行简单评价。然而对某区域的环境质量如水质、大气质量等的综合评价一般涉及较多的评价因素,且各因素与区域环境整体质量关系复杂,因而采用单项污染指数评价法无法客观准确地反映各污染因子之间相互作用对环境质量的影响。

基于上述原因,要客观评价一个区域的环境质量状况,需要综合考虑各种因素之间以及影响因素与环境质量之间错综复杂的关系,采用传统的方法存在着一定的局限性和不合理性。因此,从学术研究的角度对环境评价的技术方法及其理论进行探讨,寻求能更全面、客观、准确反映环境质量的新的理论方法具有重要的现实意义。

  • 17
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Token_w

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值