ait-survey

centroid_std

Jan 28th, 2015
260
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.42 KB | None | 0 0
  1. #include <stdio.h> /*このプログラムにstandart input /output headerを含む*/
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <time.h>
  5. #include<math.h>
  6.  
  7. int main(int argc,char *argv[])
  8. {
  9.     FILE *fpi1,*fpo;               /*入力ファイルポインタ*/
  10.     int i,j,height,width;
  11.     int xg,yg;
  12.     int vxg,vyg;
  13.    
  14.     double dx,dy; //x-var,y-var
  15.    
  16.     double axg,ayg,adn;   /*int型の最大値、最小値の変数の宣言*/
  17.     unsigned char dn;              /*RVIの変数の宣言*/
  18.     unsigned char *file1;
  19.     //float *file3;             /*file1と呼ばれるfloat型のポインタ*/
  20.     float start,end;
  21.  
  22.     start=clock();
  23.  
  24.     /*引数の確認*/
  25.     if(argc!=4)
  26.     {
  27.         fprintf(stderr,"Usage:%s\n(1)Input_RAW_filename\n(2)Width\n(3)Height\n¥n",argv[0]);
  28.         exit(1);
  29.      }
  30.      
  31.     /*入力ファイルデータの表示*/
  32.     printf("OPEN FILE NAME:%s\n",argv[1]);
  33.     /*----引数の変数への渡し----*/
  34.     width = atoi(argv[2]);printf("W =%d,",width);  /*入力するご図ファイルの横画素数*/
  35.     height = atoi(argv[3]);printf("H =%d\n",height); /*入力する画像ファイルの縦画素数*/
  36.     /*----メモリの自動割当----*/
  37.     file1 = (unsigned char *)malloc(width*height*sizeof(char));
  38.     //file3 = (float *)malloc(width*height*sizeof(float));
  39.     /*---入力R画像ファイルのオープン開始----*/
  40.     if((fpi1=fopen(argv[1],"rb"))==NULL)
  41.     {/*ファイルのオープン*/
  42.         fprintf(stderr,"input file open error\n");
  43.         exit(1);
  44.     }
  45.     fread((unsigned char *)file1,sizeof(char),width*height,fpi1);
  46.    
  47.     /*画像ファイルのオープン終了*/
  48.     /*
  49.     if((fpo=fopen(argv[3],"wb"))==NULL)
  50.     {
  51.     fprintf(stderr,"output file open error\n");
  52.     exit(1);
  53.     }
  54.     fread((float *)file3,sizeof(float),width*height,fpo);
  55.     */
  56.     adn=0;
  57.     axg=0;
  58.     ayg=0;
  59.    
  60.     //
  61.     //calculation of average
  62.     //
  63.     for(i=0;i<height;i++)
  64.     {
  65.         for(j=0;j<width;j++)
  66.         {
  67.             dn=file1[i*width+j];
  68.             //axg= (double)dn*(j-2499)+axg;
  69.             //ayg= (double)dn*(i-2499)+ayg;
  70.             axg= (double)dn*j+axg;
  71.             ayg= (double)dn*i+ayg;
  72.             adn= (double)dn+adn;
  73.             //printf("dn=%d\n",dn);
  74.             //printf("adn =%d\n",adn);
  75.             //printf("axy =%d\n",axg);
  76.             //printf("ayg =%d\n",ayg);
  77.         }
  78.     }
  79.    
  80.     //
  81.     xg = (int)(axg/adn); //centroid X : average
  82.     yg = (int)(ayg/adn); //centroid Y
  83.    
  84.     printf("adn =%lf\n",adn);
  85.     printf("axy =%lf\n",axg);
  86.     printf("ayg =%lf\n",ayg);
  87.     printf("xg =%d\n",xg);
  88.     printf("yg =%d\n",yg);
  89.    
  90.     //
  91.     //calculation of standard deviation
  92.     //
  93.     for(i=0;i<height;i++)// i : y-axis
  94.     {
  95.         for(j=0;j<width;j++)// j :x-axis
  96.         {
  97.             dn=file1[i*width+j];//weight
  98.             //axg= (double)dn*(j-2499)+axg;
  99.             //ayg= (double)dn*(i-2499)+ayg;
  100.            
  101.             //axg= (double)dn*j+axg;
  102.             //ayg= (double)dn*i+ayg;
  103.             //adn= (double)dn+adn;//sum of weight
  104.            
  105.             //calculation standard deviation
  106.            
  107.             dx=((double)j-xg);
  108.             dy=((double)i-yg);
  109.            
  110.             axg= (double)dn*dx*dx+axg; //
  111.             ayg= (double)dn*dy*dy+ayg;
  112.            
  113.             adn= (double)dn+adn;//sum of weight
  114.            
  115.             //printf("dn=%d\n",dn);
  116.             //printf("adn =%d\n",adn);
  117.             //printf("axy =%d\n",axg);
  118.             //printf("ayg =%d\n",ayg);
  119.         }
  120.     }
  121.    
  122.     vxg = (int)(sqrt(axg/adn)); //vxg :
  123.     vyg = (int)(sqrt(ayg/adn)); //centroid Y
  124.    
  125.     printf("vxg=%d\n",vxg);
  126.     printf("vyg=%d\n",vyg);
  127.    
  128.     //final process
  129.     free(file1);
  130.     //free(file3);
  131.     fclose(fpi1);
  132.     //fclose(fpo);
  133.     end=clock();
  134.     //printf("開始時間は, %f秒\n",start/1000);
  135.     //printf("終了時間は, %f秒\n",end/1000);
  136.     //printf("経過時間は, %f秒\n",(end-start)/1000);
  137.  
  138. }
Advertisement
Add Comment
Please, Sign In to add comment