| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 912 人关注过本帖
标题:求助。。我编的程序运行时遇到未知错误,怎么改啊,谢谢众高手们了
只看楼主 加入收藏
bluesmile
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-4-18
结帖率:0
收藏
已结贴  问题点数:20 回复次数:12 
求助。。我编的程序运行时遇到未知错误,怎么改啊,谢谢众高手们了
#include <stdio.h>
#include <math.h>
#include <time.h>
#include <stdlib.h>
#define n (pow(2,31)-1)
#define PI 3.14159   
void read()//读取20幅图像
{
    int i,j,k;
    double buf[20][1024][1024]={0},buf1[1][1024][1024]={0};
    double mean[1][1024][1024]={0},squaremean[1][1024][1024]={0},D_ImageMat[1][1024][1024]={0};
    double ImageMat[1024][1024]={0},DImageMat[1024][1024]={0};
    FILE *fp;
    for (i=0;i<20;i++)    //按图片的名字依次打开
    {
        char filename[50];
        sprintf(filename,"imag_%d",i+1);
        fp=fopen(filename,"r") ;
        fread(buf,1,1024*1024,fp);    //    ImageMat(m,:,:)=fread(handle,[1024,1024],'uint16=>single');
    }           //打开了20 幅图片,并且分别写入20个数组里面
    for (i=0;i<1024;i++)
    {
        for (j=0;j<1024;j++)
        {
            for (k=0;k<20;k++)
            {
                buf1[1][i][j]=buf1[1][i][j]+buf[k][1024][1024];
            }
        }
    }             //把20个数组中对应的像素中每个值都加起来
    for (i=0;i<1024;i++)
    {
        for (j=0;j<1024;j++)
        {
            ImageMat[i][j]=ImageMat[i][j]+buf1[1][i][j];
        }
    }            //因为已经相当于一幅图,所以把三维数组变成二维数组。
    /////--------------求平均数-------------ImageMat[1024][1024]用于存放像素的平均数
        for (i=0;i<1024;i++)
    {
        for (j=0;j<1024;j++)
        {
            ImageMat[i][j]=ImageMat[i][j]/20;
        }
    }
    /////--------------求标准差---------------DImageMat[1024][1024]用于存放像素的标准差
    for (i=0;i<1024;i++)
    {
        for (j=0;j<1024;j++)
        {
            for (k=0;k<20;k++)
            {
                mean[1][i][j]=(mean[1][i][j]+buf[k][i][j])/20;
                squaremean[1][i][j]=(squaremean[1][i][j]+buf[k][i][j]*buf[k][i][j])/20;
                D_ImageMat[1][i][j]=sqrt(squaremean[1][i][j]-mean[1][i][j]*mean[1][i][j]);
            }
        }
    }

    for (i=0;i<1024;i++)
    {
        for (j=0;j<1024;j++)
        {
            DImageMat[i][j]=DImageMat[i][j]+D_ImageMat[1][i][j];
        }
    }

}

void FixedPatternNoise(double ImageMat[1024][1024],double DImageMat[1024][1024])//求固定模式噪声
{
    int i,j,k;
    int total=0;
    double sum=0.0,mDark,vDark;
    for (i=0;i<1024;i++)//----求全图的平均数----
    {
        for (j=0;j<1024;j++)
        {
            sum=sum+ImageMat[i][j];
        }
    }
    mDark=sum/(1024*1024);
               //------求全图的标准差-----
    sum=0.0;
        for (i=0;i<1024;i++)
    {
        for (j=0;j<1024;j++)
        {
            sum=sum+DImageMat[i][j]*DImageMat[i][j];
        }
    }
        vDark=(sqrt(sum))/1024;


//---剔除粗大误差(或 坏点,奇点噪声),并用均值替换---

        for (i=0;i<1024;i++)
    {
        for (j=0;j<1024;j++)
        {
            if(fabs(ImageMat[i][j]-mDark)>6*vDark)//有大于6倍标准差的,统计个数
                total++;
        }
    }
            //----求去除粗大误差之后的固定模式噪声的均值和标准差----

for (k=1;k<=total;k++)
{
        sum=0.0;
        for (i=0;i<1024;i++)
    {
        for (j=0;j<1024;j++)
        {
            if(fabs(ImageMat[i][j]-mDark)>6*vDark)
                ImageMat[i][j]=mDark;//大于6倍标准差的,用均值替换

        }

    }
            sum=sum+ImageMat[i][j];
            mDark=sum/(1024*1024);//替换后的均值

            sum=0.0;
            for (i=0;i<1024;i++)
        {
            for (j=0;j<1024;j++)
                sum=(sum+ImageMat[i][j]*ImageMat[i][j])/(1024*1024);
        }
                vDark=sqrt(sum-mDark*mDark);//替换后的标准差

            for(i=0;i<1024;i++)//再统计有超过6倍标准差的个数
            {
                for(j=0;j<1024;j++)
                {
                    if (fabs(ImageMat[i][j]-mDark)>6*vDark)
                    total++;
                }

            }
                        if(total=0)//当没有超过6倍标准差的时候,停止循环
                break;
}

}

