General:我希望我将要描述的用例是光流问题的简单案例,由于我对这个问题不太了解,我想知道是否有人对我如何解决我的问题有任何建议。
我已经做过的研究:,我已经开始阅读基于翘曲理论的高精度光流估计的论文,并计划查看粒子视频的论文。我已经找到了一个MATLAB 高精度光流实现的光流。然而,论文(和代码)似乎描述了非常复杂的概念,可能需要大量的时间来深入研究和理解。我希望我的问题的解决办法可能会更简单。
问题:--我有一系列的图像。这些图像描述了一个材料破碎过程,材料和背景是黑色的,裂纹是白色的。我感兴趣的是反向遍历图像序列,试图将在破碎过程中形成的所有裂缝映射到第一个黑色图像。你可以把这些材料想象成一个很大的谜题,我正试着把这些碎片按相反的顺序组合起来,使之断裂。
在每个图像中,都可能出现一些裂缝和/或一些已经完全形成的裂缝(从而创建了一个碎片)。在整个破碎过程中,一些碎片可能会进一步分离和断裂。碎片也可以彼此之间移动得更远(随后的帧之间变化很小)。
所需的输出:序列中映射到序列中的第一个图像的所有裂缝/线条。
附加注释:图像有灰度格式(即原始格式)和二进制格式,其中裂缝已经用白色勾画,背景完全是黑色的。见下面的一些图像示例。






上一行显示原始图像,下一行显示二进制图像。正如你所看到的,随着图像序列的进展,沿着中间的裂缝越来越宽。因此,底部裂纹与较低的碎片一起移动。当反向遍历该序列时,我希望算法上认识到中间裂纹是一个整体(并将其正确映射到第一个图像),也希望正确地映射底部裂缝,保持其与底部碎片的正确对应(大小和位置)。
一个序列通常包含大约30~40幅图像,所以我刚刚展示了开始子集。另外,虽然这些图像没有显示出来,但有可能某个特定的图像只包含裂缝的开始(即它的初始外观),而在随后的图像中,它会变得越来越长,并可能与其他裂缝结合。
语言:虽然不是必要的,但我想使用MATLAB实现解决方案(仅仅因为与项目相关的大多数其他代码都是在MATLAB中完成的)。然而,如果OpenCV可能更容易,我在语言/库的使用上是灵活的。
任何想法都会受到极大的赞赏。
发布于 2011-06-13 08:35:19
向前移动而不是反向移动,不要使用光流。使用断裂线分割黑色部分,跟踪每个黑色部分的质心随时间的推移。每当一条新的断裂线出现,穿过一个黑色的部分,分割成两段,并继续跟踪每一段分开。
由此,您应该能够构造一个树结构,表示黑色部分随时间的分段。断裂线可以作为元数据添加到这棵树中,也许可以将断裂线分配给它们最初出现的节节点。
发布于 2013-08-01 16:14:40
我建议你遵循你最初的想法回溯裂缝。哟,你知道裂缝是什么样子的,所以你可以追踪所有属于裂缝的点。你只要用光流跟踪器跟踪所有的白点,从Lukas-Kanade跟踪器开始,看看你从哪里得到。高精度光流法是一种全局的方法,我将跟踪图像中的所有像素,试图在任何地方保持一些平滑性。LK是一种局部方法,它只使用每个点周围的一个小窗口来进行跟踪。问题是,从裂缝中分离出来的所有像素都是纯黑色的,所以没有什么可以跟踪的,你只能在腰部时间去追踪一些你无法追踪,也不需要追踪的东西。如果直线非常直,你可能会得到所谓的孔径问题,你会得到不准确的结果。你也可以在蛇的基础上尝试一些形状拟合/变形。
发布于 2015-11-16 22:23:35
我同意达米安。大多数光流方法,如HAOF,依赖于强度恒定方程I(x,t)=I(x+v,t+dt)的一阶泰勒近似。这意味着解依赖于图像导数,其中梯度决定了运动矢量、幅度和角度,也就是说,你需要一定数量的纹理。然而,非常低的纹理,你的非二值化图像可能是足够的。您可以尝试直方图均衡化来增加输入数据的对比度,但是对两幅输入图像应用相同的转换是很重要的。例如:
cv::Mat equalizeMat(grayInp1.rows, grayInp1.cols * 2 , CV_8UC1);
grayInp1.copyTo(equalizeMat(cv::Rect(0,0,grayInp1.cols,grayInp1.rows)));
grayInp2.copyTo(equalizeMat(cv::Rect(grayInp1.cols,0,grayInp2.cols,grayInp2.rows)));
cv::equalizeHist(equalizeMat,equalizeMat);
equalizeMat(cv::Rect(0,0,grayInp1.cols,grayInp1.rows)).copyTo(grayInp1);
equalizeMat(cv::Rect(grayInp1.cols,0,grayInp2.cols,grayInp2.rows)).copyTo(grayInp2);
// estimate optical flowhttps://stackoverflow.com/questions/6141606
复制相似问题