碰撞检测算法 - 圆柱体内的图像 [关闭]
Posted
技术标签:
【中文标题】碰撞检测算法 - 圆柱体内的图像 [关闭]【英文标题】:Collision detection algorithm - Image inside a cylinder [closed] 【发布时间】:2015-12-07 21:08:53 【问题描述】:我用圆柱体内的相机拍摄图像。我想检测是否由于外部碰撞而导致变形。我还想检测碰撞发生在哪一侧。圆柱体内的图像有很多点,形成一个网格。哪种方法更好?
检测碰撞的一种简单方法是在不与真实图像发生碰撞的情况下减去图像。如果结果不是“零”,则说明发生了一些变化,很可能发生了碰撞。但这并不能告诉我圆柱体的哪一侧变形。
我已经尝试过对平面上的点进行投影,但我做不到。
在此链接中,您可以找到我关于投影问题的问题帖子:Projection of a image from inside a cylinder to a plane 2D [Matlab]
在该链接中,您可以看到有关此问题的所有信息。
一个想法是在图像中使用区域道具,并查看图像的哪个部分变形,但我想做一些更复杂的事情。我想测量变形,以了解它在撞击过程中变形了多少。这就是为什么我考虑在平面上做一些投影并测量点变形的距离的原因。你有什么想法以更简单的方式做到这一点吗?我该怎么做呢
有人可以帮帮我吗?
【问题讨论】:
我已经编辑了问题,请打开我的主题 【参考方案1】:这里有一些小代码/伪代码可以提供帮助。一句话:
我会减去之前和之后的图像,然后取差值图像的绝对值。然后,我会有某种阈值来判断差异是否只是由于噪声的变化而不是真正的变化。接下来我找到质心(由差异大小加权),这可以通过图像处理工具箱(regionprops)轻松完成。变化的质心可以很好地估计“碰撞”发生的位置,即圆柱体的变形
所以这应该是这样的:
diffIm = abs(originalIm - afterIm)
threshold = someNumber
diffIm = diffIm(diffIm>threshold)
%Tell regionprops that the whole image is one region by passing it a array of ones the size of the image, and diffIm as the measurment image
props = regionprops(ones(size(diffIm)),diffIm,'WeightedCentroid')
%WeightedCentroid is the center of mass, and it is weighted by the grayscale image diffIm
您现在有了图像空间中变形质心的位置,您只需要一张将其转换为圆柱空间的地图(如果需要),否则您可以将质心绘制在原始图像上以获得代码预期发生碰撞的位置的可视化输出。
另一方面,如果您可以控制实验设置,我希望棋盘图案会比点提供更好的结果(因为点的间距很大,如果碰撞只影响您的空白可能根本无法检测到它)。棋盘格意味着你的边缘比可以移动的多,这是无论如何都会被检测到的首当其冲的。如果您仍在尝试将棋盘映射到平面,则棋盘也可能更容易映射,因为您可以知道所有边要么平行,要么以直角相交,并且间隔均匀。
【讨论】:
抱歉这么晚才回答,这周我遇到了一些麻烦。这是一个好主意,它应该工作。但我想做一些更复杂的事情。我想测量变形,以了解它在撞击过程中变形了多少。这就是为什么我考虑在平面上做一些投影并测量点变形的距离的原因。你有什么想法以更简单的方式做到这一点吗?我该怎么做?以上是关于碰撞检测算法 - 圆柱体内的图像 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章