//---------------生成对数正态分布随机数--------------------
double AverageRandom(double min,double max)//产生(min,max)之间均匀分布的随机数
 {         
    int MINnteger = (int)(min*10000);
    int MAXnteger = (int)(max*10000);
    int randInteger = rand()*rand();
    int diffInteger = MAXnteger - MINnteger;
    int resultInteger = randInteger % diffInteger + MINnteger;
    return resultInteger/10000.0;
 }
 double LogNormal(double x,double miu,double sigma)
     //对数正态分布概率密度函数
 {
     return 1.0/(x*sqrt(2*PI)*sigma) * exp(-1*(log(x)-miu)*(log(x)-miu)/(2*sigma*sigma));
 }
 double Random_LogNormal(double miu,double sigma,double min,double max)//产生对数正态分布随机数
 {
     double x;
     double dScope;
     double y;
     do
     {
         x = AverageRandom(min,max);
         y = LogNormal(x, miu, sigma);
         dScope = AverageRandom(0, LogNormal(miu,miu,sigma));
     }
     while( dScope > y);
     return x;
 }
 //---------------生成正态分布随机数--------------------
double grn1(double u,double g,double *r)
{
    int i,m;
    double s,w,v,t;
    s=65536.0;
    w=2053.0;
    v=13849.0;
    t=0.0;
    for (i=1; i<=12; i++)
    {
        *r=(*r)*w+v; m=(int)(*r/s);
        *r=*r-m*s; t=t+(*r)/s;
      }
    t=u+g*(t-6.0);
    return(t);
}
//------------固定模式噪声上附着的白噪声--------------------
double StdWhiteNoiseOnFPN(double ImageMat[1024][1024])
{
    int i,j,k,total=0;
    double StdWhiteNoiseOnFPN1,DImageMat[1024][1024],sum=0.0;
    for (i=0;i<1024;i++)
    {
        for (j=0;j<1024;j++)
        {
            sum=sum+DImageMat[i][j]*DImageMat[i][j];
        }
    }
    StdWhiteNoiseOnFPN1=(sqrt(sum))/1024;//全图的标准差
    for(k=0;k<total;k++)
    {
        for (i=0;i<1024;i++)
        {
            for (j=0;j<1024;j++)
            {
                if (DImageMat[i][j]>6*StdWhiteNoiseOnFPN1)
                    DImageMat[i][j]=StdWhiteNoiseOnFPN1;
                total++;
            }
        }
        sum=0.0;
            for (i=0;i<1024;i++)
        {
            for (j=0;j<1024;j++)
                sum=sum+DImageMat[i][j]*DImageMat[i][j];
        }
        StdWhiteNoiseOnFPN1=(sqrt(sum))/1024;
                if (DImageMat[i][j]>6*StdWhiteNoiseOnFPN1)
                    total++;
                if(total=0)
                    break;
    }
    return StdWhiteNoiseOnFPN1;
}


void Poission(double m,double b[1024*1024])//生成泊松分布随机数
{
    int i;
    double z[1024*1024];
    z[0]=m;
    for(i=1;i<1024*1024;i++)
    {    z[i]=fmod((16807*z[i-1]),n);
         b[i]=z[i]/n;   
    }     
    b[0]=m/n;
}

