一种基于计算机视觉的排水监测方法及水体监测方法转让专利

申请号 : CN202110174609.0

文献号 : CN112861856B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 甘小皓钟璞星

申请人 : 慧目(重庆)科技有限公司

摘要 :

本发明公开了一种基于计算机视觉的排水监测方法及水体监测方法,排水监测方法包括如下步骤:先获取摄像机图像,并在图像中划分呈矩形的待监测区域集合drainBoxes和预设水流方向集合flowLines,并记录待监测区域集合中每个待监测区域drainBox的坐标为[(x1,y1),(x2,y2)],其中(x1,y1)和(x2,y2)分别为待监测区域drainBox上对角点上的坐标;记录预设水流方向集合flowLines中每个预设水流方向flowLine的坐标为[(fx1,f y1),(fx2,fy2)],其中,(fx1,f y1)和(fx2,fy2)为预设水流方向flowLine上依次选取两点的坐标。在光流法的基础上根据是否存在水流、水流方向以及同向水流的占比来综合判断是否存在排水。本发明具有能够保持持续监测,防止偷排,有利于降低人力物力投入等优点。

权利要求 :

1.一种基于计算机视觉的排水监测方法,其特征在于,包括如下步骤:

S1、先获取摄像机图像,并在图像中划分呈矩形的待监测区域集合drainBoxes和预设水流方向集合flowLines,并记录待监测区域集合中每个待监测区域drainBox的坐标为[(x1,y1),(x2,y2)],其中(x1,y1)和(x2,y2)分别为待监测区域drainBox上对角点上的坐标;记录预设水流方向集合flowLines中每个预设水流方向flowLine的坐标为[(fx1,f y1),(fx2,fy2)],其中,(fx1,f y1)和(fx2,fy2)为预设水流方向flowLine上依次选取两点的坐标;

S2、监测时,获取连续的M帧,将得到图片的BGR值组成的BGR数字矩阵imgDatas,其维度为N*H*W*D,其中,N为帧数,W为图片宽度,H为图片高度,D为图片通道;

对待监测区域集合drainBoxes中的每个待监测区域drainBox,从BGR数字矩阵imgDatas中提取待监测区域drainBox的位置数据,得到待监测区矩阵detFrames,其维度为N*H1*W1*D,其中,H1为待监测区域drainBox的图片高度,W1为待监测区域drainBox的图片宽度;

采用光流法对待监测区矩阵detFrames的第一个维度求取连续两帧之间各像素点的光流变化值,并得到该待监测区域drainBox的光流输出矩阵ouputFlows,其维度为((N‑1)*H1)*W1*D,将所述光流输出矩阵ouputFlows转换为光流二维矩阵ouputFlows_1,表示为((N‑1)*H1*W1)*D;

对光流二维矩阵ouputFlows_1的每个光流数据进行遍历处理,若光流二维矩阵ouputFlows_1中对应的两个值的绝对值之和大于设定的极小值,则保留该光流数据,否则,删除该光流数据,将保留的光流数据组成的二维矩阵记为光流过滤二维矩阵ouputFlows_

2;

S3、进行排水状态判断:将预设水流方向flowLine的坐标转换为单位向量,记为流向单位向量baseVec;对光流过滤二维矩阵ouputFlows_2中的每组向量在流向单位向量baseVec上的投影,得到一维的光流投影数组vecPros;遍历光流过滤二维矩阵ouputFlows_2,计算其中每组向量的模长,得到一维的光流模长数组vecNorms;

将光流模长数组vecNorms中大于设定模长的元素索引,组成一维的索引数组filterWhere,根据索引数组filterWhere中的索引值,从光流投影数组vecPros和光流过滤二维矩阵ouputFlows_2中的对应位置,取出相应的元素值,组成一维的光流投影索引数组vecPros_1和二维的光流过滤索引矩阵ouputFlows_3;

对光流过滤索引矩阵ouputFlows_3的第一个维度求取平均值,得到光流平均向量ouputFlowsMean;计算光流过滤索引矩阵ouputFlows_3中的每个向量与流向单位向量baseVec的余弦相似度,组成一维的余弦相似度数组cosSims;

