液位计目标检测以及液位百分比算法
1数据采集:
收集到数据集以后,第一时间对数据集进行清洗,去除掉角度以及光线比较差的图片,为后续计算液位百分比打基础,因为数据集较少,所以决定使用传统算法对液位进行一个提取。
2预处理:
接着对数据集进行简单的预处理,来减少后续的干扰,这里我使用的是中值滤波进行降噪处理,可以使得图片更加光滑。
定义:中值滤波是一种非线性的信号处理方法,所以它是一种非线性滤波器,也是一种统计排序滤波器。它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值。
目的:中值滤波对孤立的噪声像素即椒盐噪声、脉冲噪声具有良好的滤波效果,可以保持图像的边缘特性,不会使图像产生显著的模糊。
中心思想:中值滤波是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近真实值,从而消除孤立的噪声点。
3计算红区域
经过简单处理以后,对图像进行颜色阈值分割
首先将RGB通道转换为HSV颜色空间这样更利于我们对颜色的提取,通过手动调整roi区域的红色hsv阈值范围来做到提取红色区域
接下来计算所有掩膜的最小外接矩形,通过比较从而得到最大的掩膜体积
接着通过确定最小外接矩形的四个顶点计算出其最长的一条边,获得红色区域的长度,为后续算其占总长度的百分比做基础
4,提取整个液位计
1:预处理:
1:首先将针对图片对图片进行灰度化处理
2:接下来对图片进行中值滤波简单处理一下,来降低图片中的噪音
3:再对比了多张阈值分割的结果后,最终选择了自适应阈值分割的方式进行提取液位计边界线
2:提取液位计长度
1:根据目标检测区域内的自适应阈值分割图片进行多边形轮廓寻找,接着将找到的所有轮廓进行合并,后续合并为一个最大的外接矩形
- 在得到框的基础上,计算出四边形的四个点分为x1,x2,y1y2分别是左上,右上,右下,左下,根据的道德坐标点来计算两点之间垂直最长的线段,由此可以提取到液位计的长度
由于计算的框可能会因为角度有所误,后续加入了缩小因子,对框的大小进行调整
3:计算长度:
在得到框的总体长度之后,由于当时我使用了两部分代码进行计算,所以将计算液位计代码进行函数封装,以便后续计算长度使用。
后续调用计算得到的液位计长度即可
使用公式(longest_vertical_edge_length / vertical_length) * 100
longest_vertical_edge_length为红色区域的长度
最终将计算结果表现在图片上:
传统算法对于角度,光线,都有比较苛刻的要求,后续可以尝试使用深度模型的语义分割模型进行计算,效果和准确率上会有所提升