void main()
{
    int i,j;
    int FPNplusWN[1024][1024]={0};
    double mu,sigma,*r;
    double mDark=0,vDark=0,StdWhiteNoiseOnFPN2;
    double ImageMat[1024][1024]={0},DImageMat[1024][1024]={0};
    double SimFPN[1024][1024]={0},WhiteNoiseOnFPN[1024][1024]={0};
    int RadDose=50,Bth=10,T=200,lambda[1024][1024]={0},RadDoseNoise[1024][1024];
    double k1=1.25,k2=0.125;
    double a[1024][1024];
    double b;
    double c[1024*1024];
    int d[1024*1024];
    int k=0;
    read();
    FixedPatternNoise(ImageMat,DImageMat);
    mu = log((mDark*mDark)/sqrt(vDark+mDark*mDark));
    sigma = sqrt(log(vDark/(mDark*mDark)+1));
    for(i=0;i<=1024;i++)
    {
        for(j=0;j<=1024;j++)
            SimFPN[i][j]=Random_LogNormal(mu,sigma,mu-3*sigma,mu+3*sigma);//调用对数正态分布生成的随机数
    }
    StdWhiteNoiseOnFPN2=StdWhiteNoiseOnFPN(ImageMat);
    mu=0;
    sigma=StdWhiteNoiseOnFPN2;
    for(i=0;i<=1024;i++)
    {
        for(j=0;j<=1024;j++)
            WhiteNoiseOnFPN[i][j]=grn1(mu,sigma*sigma,r);//调用正态分布生成的随机数
    }
    for(i=0;i<1024;i++)
    {
        for(j=0;j<1024;j++)
            FPNplusWN[i][j]=SimFPN[i][j]+WhiteNoiseOnFPN[i][j];
    }
    /////////////
        for(i=0;i<=1024;i++)
        {
        for(j=0;j<=1024;j++)
        lambda[i][j]=(RadDose-Bth)*(k1+k2*(SimFPN[i][j]-mDark));
        a[i][j]=exp(-lambda[i][j]);
        }

        for(i=0;i<1024*1024;i++)                  
    {   
        b=1;
        Poission(i*123456789000,c);            //调用子函数
        for(j=0;j<1024*1024;j++)
        {
            b=b*c[j];
         if(b<a[i][j])
         {
             d[k++]=j;                      //产生poisson
             break;
         }
        }
    }
        k=0;
        for(i=0;i<1024;i++)
        {
            for(j=0;j<1024;j++)
            {
        RadDoseNoise[i][j]=d[k];
            k++;
            }
        }
}
搜索更多相关主题的帖子: include double 
2013-04-18 09:55
bluesmile
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-4-18
收藏
得分:0 
有人在吗,求求大家了。。。
2013-04-18 09:56
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:2 
这么长,你让大家怎么帮你呀?先自己调试缩小范围

总有那身价贱的人给作业贴回复完整的代码
2013-04-18 10:01
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:2 
慢慢debug吧,学会自己排除故障,这程序确实太长了

三十年河东,三十年河西,莫欺少年穷!
2013-04-18 10:52
神龛中的幽灵
Rank: 1
等 级:新手上路
帖 子:8
专家分:5
注 册:2013-3-10
收藏
得分:2 
编译一下看看错在那个部分啊……
2013-04-18 10:57
我叫沃恩
Rank: 12Rank: 12Rank: 12
来 自:Asia
等 级:贵宾
威 望:10
帖 子:1234
专家分:3865
注 册:2013-3-29
收藏
得分:2 
你这么长的代码,还是自己慢慢调试吧!

因为我是菜鸟,所以应该被骂! 细节+坚持=成功!
2013-04-18 12:19
czzdcn123
Rank: 7Rank: 7Rank: 7
来 自:江西
等 级:黑侠
威 望:3
帖 子:258
专家分:510
注 册:2013-3-7
收藏
得分:2 
我水平太低了  爱莫能助啊
2013-04-18 13:01
wanqiuyan08
Rank: 2
等 级:论坛游民
帖 子:12
专家分:30
注 册:2013-4-17
收藏
得分:2 
有点长。。。
2013-04-18 13:11
chtian
Rank: 2
等 级:论坛游民
帖 子:31
专家分:58
注 册:2012-8-28
收藏
得分:2 
这么长的代码,我太菜了
2013-04-18 13:19
bluesmile
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-4-18
收藏
得分:0 
难为大家了。。其实都是一个模块一个模块累积起来的。。。只是模块多,每个模块并不长。。就是那几个for循环。。。
2013-04-18 16:09
快速回复:求助。。我编的程序运行时遇到未知错误,怎么改啊,谢谢众高手们了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.047468 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved