识别规则网格中的扭曲
Posted
技术标签:
【中文标题】识别规则网格中的扭曲【英文标题】:Recognizing distortions in a regular grid 【发布时间】:2011-06-22 12:27:57 【问题描述】:为您提供一些关于我正在做的事情的背景知识:我正在尝试通过图像分析定量记录可压缩流体的流动变化。做到这一点的一种方法是利用流体的折射率与其密度直接相关的事实。如果您在流动后面设置某种图像,由于整个流体场中的折射率变化而导致的图像失真会导致您产生密度梯度,这有助于表征流动模式。
我有一组例程可以使用常规的 2D 点图案成功完成此操作。点阵图略有扭曲,通过对比点在扭曲图像和未扭曲图像中的位置,我得到了一个位移场,这正是我所需要的。这种方法的问题是分辨率。分辨率受限于字段中的点数,我正在探索能够提供更多数据的方法。
我的一个想法是使用水平和垂直线的规则网格。这个图像会以同样的方式扭曲,但不是只得到一个点的位移,而是网格的连续扭曲。似乎必须有一些标准的算法或程序来将一个几何网格与另一个几何网格进行比较并推断出某种位移场。尽管如此,我在研究中还没有发现类似的东西。
有没有人有一些想法可以为我指明正确的方向?仅供参考,我不是计算机科学家——我是工程师。我这么说只是因为我可能因为来自不同的领域而忽略了一些明显的方法。但我会编程。我正在使用 MATLAB,但我可以阅读 Python、C/C++ 等。
以下是我正在使用的图像类型的示例:
Regular: Distorted:
--------
【问题讨论】:
看看这个(商业)软件correlatedsolutions.com/index.php/home 【参考方案1】:我认为您正在寻找Digital Image Correlation 算法。
Here you can see a demo.
Here is a Matlab Implementation.
来自***:
数字图像关联和跟踪 (DIC/DDIT) 是一种光学方法,它采用跟踪和图像配准技术对图像变化进行准确的 2D 和 3D 测量。这通常用于测量变形(工程)、位移和应变,但它广泛应用于科学和工程的许多领域。
编辑
在这里,我使用 Mathematica
将 DIC 算法应用于您的失真图像,显示了相对位移。
编辑
您还可以轻松识别最大位移区域:
编辑
经过一些工作(坦率地说,相当多),你可以想出这样的东西,代表“位移场”,清楚地表明你正在处理一个漩涡:
(更暗和更大的箭头表示更大的位移(速度))
如果您对这个 Mathematica 代码感兴趣,请给我留言。我认为我的代码不会帮助其他任何人,所以我省略了发布它。
【讨论】:
这太棒了,我认为正是我需要的。感谢您的快速回答和热烈的欢迎! @belisarius 很高兴能提供更多关于您所做的详细信息(直到最后一个数字,速度场):-) @Szabolcs 不是真正的“速度”,只是位移。无论如何,这很棘手,因为网格变形需要一些工作才能确定哪个源点最终在哪里。最后,边缘没有变形的事实是关键。我会看看我是否为后代保存了源代码(:)),如果不让我脸红,我会在这里发布【参考方案2】:我还建议使用线路跟踪算法。
只需从图像的第一条像素线开始,然后开始沿着每条垂直线向下(您只需从第一条线开始即可获得起点。这可以通过正交移动的简单模式来完成到那条线的梯度,ergo 跟随一条线。当您到达一条水平线的交叉点时,您可以测量该点(在 x,y 坐标中)并将其与失真图像中的相应交叉点进行比较。
由于您的网格是规则的,您知道第 m 个垂直黑线上的第 n 个测量交叉点在两个图像中都是对应的。然后,您只需通过计算它们的距离来比较两个点。对网格上的每条线执行此操作,您将得到网格的每个交叉点扭曲的程度。
这种沿线算法也用于基本的边缘链接算法或 Canny 边缘检测器。
(所有这些都只是理论上的想法,我无法为您提供算法。但我想它应该可以轻松处理像您那里那样的扭曲图像......但也许它对您有帮助)
【讨论】:
以上是关于识别规则网格中的扭曲的主要内容,如果未能解决你的问题,请参考以下文章