【问题标题】:Antiderivatives in CC中的反衍生物
【发布时间】:2012-04-07 18:59:22
【问题描述】:

我正在尝试创建一个实现氡变换算法的 c 程序。我知道对于图像 f(x,y) 是 g(phi,s) 的集合,phi 是图像的随机变换,其中 g(phi,s) 定义为:

现在,我对 C 语言没有太多经验,我总是使用带有 Java 和 C# 的外部库来执行复杂的数学运算。我很难为 c 找到一个,我也很难创建一个函数来做到这一点,我一直在研究数值积分,但这是针对定积分的。任何帮助将不胜感激

【问题讨论】:

  • 不定积分的规则与定积分的规则相同。你最终会得到一个表达式而不是一个数字。 :)
  • math.stackexchange.com 的人可能会对此提供更好的见解

标签: c integral numerical-integration


【解决方案1】:

免责声明:可能存在图像处理社区已知的 Radon 变换的专门实现。我不知道那些,我只是把这个问题当作一个集成问题来处理。我看到例如。 http://takinginitiative.net/2008/04/02/radon-transform-c-implementation-update/ 可能有一些特定的方法可以计算图像的 Radon 变换。

你在这里真正做的是一个沿直线的一维积分。参见维基百科文章http://en.wikipedia.org/wiki/Radon_transform中的第4个公式。

如果您在图像上执行此操作,则用于计算积分的方法将完全取决于您选择的插值。如果您使用双线性插值,那么简单(自适应)梯形规则可能会给您带来很好的结果。

如需帮助您的 C 库,您可以查看GNU Scientific Library

【讨论】:

    【解决方案2】:

    一般来说,不要依赖您的手写代码来解决这类问题,这些问题在某些情况下非常复杂,必须经过测试和强调。如果你在 C Gnu 科学库中编程可以帮助你进行积分计算。

    【讨论】:

      【解决方案3】:

      要计算g(phi,s),您至少可以尝试最基本的求和。

      首先,对给定的y 和图像的所有x 使用一些小步骤dx 总结f(x,y) * delta(x*sin(phi) - y*cos(phi) - s) * dx。这是x 中的一个循环。然后使用一些小步骤dy 对图像的所有y 重复上述操作。这是另一个循环,在y。哦,别忘了乘以dy。因此,yx 有两个嵌套循环,在里面你总结了 f(x,y) * delta(x*sin(phi) - y*cos(phi) - s) * dx * dy,例如像这样:

      #include <math.h>
      #include <assert.h>
      
      double g(double phi, double s, double xmin, double xmax, double dx, double ymin, double ymax, double dy)
      {
        double x, y, sum;
      
        assert(xmin <= xmax && dx > 0);
        assert(ymin <= ymax && dy > 0);
      
        sum = 0;
      
        for (y = ymin; y <= ymax; y += dy)
          for (x = xmin; x <= xmax; x += dx)
            sum += f(x,y) * delta(x*sin(phi) - y*cos(phi) - s) * dx * dy;
      
        return sum;
      }
      

      您只需要定义f()返回图像数据和delta()并选择合​​适的dxdy(不要太大,也不要太小)。这应该会给你一些初步的结果。

      【讨论】:

      • @AlexandreC.: 选择足够小的 dx 和 dy 怎么样?顺便说一句,我们在谈论什么样的三角洲?狄拉克三角函数还是别的什么?
      • 积分真的是一维的,因为狄拉克函数。
      • @AlexandreC.:但是 f(),图像,是二维的。 OTOH,如果您对给定的输入遵循 delta() 的“非零”值,那么 ues 就是 1d。
      • 氡变换是 f 在一条直线上的积分。具有狄拉克函数的公式对于计算并不是真正有用的。
      猜你喜欢
      • 2010-09-30
      • 2012-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 2018-12-08
      • 2019-07-08
      相关资源
      最近更新 更多