动态规划

1,本文主要对一个二维的图像数据做动态规划
此函数为每次处理一行或是一列的函数

/*********************************************************
src 输入图像的一行数据的指针 
des 输出动态规划后的结果
ptr 动态规划后的行索引
step 行数据为1
n 每行的数据量 即图像的宽度
a 
b 
函数 ax2 + bx
range 动态规划的左右偏移
v prt 的临时变量
z 临时变量,交点值大小为宽度 + 1
*************************************************************/


void dynamicPlan(const float *src, float *dst, int *ptr, 
          int step, int n, float a, float b, float range,
          int *v, float *z) 
{
  int k     = 0;  
  v[0]      = 0; 
  z[0]      = -10000.0f;
  z[1]      = +10000.0f;
  float eps = 0.00001f;
  float a_inv = 1/a;

  for (int q = 1; q <= n-1; q++) 
  {
      float s = 0.5f * ((src[q*step] - src[v[k]*step]) / ((-a) * (q - v[k]))  + q + v[k]  - b * a_inv);


    s = min(v[k]+range+eps, max(q-range-eps, s));
    while (s <= z[k]) 
    {
      k--;
      s = 0.5f * ((src[q*step] - src[v[k]*step]) / ((-a) * (q - v[k])) 
                  + q + v[k] 
                  - b * a_inv);
      s = min(v[k]+range+eps, max(q-range-eps, s));
    }
    k++;
    v[k]   = q;
    z[k]   = s;

  }
  z[k+1] = 10000.0f;

  k = 0;
  for (int q = 0; q <= n-1; q++) 
  {
    while (z[k+1] < q)
      k++;
    dst[q*step] = a*(q-v[k])*(q-v[k]) + b*(q-v[k]) + src[v[k]*step];
    ptr[q*step] = v[k];
  }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值