对光流投影索引数组vecPros_1和余弦相似度数组cosSims进行扩展维度操作,得到二维的光流投影索引二维数组vecPros_2和余弦相似度二维数组cosSims_1,将光流投影索引二维数组vecPros_2和余弦相似度二维数组cosSims_1按第二个维度进行重组,得到二维的光流输出数组outputData,并记录光流输出数组outputData的光流总行数dataNum;

将光流输出数组outputData的每一组数据中的第一个数据大于设定的向量投影阈值,且第二个数据大于设定的余弦相似度阈值的数据保留,得到二维的光流输出有效数组outputData_1,以及对应的光流有效总行数dataNum_1;计算光流有效总行数dataNum_1与光流总行数dataNum的比值,记为有效数据率posDataRatio;

将光流平均向量ouputFlowsMean在流向单位向量baseVec上的投影,得到光流平均投影值vecProMean;将光流平均向量ouputFlowsMean与流向单位向量baseVec的余弦相似度,得到光流平均余弦相似度cosSimMean;

若光流平均投影值vecProMean、光流平均余弦相似度cosSimMean以及有效数据率posDataRatio均大于各自对应的预设阈值,则判定待监测区域drainBox正在排水,否则判定待监测区域drainBox未排水。

2.一种基于计算机视觉的水体监测方法,其特征在于,包括如权利要求1所述的基于计算机视觉的排水监测方法。

说明书 :

一种基于计算机视觉的排水监测方法及水体监测方法

技术领域

[0001] 本发明涉及水文水利监测技术领域,特别的涉及一种基于计算机视觉的排水监测方法及水体监测方法。

背景技术

[0002] 在水务、水利、水文等行业,需要对排水状态进行监测,例如对工厂的排污口的排污状态的监管,一旦发现排污则产生相应预警;河流、大坝等场景的翻坝溢流监管(水位是否翻过堤坝,一旦水流翻过堤坝,则产生相应告警);补水点是否正常进行补水,一旦补水状态异常,则产生相应告警。因此,需要对监控或观测区域内的水流状态进行判断。现有的排水监测主要通过人工巡查,摄像监控或无人机监控,这些监测方式需要大量的人力物力,且无法做到持续监测,不能杜绝偷排行为。

发明内容

[0003] 针对上述现有技术的不足,本发明所要解决的技术问题是:如何提供一种能够保持持续监测,防止偷排,有利于降低人力物力投入的基于计算机视觉的排水监测方法及水体监测方法。
[0004] 为了解决上述技术问题,本发明采用了如下的技术方案:
[0005] 一种基于计算机视觉的排水监测方法,其特征在于,包括如下步骤:
[0006] S1、先获取摄像机图像,并在图像中划分呈矩形的待监测区域集合drainBoxes和预设水流方向集合flowLines,并记录待监测区域集合中每个待监测区域drainBox的坐标为[(x1,y1),(x2,y2)],其中(x1,y1)和(x2,y2)分别为待监测区域drainBox上对角点上的坐标;记录预设水流方向集合flowLines中每个预设水流方向flowLine的坐标为[(fx1,f y1),(fx2,fy2)],其中,(fx1,f y1)和(fx2,fy2)为预设水流方向flowLine上依次选取两点的坐标;
[0007] S2、监测时,获取连续的M帧,将得到图片的BGR值组成的BGR数字矩阵imgDatas,其维度为N*H*W*D,其中,N为帧数,W为图片宽度,H为图片高度,D为图片通道;
[0008] 对待监测区域集合drainBoxes中的每个待监测区域drainBox,从BGR数字矩阵imgDatas中提取待监测区域drainBox的位置数据,得到待监测区矩阵detFrames,其维度为N*H1*W1*D,其中,H1为待监测区域drainBox的图片高度,W1为待监测区域drainBox的图片宽度;
[0009] 采用光流法对待监测区矩阵detFrames的第一个维度求取连续两帧之间各像素点的光流变化值,并得到该待监测区域drainBox的光流输出矩阵ouputFlows,其维度为((N‑1)*H1)*W1*D,将所述光流输出矩阵ouputFlows转换为光流二维矩阵ouputFlows_1,表示为((N‑1)*H1*W1)*D;
[0010] 对光流二维矩阵ouputFlows_1的每个光流数据进行遍历处理,若光流二维矩阵ouputFlows_1中对应的两个值(每个点的光流数据是2个值,代表的是光流的方向向量)的绝对值之和大于设定的极小值,则保留该光流数据,否则,删除该光流数据,将保留的光流数据组成的二维矩阵记为光流过滤二维矩阵ouputFlows_2;
[0011] S3、进行排水状态判断:将预设水流方向flowLine的坐标转换为单位向量,记为流向单位向量baseVec;对光流过滤二维矩阵ouputFlows_2中的每组向量在流向单位向量baseVec上的投影,得到一维的光流投影数组vecPros;遍历光流过滤二维矩阵ouputFlows_2,计算其中每组向量的模长,得到一维的光流模长数组vecNorms;
[0012] 将光流模长数组vecNorms中大于设定模长的元素索引组成一维的索引数组filterWhere,根据索引数组filterWhere中的索引值,从光流投影数组vecPros和光流过滤二维矩阵ouputFlows_2中的对应位置,取出相应的元素值,组成一维的光流投影索引数组vecPros_1和二维的光流过滤索引矩阵ouputFlows_3;
[0013] 对光流过滤索引矩阵ouputFlows_3的第一个维度求取平均值,得到光流平均向量ouputFlowsMean;计算光流过滤索引矩阵ouputFlows_3中的每个向量与流向单位向量baseVec的余弦相似度,组成一维的余弦相似度数组cosSims;
[0014] 对光流投影索引数组vecPros_1和余弦相似度数组cosSims进行扩展维度操作,得到二维的光流投影索引二维数组vecPros_2和余弦相似度二维数组cosSims_1,将光流投影索引二维数组vecPros_2和余弦相似度二维数组cosSims_1按第二个维度进行重组,得到二维的光流输出数组outputData,并记录光流输出数组outputData的光流总行数dataNum;
[0015] 将光流输出数组outputData的每一组数据中的第一个数据大于设定的向量投影阈值,且第二个数据大于设定的余弦相似度阈值的数据保留,得到二维的光流输出有效数组outputData_1,以及对应的光流有效总行数dataNum_1;计算光流有效总行数dataNum_1与光流总行数dataNum的比值,记为有效数据率posDataRatio;
[0016] 将光流平均向量ouputFlowsMean在流向单位向量baseVec上的投影,得到光流平均投影值vecProMean;将光流平均向量ouputFlowsMean与流向单位向量baseVec的余弦相似度,得到光流平均余弦相似度cosSimMean;
[0017] 若光流平均投影值vecProMean、光流平均余弦相似度cosSimMean以及有效数据率posDataRatio均大于各自对应的预设阈值,则判定待监测区域drainBox正在排水,否则判定待监测区域drainBox未排水。
[0018] 一种基于计算机视觉的水体监测方法,其特征在于,包括如上所述的基于计算机视觉的排水监测方法。
[0019] 综上所述,本发明具有能够保持持续监测,防止偷排,有利于降低人力物力投入等优点。

附图说明

[0020] 图1和图2为监控区域的示意图。
[0021] 图3为待监测区域的划分示意图。
[0022] 图4为待监测水体的区域照片。
[0023] 图5为水面区域的结构示意图。
[0024] 图6为水面区域的BGR图。
[0025] 图7为水面区域的HSV图。

具体实施方式

