mrcFETnormalizeBySD
【問題内容】 FETファイルリストの(i, 0, 0)のデータ(θ=0 の幅、歪度、尖度)のみで正規化する動作になっています。 FETファイル内の全てのθについて正規化する必要はないのでしょうか。 (仕様である場合はドキュメントの方に追記します) 【ソースコード(一部)】 ファイル名: /src/Objects/DataManip/mrcImage/src/lmrcFETnormalizeBySD.c (1) 平均、標準偏差の計算(list: 入力ファイルリスト、n: 特徴量の種類(=3)、count: ファイル数) 関数名: calcSDofFET (146行目付近) while(NULL!=stringGetFromFile(s,"",list,stdout,1)){ mrcFileRead(&cFile, s, "in lmrcFETnormalizeBySD", 0); for(i=0;i<n;i++){ mrcPixelDataGet(&cFile,i,0,0,&data, mrcPixelRePart, mrcPixelHowNearest); ave[i] += data/(double)count; } } fseek(list, 0L, SEEK_SET); while(NULL!=stringGetFromFile(s,"",list,stdout,1)){ mrcFileRead(&cFile, s, "in lmrcFETnormalizeBySD", 0); for(i=0;i<n;i++){ mrcPixelDataGet(&cFile,i,0,0,&data, mrcPixelRePart, mrcPixelHowNearest); sd[i] += pow((data-ave[i]),2)/(double)count; } } for(i=0;i<n;i++) sd[i] = pow(sd[i],0.5); (2) 正規化処理(list: 入力ファイルリスト、n: 特徴量の種類(=3)) 関数名: _normalizeBySDandDataWrite (119行目付近) while(NULL!=stringGetFromFile(s,"",list,stdout,1)){ mrcFileRead(&cFile, s, "in normalizeBySDandDataWrite", 0); for(i=0;i<n;i++){ mrcPixelDataGet(&cFile,i,0,0,&data, mrcPixelRePart, mrcPixelHowNearest); data -= ave[i]; data /= sd[i]; mrcPixelDataSet(&nord,i,1,0,data, mrcPixelRePart); if(info.flagOut) mrcPixelDataSet(info.Out,i,l,0,data, mrcPixelRePart); } mrcStatDataSet(&nord,0); strcat(s,".nord"); mrcFileWrite(&nord,s,"in normalizeBySDandDataWrite", 0); l++; } if(info.flagOut) mrcStatDataSet(info.Out,0); 【補足】 (1)では154, 162行目付近、(2)では123行目付近にて 各ファイルの(i, 0, 0)のデータを得ていて、i毎に平均、標準偏差の計算、正規化を行っているようです。 各ファイルはFETファイルですので、(i, 0, 0)のデータはθ=0でのシノグラムの(幅、歪度、尖度)に対応していると思います。
詳細