基于水色图像的水质评价(完整代码)
实验介绍
水质的好坏跟水色有一定关系,有经验的从事渔业生产的从业者可通过观察水色变化调控水质。
本次实战的目标是通过水色图像实现水质的自动评价。
下面水色与水质的关系表:
数据探索分析
数据源
在‘data/images’目录下给出了某地区的多个罗非鱼池塘水样的数据,根据上节给出的水产专家按水色判断水质分类的数据表来对数据进行探索分析。每个水质图片的命名规则为“类别_编号.jpg”,如1_1.jpg说明当前图片属于第一类的样本。
问题抽象
根据概率论的理论,随机变量的概率分布可以由其各阶矩唯一表示和描述。一幅图像的色彩分布也可以认为是一种概率分布,那么图像可以由其各阶矩来描述。颜色矩包含各个颜色通道的一阶矩、二阶矩和三阶矩,对于一幅RGB颜色空间图像,具有R、G和B三个颜色通道,则有9个分量。
将采集到的水样图像进行分割,采用颜色矩来提取水样图像的特征。
(1)一阶颜色矩
一阶颜色矩采用一阶原点矩,反映图像的整体明暗程度。
其中,Ei是在第i个颜色通道的一阶颜色矩,对于RGB颜色空间的图像,i=1,2,3。其中pij是第j个像素的第i个颜色通道的颜色值。
(2)二阶颜色矩
二阶颜色矩采用的是二阶中心矩的平方根,反映图像颜色的分布范围。
其中σi是在第i个颜色通道的二阶颜色矩,Ei是在第i个颜色通道的一阶颜色矩。
(3)三阶颜色矩
三阶颜色矩采用的是三阶中心距的立方根,反映图像颜色分布的对称性。
其中,si是在第i个颜色通道的三阶颜色矩,Ei是在第i个颜色通道的一阶颜色矩。
我们将对所有的水样图像进行特征提取,得到水质类别和水样特征的数据。
数据特征提取
我们将图像中颜色矩特征进行提取,并对数据进行规范化,使其取值在[0,1]之间。对图像中心区域的抽取可以采用pillow库来完成。
此处对书中给出的原始图片数据进行特征提取,并对结果进行规范化,使用该值直接应用到向量机模型,并未使用书中所给数据,分类效果较好。
编写以下代码进行颜色矩的抽取。
import numpy as np
import pandas as pd
from sklearn import preprocessing
from PIL import Image
import os
def PicManage(path,i):
pic = Image.open(path)
pic.c_x, pic.c_y = (int(i/2) for i in pic.size)
box = (pic.c_x-50, pic.c_y-50, pic.c_x+50, pic.c_y+50)
#从图片中提取中心100*100的子矩形
region = pic.crop(box)
#切分RGB