我编写了一个程序,可以读取原始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函数之前和之后尝试打印这些变量。