【问题标题】:Add noise to the frame using Polar Method in C使用 C 中的 Polar 方法向帧添加噪声
【发布时间】:2019-02-05 15:19:20
【问题描述】:

我编写了一个程序,它可以读取原始 YUV 文件并将均值为 0 的高斯噪声添加到修改后的文件中。 问题是我不知道如何在 main 函数上实现 Polar 函数,当我尝试它时总是会产生错误。 任何人都有任何想法来解决我的问题。 谢谢

void polar(double *x1, double *x2)
{
   double u, v, q, p;

   do {
      u = 2.0 * random() - 1;
      v = 2.0 * random() - 1;
      q  = u * u + v * v;
   } while (q >= 1.0 || q == 0.0);

   p = sqrt(-2 * log(q) / q);
   *x1 = u * p;
   *x2 = v * p;
}

int main(void) 
{
    FILE *fp1, *fp2;
    int a;
    double a1,a2;
    fp1= fopen("FOOTBALL_352x288_30_orig_01.yuv","rb");
    fp2= fopen("FOOTBALL_352x288_30_orig_02.yuv","wb");


    int tab[10]="";

    while(!feof(fp1))
    {
        fread(tab,sizeof(int),1,fp1);
        fwrite(tab,sizeof(int),1,fp2);
    }      

    fclose(fp1);
    fclose(fp2);

    return 0;
}

【问题讨论】:

  • 你没有在代码中的任何地方调用polar
  • 当前您将 OOTBALL_352x288_30_orig_01.yuv 复制到 FOOTBALL_352x288_30_orig_02.yuv 中,假设输入文件包含 int 的二进制表示)。我鼓励你不要使用 feof 而是检查 fread 的结果
  • 问题是我不知道在哪里以及如何调用polar 代码
  • 问题是我们不知道你想做什么以及文件包含什么。还要注意您阅读 int (来自二进制)和 polar 使用 float
  • 我要做的是从 YUV 视频序列中读取帧并向帧添加噪声(均值为 0 的高斯噪声)。使用来自 ftp.tnt.uni-hannover.de/pub/svc/testsequencesFOOTBALL_352x288_30_orig_01_yuv 的 YUV 序列(352x288 像素, 30Hz 帧率, 4:2:0)

标签: c video encoding frame yuv


【解决方案1】:

polar 函数需要两个 double 的地址作为输入。如果你声明 a1a2 被传递到极坐标中,你可以调用 polar(&a1, &a2)polar 函数将在它返回时设置 a1a2。要检查这一点,请尝试在调用 polar 函数之前和之后打印这些变量。

【讨论】:

  • 问题不在这里^^
  • 来自问题:“问题是我不知道如何在 main 函数上实现 Polar 函数”。这个答案描述了如何从主函数中调用极坐标函数。
  • 你不明白,OP 不知道如何读取 YUV 文件,你说 give floats 地址,你没有说这些浮动来自哪里/如何来自
  • 这些变量来自哪里是无关紧要的,只要它们被正确分配(它们是因为它们驻留在主框架上)。 polar 函数不使用也不关心双精度数的初始值。无论如何,它都会覆盖这些值。
猜你喜欢
  • 2017-10-30
  • 2014-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-05
  • 2018-03-05
  • 2016-06-29
  • 1970-01-01
相关资源
最近更新 更多