检测2D图像中的标记

Mav*_*ick 8 c# matlab image-processing computer-vision

我希望得到一些2D物体检测的帮助.我将简要介绍实现这一目标的背景.

将会有一个天花板的图像.天花板上会放置标记,因此可以确定摄像机的方向.照片将始终面朝上拍摄.我的目标是在图像中检测其中一个标记并确定其旋转.因此,旋转和缩放(在较小程度上)将是图像检测中使用的两个主要因素.我将用C#或matlab编写软件(还不太确定).

例如,标记可能是这样的箭头:

参考箭头

拍摄天花板的图像将包含标记.该软件需要检测单个标记并确定它已旋转170度.

天花板箭头

我没有图像分析的经验.我知道图像处理是一个相当广泛的主题,并希望得到一些建议,我应该采取哪种方向,哪种技术最适合我的应用.谢谢!

Jac*_*cob 3

我推荐 MATLAB,或者如果您打算使用 C#,Emgu CV非常好。

霍夫变换是个好主意。一旦使用Canny 边缘检测器检测图像中的边缘,您就会得到边缘图像(这是只有 1 或 0 值的二值图像)。

然后,霍夫直线变换(本质上)使用线的参数化函数围绕边缘图像中的每个白色像素旋转一条线(线的分辨率取决于您),并计算白色的总数(值为 1)沿着每条旋转线的像素,并将这些信息存储在一个大累加器中,该累加器存储由线参数索引的数据。

替代文本 http://upload.wikimedia.org/wikipedia/en/a/af/Hough_space_plot_example.png

在上面的示例中,直线的参数形式为:

rho = x*cos(theta) + y*sin(theta)
Run Code Online (Sandbox Code Playgroud)

其中 rho 是距离,theta 是角度

正如您所看到的,如果您以特定方向查看垃圾箱,您可以找出有多少条线以该角度定向。当然,您必须做一些额外的工作来找出哪些线以该角度定向,因为每个箭头还有 5 条其他线,但这应该不会太难。