1.摘要
本文实现了一个基于图像处理的水浑浊度预测系统。首先,通过Python的图像处理库读取图片并截取有效区域,然后将图片数据划分为RGB三个颜色通道,并转换为像素值矩阵。接着,自定义函数计算三个颜色通道的一阶、二阶和三阶颜色矩,作为图像特征。为了批量处理图像,还自定义了函数获取指定路径中的所有图片名称,并计算它们的颜色矩特征,保存为数组。这些特征数据集用于训练机器学习模型,包括人工神经网络(ANN)、线性回归和K-最近邻(K-NN)等,以预测水的浑浊度。最后,使用Flask框架、HTML/CSS/JavaScript等技术实现了一个基于Web的系统界面,用户可以通过上传水体图像进行浑浊度预测。该系统为水质监测提供了一种新的、便捷的方法。
2.基于图像处理的水浑浊度实现步骤
1.1 读取一张图片数据并用Python查看图片,截取图像的有效区域
目的:从数据源中读取图像,并确定哪些部分是图像的有效内容(即,去除边框、文字等非目标区域)。实现:使用Python的图像处理库(如PIL、OpenCV)读取图像。
显示图像以手动确定有效区域,或者使用图像处理技术(如边缘检测、阈值分割)自动确定。
使用切片操作截取有效区域。
1.2 将图片数据划分为RGB三个颜色通道,分别将三个颜色通道的图片数据转换为像素值矩阵
目的:将图像分解为红(R)、绿(G)、蓝(B)三个颜色通道,以便单独分析每个通道的信息。实现:使用图像处理库的功能分离RGB通道。
将每个通道的图像数据转换为二维或三维的像素值矩阵,其中每个元素代表对应位置的像素值。
1.3 了解水质图像特征-颜色矩,自定义计算三阶颜色矩的函数
目的:颜色矩是一种描述图像颜色分布的特征,它基于图像的颜色直方图计算低阶矩(如均值、方差、偏斜度)。这些特征对于区分不同浑浊度的水图像可能是有用的。实现:研究颜色矩的理论基础,特别是如何计算一阶(均值)、二阶(方差)、三阶(偏斜度)颜色矩。
编写函数来计算每个颜色通道的颜色矩。
1.4 计算三个颜色通道的一阶颜色矩、二阶颜色矩和三阶颜色矩
目的:实际计算每张图像每个颜色通道的颜色矩特征。实现:对每个颜色通道应用之前定义的函数。存储每个颜色通道的颜色矩结果。
1.5 自定义函数正确获取指定路径中的所有图片名称
目的:为了批量处理图像,需要能够列出指定文件夹中的所有图像文件名。实现:使用Python的文件系统操作函数(如os.listdir())列出文件夹中的文件。过滤出图像文件(根据文件扩展名,如.jpg, .png)。
1.6 自定义函数,用循环语句计算所有图片的颜色矩和获取图片标签,分别保存为数组
目的:对指定文件夹中的所有图像重复前面的步骤,计算它们的颜色矩特征,并可能获取与每张图像相关联的标签(如浑浊度等级)。实现:编写一个函数,该函数接受图像文件夹的路径和标签信息(如果可用)。使用循环遍历所有图像文件。对每张图像执行前面的步骤(读取、截取、分离通道、计算颜色矩)。将每张图像的颜色矩特征和标签(如果有)保存到数组中。这些数组随后可以用于机器学习模型的训练和测试。
完成上述步骤后,将拥有一个特征数据集,可以用于训练机器学习模型来预测水的浑浊度。
3.利用数据集进行训练预测模型
提取出的数据集如下:
浊度单位:NTU
1.数据准备:
使用pandas库读取ntumodel.csv文件。
从数据集中提取特征(如最大灰度值、最小灰度值、平均灰度值等)作为输入(X),并将"ntu"列作为目标输出(y)。
使用train_test_split函数将数据集分割为训练集和测试集,测试集大小为33%。
2.模型训练与评估 :
人工神经网络(ANN):
使用Normalizer对数据进行归一化处理。
创建一个多层感知器回归器(MLPRegressor),具有5个隐藏层,每层分别有512、256、128、64、32个神经元。
使用训练数据拟合模型,并预测训练集和测试集的输出。
计算并打印训练集和测试集的均方根误差(RMSE)等。
还可以使用线性回归模型(LinearRegression)、K-最近邻(K-NN):
使用pickle库将训练好的模型(ANN、线性回归、K-NN)保存为.pkl文件,以便将来使用。
4.系统实现
使用刚刚训练好的**.pkl文件实现一个可以基于上传图像进行水浑浊度预测的系统。**
该系统是一个基于Web的图像处理平台,专门用于评估水的浑浊度。用户可以通过上传一张包含水体图像的照片,系统将对这张照片进行处理,并基于图像的多种特征来预测和显示水的浑浊程度。使用到的技术如下:
前端技术:HTML/CSS/JavaScript、Jinja2模板引擎。
后端技术:Flask框架、Python编程语言
图像处理技术:OpenCV库、PIL/Pillow库
机器学习技术:Scikit-learn库、预训练的机器学习模型
Web技术:HTTP协议、WSGI(Web Server Gateway Interface
实现的系统界面如下所示:
上传一张水的图像进行预测:
代码下载链接: