一.背景
在实现了遥控炮台的实时视频传输功能后,今天我们控制协议这块可以针对此功能优化出简单的基于二维坐标系的“自动瞄准”的功能!
二.原理
1.移动侦测:
看过博主系列博客的童鞋相信都知道 motion系统的存在!motion系统作为视频流分发的开源软件,同时具备有个相当酷炫的功能---“移动侦测”:即根据当前视野里场景动态识别移动的的物体,从而确定一块目标区域,示意如下:
图1 移动侦测
2.智能捕获:在获取目标区域后,我们再进一步确立移动物体的核心坐标(x,y),这里做个简单的逻辑解析:
2.1.图像二值化 :基于灰度平局值值法将目标区域进行图像二值化处理:
图2 二值化前图像
图3 二值化后图像
2.1.1. 灰度平局值值法:
简介:即使用整幅图像的灰度平均值作为二值化的阈值,一般该方法可作为其他方法的初始猜想值。
原理:
算法实现:
public static int GetMeanThreshold(int[] HistGram)
{
int Sum = 0, Amount = 0;
for (int Y = 0; Y < 256; Y++)
{
Amount += HistGram[Y];
Sum += Y * HistGram[Y];
}
return Sum / Amount;
}
2.2.采用六点面积法确定灰度图中心,最终获取坐标(x,y).
图3 面积公式
图4 中心坐标公式
3.动态瞄准 :由2获取移动物体的中心坐标(x,y),再结合我们的“视角”是与炮口形成水平线的平等姿态,那么我们动态瞄准的过程就转化成了我们“视角”中心点坐标(x1,y1)与移动物体中心(x,y)的水平线偏差&x=|x1-x|(这里由于结构限制,我们暂时只考虑水平方向的瞄准),如图7所示。
图5 视频炮台侧面图
图6 炮台正面图
图7 偏差范围
那么最终的问题就转化为,我们炮台视角与目标物体的中心偏差值&x与我们炮台水平方向的左右转角偏差值Q成线性变化,即&x=k Q
(备注:k按实际情况转化量纲,这里不做详细描述)
下一章节,博主再继续分享基于此原理上实现的“自动瞄准”功能。
|