识别常规网格中的扭曲

时间:2011-02-07 03:41:37

标签: algorithm image matlab image-processing image-recognition

为了给你一些关于我正在做什么的背景:我试图通过图像分析定量记录可压缩流体的流量变化。一种方法是利用流体的折射率与其密度直接相关的事实。如果在流动后面设置某种图像,由于折射率在整个流场中的变化导致的图像失真会导致密度梯度,这有助于表征流动模式。

我有一组例程,可以使用常规的2D点图案成功完成此操作。点图案稍微扭曲,通过比较失真图像中的点与非失真图像中的点的位置,我得到一个置换场,这正是我需要的。这种方法的问题是解决方案。分辨率仅限于字段中的点数,我正在探索能够提供更多数据的方法。

我有一个想法是使用水平和垂直线的常规网格。这个图像会以同样的方式扭曲,但不是只得到一个点的位移,我将有一个网格的连续失真。似乎必须有一些标准的算法或程序来比较一个几何网格和另一个几何网格并推断某种位移场。尽管如此,我的研究中还没有找到这样的东西。

有没有人有一些想法可能会指出我正确的方向?仅供参考,我不是计算机科学家 - 我是工程师。我之所以这么说,只是因为来自不同的领域,我可能会忽略一些明显的方法。但我可以编程。我正在使用MATLAB,但我可以阅读Python,C / C ++等。

以下是我正在使用的图像类型的示例:

     Regular:                               Distorted: 

enter image description here {-------- {0}}

2 个答案:

答案 0 :(得分:19)

我认为您正在寻找Digital Image Correlation算法。

Here you can see a demo.

Here is a Matlab Implementation.

来自维基百科:

  

数字图像相关和跟踪(DIC / DDIT)是一种采用跟踪和跟踪的光学方法。图像配准技术,用于精确的2D和3D图像变化测量。这通常用于测量变形(工程),位移和应变,但它广泛应用于科学和工程的许多领域。

编辑

在这里,我使用Mathematica将DIC算法应用于失真图像,显示相对位移。

enter image description here

修改

您也可以轻松识别最大位移区域:

enter image description here

修改

经过一些工作(坦白地说),你可以做出类似这样的事情,代表“置换场”,清楚地表明你正在处理一个漩涡:

enter image description here

(较暗和较大的箭头表示更多的位移(速度))

如果您对此Mathematica代码感兴趣,请发表评论。我认为我的代码不会帮助其他任何人,所以我省略了发布它。

答案 1 :(得分:1)

我还建议使用线跟踪算法。

只需从图像的第一个像素线开始,然后开始向下跟随每条垂直线(您只需要在第一行开始这一点以获得起点。这可以通过一个正交移动的简单模式来完成对于该线的渐变,ergo跟随一条线。当您到达水平线的交叉点时,您可以测量该点(在x,y坐标中)并将其与扭曲图像中的相应交叉点进行比较。

由于您的网格是规则的,您知道第m个垂直黑线上的第n个测量交叉点在两个图像中都是对应的。然后,您只需通过计算它们的距离来比较两个点。对网格上的每一行执行此操作,您将得到网格的每个交叉点扭曲的距离。

以下线性算法也用于基本边缘链接算法或Canny边缘检测器。

(所有这些只是理论上的想法,我无法为你提供算法。但我想它应该可以很容易地在扭曲的图像上工作,就像你在那里......但也许它对你有帮助)