c# – 快速子像素激光点检测

前端之家收集整理的这篇文章主要介绍了c# – 快速子像素激光点检测前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用XNA建立一个项目,我可以使用LCD投影机和单色相机在墙上绘制“涂鸦”,该照相机被过滤,只能看到手持激光点指针.我想使用任何数量的激光笔 – 在这一点上并不关心区分它们.

墙壁是10’x 10′,相机只有640×480,所以我试图使用子像素测量使用样条曲线,如下所示:tpub.com

相机以120fps(8位)运行,所以我的问题是您找到该子像素激光点中心的最快方法.目前,在进行样条插值之前,我正在使用强力2D搜索来找到图像上最亮的像素(0 – 254).这种方法不是很快,每个框架比计算机花费更长的时间.

编辑:为了澄清,最后我的相机数据由表示像素亮度的二维字节数组表示.

我想做的是使用XNA着色器来缩小图像.这是否实用?从我所理解的,真正没有办法在像素着色器中保持持久变量,例如运行总计,平均值等.

但是为了争论的缘故,我们假设我使用暴力找到最亮的像素,然后使用texcoords将它们和它们的样条曲线的相邻像素存储为X个顶点.使用HLSL可以使用texcoords来计算样条曲线吗?

我也可以在我的XNA框外提出建议,无论是DX10 / DX11,也许某种FPGA等.我只是没有太多的经验,以这种方式来处理数据.我想,如果他们可以使用2节AA电池在Wii-Mote上做这样的事情,那我可能就这样做错了.

有任何想法吗?

解决方法

如果您想要亚像素精度,您正在处理一些非常复杂的数学问题.我认为 this paper是值得考虑的.不幸的是,您必须付费才能使用该网站查看.如果您有权访问一个合适的图书馆,他们可能会为您保留.

原始帖子中的链接建议对每个轴进行1000次样条计算 – 它独立地处理x和y,这对于圆形图像是好的,但是如果图像是偏斜的椭圆,则有点偏离.您可以使用以下内容获得合理估计:

xc = sum(xn.f(xn))/ sum(f(xn))

其中xc是平均值,xn是沿x轴的一个点,f(xn)是xn点处的值.所以为此:

*
       *  *
       *  *
       *  *
       *  *
       *  *
       *  *  *
    *  *  *  *
    *  *  *  *
 *  *  *  *  *  *
------------------
 2  3  4  5  6  7

得到:

sum(xn.f(xn))= 1 * 2 3 * 3 4 * 9 5 * 10 6 * 4 7 * 1

和(f(xn))= 1 3 9 10 4 1

xc = 128/28 = 4.57

并为y轴重复.

猜你在找的C#相关文章