我编写了一个程序,可以读取原始YUV文件,并将平均值为0的高斯噪声添加到修改后的噪声中。
问题是,当我尝试始终产生错误时,我不知道如何在主要功能上实现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函数期望将两个双精度地址作为输入。如果您声明将a1和a2传递给Polar,则可以调用polar(&a1,&a2)。极坐标函数将在返回时设置a1和a2。要检查这一点,请在调用Polar函数之前和之后尝试打印这些变量。

09-25 21:27