[0026] 下面结合一种基于计算机视觉的水体监测方法的实施例对本发明作进一步的详细说明。
[0027] 一种基于计算机视觉的水体监测方法,包括基于计算机视觉的排水监测方法,其方法步骤如下:
[0028] 如图1所示,共有2个排水口,左侧排口正在排水,右侧排口未排水,现通过基于计算机视觉的算法,计算两个排口的排水状态。判断前,先对排水状态进行定义,首先确定排水口有水排出,其次水流方向与预先设定方向一致。因为考虑到某些特定场景下,如图6所示,排水口被部分淹没的情况,可以检测到排口处有水流,但并不一定是排水口在排水。左右两边的排口处均检测到水流,但是实际上左侧排口处为河道本身的水流,而右侧排口处明显可见排口往外排放污水。因此,需要根据排口的现场情况,预先设置排水区域和可能的排水方向。
[0029] 本实施例中,针对图1中的场景进行说明(同时也适用于图2中的场景),一种基于计算机视觉的排水监测方法,如图3所示,此场景设置了2个排水口检测区域(矩形蒙版区域),箭头为两个排水口各自预设的水流方向,记录2个排水口的坐标,得到drainBoxes:[[59,542,344,929],[966,316,1280,713]],其中每个框中的坐标都依次为左上角点与右下角的像素坐标。记录两个排水口的预设水流方向,得到flowLines:[[196,612,202,878],[1127,386,1120,680]],其中每个框中的坐标都依次为水流方向箭头起点到终点的坐标。
排水口坐标和水流方向坐标都按照从左至右排列,并且一一对应。
[0030] 对数据进行预处理
[0031] 以此路视频流为例,首先读取此路视频流的连续帧图片数据,此处取连续的10帧,得到图片由图片BGR组成的数字矩阵,其维度为N*H*W*D,
[0032] 其中N为帧数,W为图片宽度,H为图片高度,D为图片通道(此处为BGR,其中B为蓝色,G为绿色,R为红色),定义该数字矩阵为imgDatas,其维度为:10*1080*1920*3,其数据结构如下所示:
[0033] [[[[56 70 29][57 71 30][57 71 30]...[222 203 176][222 203 176][222 203 176]]
[0034] ...
[0035] [[125 135 165][125 135 165][127 135 165]...[47 56 53][47 56 53][47 56 53]]]
[0036] ...
[0037] [[[28 32 0][31 35 0][29 36 0]...[222 203 176][222 203 176][222 203 176]]
[0038] ...
[0039] [[119 138 165][118 137 164][120 140 165]...[48 57 54][48 57 54][47 56 53]]]]
[0040] 遍历预先设置的排口,此处为2个,先以第一个排口为例,从上述设置得到的drainBoxes与flowLines数据中抽取第一个排口的drainBox:[59,542,344,929],flowLine:[196,612,202,878]。然后进行ROI操作,从上一步得到的imgDatas中提取第一个排水口位置的数据,操作方式为:[:,542:929,59:344,:],得到一个10*387*285*3的矩阵,记为detFrames,其数据结构如下所示:
[0041] [[[[143 164 179][162 183 198][139 161 173]...[119 134 103][111 129 90][110 130 83]]
[0042] ...
[0043] [[186 179 212][191 184 217][197 190 223]...[111 137 191][113 139 193][118 145 196]]]
[0044] ...
[0045] [[[126 146 163][138 158 175][121 142 157]...[127 138 122][90 105 77][95 115 73]]
[0046] ...
[0047] [[162 159 175][163 161 181][156 152 177]...[139 153 202][127 138 188][117 128 178]]]]
[0048] 将得到detFrames作为输入,从第一个维度(此处为10)循环,采用光流法,依次求取连续两帧之间各像素点的光流变化值,并拼接成一个矩阵,得到ouputFlows,其维度为(9*387)*285*2,即为3483*285*2,其数据结构如下所示,其中光流法的数据预处理及计算过程,可参考现有的OpenCv中的calcOpticalFlowFarneback方法,其参数也采用默认参数即可。
[0049] [[[‑0.6494114 ‑0.32461116]...[‑0.4463605 ‑0.16205281]][0050] ...
[0051] [[0.8821222 0.00421591]...[0.33376044 ‑3.0070875]]]
[0052] 对得到的ouputFlows,进行维度变化操作,转化为二维矩阵,得到ouputFlows_1,其维度为992655*2,数据结构如下所示:
[0053] [[‑0.6494114 ‑0.32461116]...[0.33376044 ‑3.0070875]]
[0054] 对得到的ouputFlows_1数据进行过滤,其逻辑为过滤掉监测区域内连续两帧相对静止的点,也就是其光流变化值接近0的点,过滤方法为遍历每个光流数据,判定两个值的绝对值之和与一个极小值的比较结果(此处给定0.00001),如果大于这个极小值则保留,反之则舍弃;例如第一条数据:
[0055] [‑0.6494114,‑0.32461116],|‑0.6494114|+|‑0.32461116|=0.97402256>0.00001
[0056] 则保留此条数据。
[0057] 通过上述操作后,得到一个975139*2的数字矩阵,记为ouputFlows_2,备用。
[0058] 排水判断
[0059] 将上一步得到的ouputFlows_2与提前设置得到的flowLine(此处为[196,612,202,878]),作为输入,进行排水状态的计算。
[0060] 首先,将flowLine数据转为单位向量,用baseVec来表示,此处计算结果为[0.02255065,0.9997457]。
[0061] 遍历ouputFlows_2,计算其每个向量到baseVec的投影,得到长度为975139的一维数组,记为vecPros,其数据结构如下所示:
[0062] [‑0.33917326 ‑0.32963609 ‑0.31685013  ... ‑3.12023619 ‑3.1601487 ‑2.99879626]
[0063] 遍历ouputFlows_2,计算其中每组向量的模长,得到长度为975139的一维数组,记为vecNorms,其数据结构如下所示:
[0064] [0.7260217 0.7009283 0.64965796 ... 3.120616 3.162034 3.025553][0065] 遍历vecNorms,计算出vecNorms中元素大于0.005的索引,记为filterWhere,其为长度899619的一维数组,数据结构如下所示。
[0066] [0,1,2,...,975136,975137,975138]
[0067] 按照filterWhere中的索引值,从vecPros和ouputFlows_2中对应位置,取出相应的值,分别记为vecPros_1,ouputFlows_3。vecPros_1为长度899619的一维数组,其数据结构如下所示:
[0068] [‑0.33917326 ‑0.32963609 ‑0.31685013  ... ‑3.12023619 ‑3.1601487 ‑2.99879626]
[0069] ouputFlows_3为899619*2的二维数组,其数据结构如下所示:
[0070] [[‑0.6494114 ‑0.32461116]...[0.33376044 ‑3.0070875]]
[0071] 计算ouputFlows_3第一个维度的平均值,得到平均向量,记为ouputFlowsMean,其结果为[0.00773862,0.12921983],备用,ouputFlowsMean代表排口监测区域内,总体的水流向量数据。
[0072] 计算ouputFlows_3中每个向量与单位向量(baseVec=[0.02255065,0.9997457])的余弦相似度,得到一个长度为899619一维数组,记为cosSims,其数据结构如下所示:
[0073] [‑0.46716683 ‑0.47028506 ‑0.48771838  ... ‑0.9998783 ‑0.99940376 ‑0.99115642]
[0074] 对vecPros_1与cosSims进行扩展维度操作,得到vecPros_2与cosSims_1,并将vecPros_2与cosSims_1按第二个维度进行重组,得到outputData。vecPros_2为一个899619*1的二维数组,其数据结构如下所示:
[0075] [[‑0.33917326][‑0.32963609][‑0.31685013]...[‑3.12023619][‑3.1601487][‑2.99879626]]
[0076] cosSims_1为一个899619*1的二维数组,其数据结构如下所示:
[0077] [[‑0.46716683][‑0.47028506][‑0.48771838]...[‑0.9998783][‑0.99940376][‑0.99115642]]
[0078] outputData为一个899619*2的二维数组,其数据结构如下所示:
[0079] [[‑0.33917326 ‑0.46716683][‑0.32963609 ‑0.47028506]...[‑3.1601487 ‑0.99940376][‑2.99879626 ‑0.99115642]]
[0080] 另外,将得到的899619记为dataNum。
[0081] 对于outputData,其代表了所选定排口的监测区域内一系列光流数据与我们预先设置的方向向量(flowLine)的关系,以其第一组数据[‑0.33917326,‑0.46716683]为例,‑0.33917326为对应的光流向量到方向向量的投影,‑0.46716683为光流向量到方向向量的余弦相似度。按照之前的定义,一个排口的排水状态由2个因素来判定,是否排水及排水方向是否与排口设置方向一致。因此,我们需要从outputData中统计出与flowLine(或baseVec)方向接近(通过余弦相似度来衡量,变化范围为‑1到1,‑1为方向相反,1为方向重合)且到方向向量投影大于一定阈值的数据。然后通过统计出来的数据量在所有数据中的占比情况(即与dataNum的比值),来作为是否排水的重要依据。
[0082] 按照上一步的要求,先对outputData的数据进行统计,向量投影的阈值给定为0.01,余弦相似度的阈值给定为0.5。可按此条件对outputData进行过滤,过滤后得到一个
209853*2的二维数组,记为outputData_1,其数据结构如下所示:
[0083] [[0.0155829 0.77702952][0.03556021 0.51000698]...[0.01502273 0.96439865][0.0112475 0.9540855]]
[0084] 另外,得到的209853记为dataNum_1,将dataNum_1与dataNum的比值定义为posDataRatio,此处posDataRatio=0.23326875043768527。
[0085] 将此前得到的ouputFlowsMean代入,计算其与flowLine(或baseVec)的投影值及余弦相似度,并分别记为vecProMean、cosSimMean。此处,vecProMean=0.12936148057543792,cosSimMean=0.9993057716074317。这两个数据,也将作为衡量排口排水状态的重要指标。
[0086] 到这一步,得到了衡量排水状态的三个指标:vecProMean、cosSimMean与posDataRatio。vecProMean代表排口区域整体的水流状态,大于设定阈值,则为水在流动(输出para_1=1),反之则没有水流动(输出para_1=0);cosSimMean代表排口区域整体的水流方向,大于设定阈值,则判定为水流方向与排口设定方向一致(输出para_2=1),反之则不一致(para_2=0);posDataRatio代表一系列水流数据中,符合排水方向与位移大小的像素点在整体像素点中的占比,大于设定阈值则判定为排水(输出para_3=1),反之则为未排水(输出para_3=0),可以过滤掉摄像机轻微晃动或者水面乱流的一些干扰。当三个条件都满足的情况下(即para_1*para_2*para_3=1),判定此排口最终状态为排水(输出drainCon=1),反之则判定词牌口最终状态为未排水(输出drainCon=1)。此处,根据数据的统计情况,阈值设定情况如下:vecProMean(0.01),cosSimMean(0.3),posDataRatio(0.1)。
[0087] 对于该排口而言:
[0088] vecProMean=0.12936148057543792;cosSimMean=0.9993057716074317;posDataRatio=0.23326875043768527;
[0089] 计算得到:para_1=1,para_2=1,para_3=1,因此drainCon=1*1*1=1,即该排口最终状态为:排水。
[0090] 可以按照上述同样的步骤,计算第二个排口的状态,得到的相关数据:
[0091] vecProMean=‑0.009332695940481995;cosSimMean=‑0.33229440353309536;posDataRatio=0.11856037477102331;
[0092] 按照算法规则,计算得到:para_1=0,para_2=0,para_3=1;带入drainCon=para_1*para_2*para_3,得到drainCon=0*0*1=0,即第二个排口的最终状态为:未排水。
[0093] 显而易见,算法的计算结果符合视频画面的真实情况,左侧排口排水,右侧排口未排水,如图3所示,
[0094] 上述方法可以判断排水口是否存在偷排现象,但无法对未偷排情况下的水体是否收到污染进行判断和监控,为此,本实施例的水体监测方法还采用了一种基于视觉的水体污染识别方法,具体包括如下步骤:
[0095] 先建立训练模型
[0096] 分别搜集被污染水体和未污染水体的图片,分别放在不同文件路径,两种状态的图片尽可能搜集全面。将被污染水体图片作为污染水体图片组muddy,将未污染水体图片作为未污染水体图片组none_muddy。
[0097] 分别读取两个文件夹的图片数据,得到图片的BGR数据(用imgData表示),其为W*H*D的三维矩阵,其中W为图片宽度、H为图片高度、D为图片通道(此处为BGR,其中B为蓝色、G为绿色、R为红色),其结构如下所示:
[0098] [[[82 128 99][82 128 99][82 128 99]…[80 130 100][78 130 100][78 130 100]]
[0099] [[96 102 77][126 135 109][179 190 164]…[79 129 99][79 129 99][79 129 99]]]
[0100] 将上述所得图片数据的BGR通道转化为HSV通道,其中H为色调、S为饱和度、V为亮度,得到imgHsv,其数据结构如下所示:
[0101] [[[48 94 130][48 95 129][48 95 129]…[48 94 130][48 94 130][48 94 130]]
[0102] [[101 39 245][101 39 245][101 39 245]…[48 95 129][48 95 129][48 95 129]]]
[0103] 将imgHsv的W*H*D的三维矩阵转化为(W*H)*D的二维矩阵形式,得到imgHsv1其数据结构如下:
[0104] [[48 94 130][48 95 129][48 95 129]…[48 95 129][48 95 129][48 95 129]]
[0105] 对imgHsv1的数据按第一个维度求取平均值,得到hsvMean,本实施例中,其值为:[52.47053731,80.39821747,137.40183346]。
[0106] 依次求取muddy和none_muddy的图片的hsvMean,并各自得到一个二维矩阵,再对矩阵内数据取整,得到muddyHsv与nonMuddyHsv,如下所示。
[0107] muddyHsv
[0108] [[13 125 201][17 107 167][17 80 118]…[24 117 107][22 111 141][39 60 174]]
[0109] nonMuddyHsv
[0110] [[42 112 58][39 139 70][49 99 73]…[50 82 135][53 79 138][52 80 137]][0111] 定义muddyHsv的标签为1,nonMuddyHsv的标签为0,得到训练数据trainData和其对应的标签trainLabel。数据结构如下:
[0112] trainData:
[0113] [[13 125 201][17 107 167][17 80 118]…[50 82 135][53 79 138][52 80 137]]
[0114] trainLabel:
[0115] [1 1 1…0 0 0]
[0116] 打乱训练数据,得到shuffledData和与其对应的标签shuffledLabel。数据结构如下:
[0117] shuffledData:
[0118] [[55 84 88][18 104 149][49 114 58]…[50 95 84][26 50 147][79 70 116]][0119] shuffledLabel:
[0120] [0 1 0…0 1 0]
[0121] 使用SVM(支持向量机)对数据进行二分类训练,并得到模型文件svm.model。
[0122] 水体污染识别
[0123] 如图4所示,为待监测水体的区域照片,先读取待识别图片的BGR数据,得到imgData;手动设置的观测区域,抠出水面区域,得到maskData,如图5所示,其中白色区域为水面部分,黑色部分为其他背景。
[0124] 将maskData与原图数据imgData做“与操作”,得到maskedImg,如图6所示,[0125] 将得到的maskedImg数据转为HSV通道,得到maskedHsv,如图7所示,[0126] 求取水面部分像素点的H、S、V三个通道的均值,具体方法为:求取maskedHsv的H、S、V三个通道各自的总和maskedHsvSum,然后统计出maskedHsv中H、S、V不全为0的元素个数noneZeroNum,其均值hsvMean=maskedHsvSum/noneZeroNum,并取整。本实施例中,maskedHsvSum为:[38561854,36290556,49701133],noneZeroNum为:429387,计算得到的hsvMean为:[89,84,115]。
[0127] 加载训练好的模型svm.model,将上面得到的hsvMean作为输入,计算得到预测值ouputData,此处ouputData为0,根据前面的定义,0为nonMuddyHsv的标签值,及为未污染状态。
[0128] 以上所述仅为本发明的较佳实施例而已,并不以本发明为限制,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。