next up previous contents
Next: この文書について ... Up: 解析プログラム Previous: 相関値を求めるプログラム naibusoukan.c

結合荷重の状態を二次元画像で出力するプログラム times_weight.c

/* 結合荷重の積を算出してpgmで書き出すプログラム */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include "params.h"
#include "image_rw.h"

#define Max 50
#define fsig( in ) ( 1 / ( 1 + exp( -( in ))) )   /* シグモイド関数 */
#define FRopen( fp , fname ) if( NULL == ((fp) = fopen( fname , "r" ))){ perror( fname ); exit( 1 ); }

int Flag_sig = 1;

int Xsize = 1;
int Ysize = 1;
int Msize = 1;
int Tsize = 2;
int Filenumber = 0;

double tmp_im[Max][Max];
double tmp_mo[Max][Max];
double indata[Max][Max][Max]; /* 配列は[X軸][Y軸][中間層番号] */

int  imagedata[Max][Max][Max];

Image image_out[Max];

void set_indata();
void set_standard();
void make_image();

main( int argc , char *argv[] ){

  int k;
  char finame1[Max * Max],finame2[Max * Max];
  char ftname1[2 * Max],ftname2[2* Max];
  char *foname[Max];
  char *c_ptr;

  if( argc != 3 ){
    printf( "Usage : weight Midunit Outunit Filenumber \n" );
    exit(1);
  }

  Msize = atoi( argv[1] );
  Xsize = Ysize = atoi( argv[2] ) + 2;

  sprintf( finame1 , "Dataweight/mn_weight_verM%d_N%d.dat" , Msize , Xsize - 2 );
  sprintf( ftname1 , "Dataweight/mt_weight_verM%d_N%d.dat" , Msize , Xsize - 2 );
  sprintf( finame2 , "Dataweight/nm_weight_verM%d_N%d.dat" , Msize , Xsize - 2 );
  sprintf( ftname2 , "Dataweight/tm_weight_verM%d_N%d.dat" , Msize , Xsize - 2 );

  set_indata( finame1 , ftname1 , finame2 , ftname2 );
  set_standard();
  make_image();

  for( k = 0 ; k < Msize ; k++ ){

    c_ptr = malloc( 40 + 1 );
    foname[k] = c_ptr;

    if( k <= 9 ){
      sprintf( foname[k] , "Weightmulti/multiweight_verM%d_N%d_D0%d.pgm" , Msize , Xsize - 2 , k );
    } else {
      sprintf( foname[k] , "Weightmulti/multiweight_verM%d_N%d_D%d.pgm" , Msize , Xsize - 2 , k );
    }
    printf( "create -> %s\n" , foname[k] );

    image_write( image_out[k] , foname[k] );

  }

}

void set_indata( char *fname1 , char *fname2 , char *fname3 , char  *fname4 ){

  FILE *fp1,*fp2,*fp3,*fp4;
  int i,j,k;

  FRopen( fp1 , fname1 );
  FRopen( fp2 , fname2 );
  FRopen( fp3 , fname3 );
  FRopen( fp4 , fname4 );

  for( j = 0 ; j < Msize ; j++ ){
    for( i = 0 ; i < Tsize ; i++ ){
      fscanf( fp4 , "%lf " , &tmp_im[i][j] );
      fscanf( fp2 , "%lf " , &tmp_mo[i][j] );
    }
    for( i = Tsize ; i < Xsize ; i++ ){
      fscanf( fp3 , "%lf " , &tmp_im[i][j] );
      fscanf( fp1 , "%lf " , &tmp_mo[i][j] );
    }
  }

  fclose( fp1 );
  fclose( fp2 );
  fclose( fp3 );
  fclose( fp4 );

  for( k = 0 ; k < Msize ; k++ ){
    for( j = 0 ; j < Ysize ; j++ ){
      for( i = 0 ; i < Xsize ; i++ ){
        indata[i][j][k] = tmp_im[i][k] * tmp_mo[j][k];
      }
    }
  }

}

void set_standard(){

  int i,j,k;
  double max,min;

  for( k = 0 ; k < Msize ; k++ ){

    max = min = indata[0][0][k];
    for( j = 0 ; j < Ysize ; j++ ){
      for( i = 0 ; i < Xsize ; i++ ){
        if( indata[i][j][k] >= max ) max = indata[i][j][k];
        if( indata[i][j][k] <= min ) min = indata[i][j][k];
      }
    }

    for( j = 0 ; j < Ysize ; j++ ){
      for( i = 0 ; i < Xsize ; i++ ){
        if( Flag_sig != 0 ){
          indata[i][j][k] = fsig( indata[i][j][k] ) * 255;
        } else {
          indata[i][j][k] = ( indata[i][j][k] - min ) / ( max - min ) * 255;
        }
        imagedata[i][j][k] = (int)indata[i][j][k];
      }
    }

  }

}

void make_image(){

  int i,j,k;

  for( k = 0 ; k < Msize ; k++ ){
    image_out[k] = mkimage( Xsize , Ysize );
    for( j = 0 ; j < Ysize ; j++ ){
      for( i = 0 ; i < Xsize ; i++ ){
        pixel( image_out[k] , i , j ) = (unsigned char)imagedata[i][j][k];
      }
    }
  }

}



Toshinori DEGUCHI
2003年 4月11日 金曜日 11時42分54秒 JST