「mrcImage(API)」の版間の差分

提供: Eospedia
移動: 案内検索
(lmrcImageFourierPowerSpectrum)
 
(同じ利用者による、間の53版が非表示)
行2: 行2:
  
 
==定数==
 
==定数==
===Status Mask===
+
===マスク処理===
 
  typedef unsigned int mrcStatusMask;
 
  typedef unsigned int mrcStatusMask;
 
  typedef unsigned int mrcStatusType;
 
  typedef unsigned int mrcStatusType;
行22: 行22:
 
  #define  mrcStatusMask_ReferMemory  ((mrcStatusMask)0x00020000L)
 
  #define  mrcStatusMask_ReferMemory  ((mrcStatusMask)0x00020000L)
 
  #define  mrcStatusMask_ReferFile    ((mrcStatusMask)0x00010000L)
 
  #define  mrcStatusMask_ReferFile    ((mrcStatusMask)0x00010000L)
+
 
 +
===mrcファイルの状態===
 
  #define  MRC_Status_OK              ((mrcStatusType)0x00000000L)
 
  #define  MRC_Status_OK              ((mrcStatusType)0x00000000L)
 
   
 
   
行41: 行42:
 
  extern char* mrcImageGeneralTypeList[];
 
  extern char* mrcImageGeneralTypeList[];
  
=== MRC Image Header===
+
===サイズ===
====Header Size====
+
ヘッダサイズ
 
  #define MRC_HEADER (1024)
 
  #define MRC_HEADER (1024)
 +
テイラサイズ
 
  #define MRC_TAILER (1024)
 
  #define MRC_TAILER (1024)
  
====Image Data Type====
+
====画像モード====
/* for compatibility */
+
=====mrcファイル互換のための定義=====
  typedef mrcImageParaTypeInteger mrcImageMode;
+
  typedef mrcImageParaTypeInteger mrcImageMode;
  #define MRC_char_image     ((mrcImageMode)0)
+
  #define MRC_char_image     ((mrcImageMode)0)
 
  #define MRC_short_image     ((mrcImageMode)1)
 
  #define MRC_short_image     ((mrcImageMode)1)
 
  #define MRC_float_image     ((mrcImageMode)2)
 
  #define MRC_float_image     ((mrcImageMode)2)
行62: 行64:
 
  #define MRC_complex_long_fft    ((mrcImageMode)1103)
 
  #define MRC_complex_long_fft    ((mrcImageMode)1103)
 
  #define MRC_complex_double_fft  ((mrcImageMode)1104)
 
  #define MRC_complex_double_fft  ((mrcImageMode)1104)
  #define MRC_NotSuppotedMode      ((mrcImageMode)0xffffffffL)
+
  #define MRC_NotSuppotedMode      ((mrcImageMode)0xffffffffL)
+
 
  #define mrcCharImage     ((mrcImageMode)0)
+
  #define mrcCharImage     ((mrcImageMode)0)
 
  #define mrcShortImage     ((mrcImageMode)1)
 
  #define mrcShortImage     ((mrcImageMode)1)
 
  #define mrcFloatImage     ((mrcImageMode)2)
 
  #define mrcFloatImage     ((mrcImageMode)2)
行70: 行72:
 
  #define mrcComplexFloatFT        ((mrcImageMode)4)
 
  #define mrcComplexFloatFT        ((mrcImageMode)4)
 
  #define mrcComplexFloatOneDimFT  ((mrcImageMode)5)
 
  #define mrcComplexFloatOneDimFT  ((mrcImageMode)5)
// Change of IMOD  
+
 
 +
=====IMOD=====
 
  #define mrcUShortImage          ((mrcImageMode)6)
 
  #define mrcUShortImage          ((mrcImageMode)6)
 
  #define mrcCharImageRGB          ((mrcImageMode)16)
 
  #define mrcCharImageRGB          ((mrcImageMode)16)
// Change for IMOD: (6,7) -> (26,27)  
+
 
 +
=====IMOD: (6,7) -> (26,27)=====
 
  #define mrcFloatRadonImage      ((mrcImageMode)26)
 
  #define mrcFloatRadonImage      ((mrcImageMode)26)
 
  #define mrcFloatRadonFT          ((mrcImageMode)27)
 
  #define mrcFloatRadonFT          ((mrcImageMode)27)
行84: 行88:
 
  #define mrcComplexLongFFT        ((mrcImageMode)1103)
 
  #define mrcComplexLongFFT        ((mrcImageMode)1103)
 
  #define mrcComplexDoubleFFT      ((mrcImageMode)1104)
 
  #define mrcComplexDoubleFFT      ((mrcImageMode)1104)
  #define mrcNotSuppotedMode      ((mrcImageMode)0xffffffffL)
+
  #define mrcNotSuppotedMode      ((mrcImageMode)0xffffffffL)
+
 
 
  #define MRC_MAX_LABEL_N    (10)
 
  #define MRC_MAX_LABEL_N    (10)
 
  #define MRC_MAX_LABEL_LEN  (80)
 
  #define MRC_MAX_LABEL_LEN  (80)
行91: 行95:
 
  #define MRC_MAX_EXTRA_CCP4 (15)
 
  #define MRC_MAX_EXTRA_CCP4 (15)
  
===Tailer===
+
===2D投影モード===
 
  #define  mrcImageTailerMode2DProjection 0
 
  #define  mrcImageTailerMode2DProjection 0
  
 
===画像情報===
 
===画像情報===
 +
統計データの算出モード
 
  typedef enum mrcImageInformationMode {
 
  typedef enum mrcImageInformationMode {
 
  meanOfAll            = 0,
 
  meanOfAll            = 0,
    meanOfSphereSurface  = 1,
+
meanOfSphereSurface  = 1,
    meanOfCylinderSurface = 2,
+
meanOfCylinderSurface = 2,
    meanOfEdge            = 3,  
+
meanOfEdge            = 3,  
    meanOfCentre          = 4,
+
meanOfCentre          = 4,
    meanOfSparse          = 5,
+
meanOfSparse          = 5,
 
  meanOf2DEdgeY        = 6,
 
  meanOf2DEdgeY        = 6,
 
  RMSofAllPixels      = 7
 
  RMSofAllPixels      = 7
 
  } mrcImageInformationMode;
 
  } mrcImageInformationMode;
 +
平均値などを算出する関数([[mrcImage(API)#統計データの取得|lmrcImageInformation]]、[[lmrcImageSolventFlattening(API)]]など)のモードとして設定します。<br>
 +
[[mrcImage(API)#mrcImageの情報|mrcImageInformation.mode]]の値として使用します。
  
 +
===ピクセルデータ===
 +
====データの種類====
 
  typedef enum mrcPixelDataType {
 
  typedef enum mrcPixelDataType {
 
     mrcPixelRePart = 0,
 
     mrcPixelRePart = 0,
行115: 行124:
 
     mrcPixelPhase
 
     mrcPixelPhase
 
  } mrcPixelDataType;
 
  } mrcPixelDataType;
+
設定・取得するピクセルデータのタイプで、[[mrcImage(API)#ピクセル単位の画素データの設定|mrcPixselDataSet]]や[[mrcImage(API)#ピクセル単位の画素データの取得|mrcPixselDataGet]]の引数(mode)として使用します。<br>
 +
 
 +
<table border="1">
 +
<tr>
 +
<th>モード</th>
 +
<th>実画像</th>
 +
<th>FT画像</th>
 +
</tr>
 +
<tr>
 +
<td>mrcPixelRePart</td>
 +
<td>データ</td>
 +
<td>実部データ</td>
 +
</tr>
 +
<tr>
 +
<td>mrcPixelImPart</td>
 +
<td>対応無し</td>
 +
<td>虚部データ</td>
 +
</tr>
 +
<tr>
 +
<td>mrcPixelMag</td>
 +
<td>データ</td>
 +
<td>振幅: (実部^2 + 虚部^2)^(1/2)</td>
 +
</tr>
 +
<tr>
 +
<td>mrcPixelPow</td>
 +
<td>データ^2</td>
 +
<td>強度: 実部^2 + 虚部^2</td>
 +
</tr>
 +
<tr>
 +
<td>mrcPixelLogMag</td>
 +
<td>対応無し</td>
 +
<td>ログ振幅: (log10(実部^2 + 虚部^2)) / 2</td>
 +
</tr>
 +
<tr>
 +
<td>mrcPixelLogPow</td>
 +
<td>対応無し</td>
 +
<td>ログ強度: log10(実部^2 + 虚部^2)</td>
 +
</tr>
 +
<tr>
 +
<td>mrcPixelPhase</td>
 +
<td>対応無し</td>
 +
<td>位相</td>
 +
</tr>
 +
</table>
 +
<br>
 +
 
 +
====[[補間]]方法====
 
  typedef enum mrcPixelDataHowToGet {
 
  typedef enum mrcPixelDataHowToGet {
 
     mrcPixelHowNearest = 0,
 
     mrcPixelHowNearest = 0,
行122: 行177:
 
     mrcPixelHowPolySig
 
     mrcPixelHowPolySig
 
  } mrcPixelDataHowToGet;
 
  } mrcPixelDataHowToGet;
 +
ピクセルデータの[[補間]]方法で、[[mrcImage(API)#ピクセル単位の画素データの取得|mrcPixselDataGet]]の引数(how)として使用します。<br>
 +
 +
<table border="1">
 +
<tr>
 +
<th>モード</th>
 +
<th>設定値</th>
 +
<th>[[補間]]方法</th>
 +
</tr>
 +
<tr>
 +
<td>mrcPixelHowNearest</td>
 +
<td>0</td>
 +
<td>最近傍法</td>
 +
</tr>
 +
<tr>
 +
<td>mrcPixelHowLinear</td>
 +
<td>1</td>
 +
<td>線形補間法</td>
 +
</tr>
 +
<tr>
 +
<td>mrcPixelHowCubicConv</td>
 +
<td>2</td>
 +
<td>3次補間法</td>
 +
</tr>
 +
<tr>
 +
<td>mrcPixelHowPolySig</td>
 +
<td>3</td>
 +
<td>2次曲面補間法</td>
 +
</tr>
 +
</table>
 +
<br>
 +
 +
====mrcImageDataSetMode====
 +
typedef enum mrcImageDataSetMode {
 +
mrcImageDataSetModeCentre = 0,
 +
mrcImageDataSetModeOrigin = 1
 +
} mrcImageDataSetMode;
 +
 +
[[mrcImage(API)#画素データの設定|mrcImageDataSet]]のモードとして使用します。
 +
<table border="1">
 +
<tr>
 +
<th>
 +
定数名
 +
</th>
 +
<th>
 +
 +
</th>
 +
<th>
 +
説明
 +
</th>
 +
</tr>
 +
<tr>
 +
<td>
 +
mrcImageDataSetModeCentre
 +
</td>
 +
<td>
 +
0
 +
</td>
 +
<td>
 +
画像の中心から取得する
 +
</td>
 +
</tr>
 +
<tr>
 +
<td>
 +
mrcImageDataSetModeOrigin
 +
</td>
 +
<td>
 +
1
 +
</td>
 +
<td>
 +
原点から取得する
 +
</td>
 +
</tr>
 +
</table>
 +
<br>
  
 
==構造体==
 
==構造体==
===Status Mask===
+
===マスク処理===
 
  typedef union MRC_Status_t {
 
  typedef union MRC_Status_t {
 
     mrcStatusType all;
 
     mrcStatusType all;
行149: 行278:
 
  typedef unsigned char mrcImageParaTypeCharacter;
 
  typedef unsigned char mrcImageParaTypeCharacter;
  
 +
===座標===
 +
整数: ピクセルデータなどを扱うときに使用します。
 
  typedef struct mrcImageParaTypeIntegerCoord {
 
  typedef struct mrcImageParaTypeIntegerCoord {
 
  mrcImageParaTypeInteger x;
 
  mrcImageParaTypeInteger x;
行155: 行286:
 
  } mrcImageParaTypeIntegerCoord;
 
  } mrcImageParaTypeIntegerCoord;
  
 +
実数: 実データやPDBデータなどを扱うときに使用します。
 
  typedef struct mrcImageParaTypeRealCoord {
 
  typedef struct mrcImageParaTypeRealCoord {
 
  mrcImageParaTypeReal x;
 
  mrcImageParaTypeReal x;
行160: 行292:
 
  mrcImageParaTypeReal z;
 
  mrcImageParaTypeReal z;
 
  } mrcImageParaTypeRealCoord;
 
  } mrcImageParaTypeRealCoord;
 +
 +
===[[mrcImage]]の構造===
 +
typedef struct mrcImage {
 +
mrcImageHeader          Header;
 +
size_t BytePerImage;
 +
mrcImageParaTypeInteger BytePerBand;
 +
mrcImageParaTypeInteger BandPerPixel;
 +
size_t PixelPerImage;
 +
mrcStatusType          status;
 +
char*          Image;
 +
unsigned char*  ImageCharImage;
 +
unsigned short* ImageShortImage;
 +
unsigned long*  ImageLongImage;
 +
float*          ImageFloatImage;
 +
double*        ImageDoubleImage;
 
   
 
   
=== MRC Image Header===
+
/* Tailer */
 +
mrcImageTailer*        Tailer;
 +
mrcImageParaTypeInteger numTailer;
 +
 +
/* FEIextendedHeader */
 +
FEIextendedHeader*      FEIHeader;
 +
mrcImageParaTypeInteger numFEIHeader;
 +
 +
  /* Dummy */
 +
char*    dummyHeader;
 +
mrcImageParaTypeInteger dummyHeaderByte;
 +
 +
/* Swap Bytes */
 +
mrcImageParaTypeInteger flagByteSwap;
 +
 +
/* flag CCP4-2000 */
 +
mrcImageParaTypeInteger  flagCCP4;
 +
mrcImageParaTypeInteger  ImageOffset;
 +
mrcImageSymmetryOperator* SymmetryOperator;
 +
} mrcImage;
 +
 
 +
<table border="1">
 +
<tr>
 +
<th>構成</th>
 +
<th>対応メンバ</th>
 +
<th>役割</th>
 +
</tr>
 +
<tr>
 +
<td>[[mrcImage(API)#ヘッダ情報|ヘッダ情報]]</td>
 +
<td>Header</td>
 +
<td>画像モード、サイズなど</td>
 +
</tr>
 +
<tr>
 +
<td>隠しデータ</td>
 +
<td>BytePerImage, BytePerBand, BandPerPixel, PixelPerImage</td>
 +
<td>1ピクセル当たりのオングストロームなど</td>
 +
</tr>
 +
<tr>
 +
<td>[[mrcImage(API)#mrcファイルの状態|ステータス]]</td>
 +
<td>status</td>
 +
<td>ファイルの状態</td>
 +
</tr>
 +
<tr>
 +
<td>画像データ</td>
 +
<td>Image, ImageCharImage, ... , ImageDoubleImage</td>
 +
<td>画像データ本体(実体はImage、他メンバはポインタで管理)</td>
 +
</tr>
 +
<tr>
 +
<td>[[mrcImage(API)#テイラ情報|テイラ情報]]</td>
 +
<td>Tailer, numTailer</td>
 +
<td>角度情報など</td>
 +
</tr>
 +
<tr>
 +
<td>[[mrcImage(API)#FEI|FEIヘッダ]]</td>
 +
<td>FEIHeader, numFEIHeader</td>
 +
<td>FEI用の拡張ヘッダ</td>
 +
</tr>
 +
<tr>
 +
<td>ダミー</td>
 +
<td>dummyHeaderByte</td>
 +
<td>ダミーデータ</td>
 +
</tr>
 +
<tr>
 +
<td>バイトスワップ</td>
 +
<td>flagByteSwap</td>
 +
<td>処理系によったエンディアン関連のフラグ</td>
 +
</tr>
 +
<tr>
 +
<td>CCP4-2000</td>
 +
<td>flagCCP4, ImageOffset, SymmetryOperator</td>
 +
<td>CCP4-2000用</td>
 +
</tr>
 +
</table>
 +
<br>
 +
 
 +
====ヘッダ情報====
 +
=====デフォルト=====
 
  typedef struct _mrcImageHeader {
 
  typedef struct _mrcImageHeader {
 
  mrcImageParaTypeIntegerCoord        N;     /* Data Numbers */
 
  mrcImageParaTypeIntegerCoord        N;     /* Data Numbers */
行180: 行403:
 
  mrcImageParaTypeInteger            NSYMBT; /* Number of bytes */
 
  mrcImageParaTypeInteger            NSYMBT; /* Number of bytes */
 
  mrcImageParaTypeReal                EXTRA[MRC_MAX_EXTRA]; /* Extra, user defined storage space */
 
  mrcImageParaTypeReal                EXTRA[MRC_MAX_EXTRA]; /* Extra, user defined storage space */
    mrcImageParaTypeReal                OriginX;
+
mrcImageParaTypeReal                OriginX;
    mrcImageParaTypeReal                OriginY;
+
mrcImageParaTypeReal                OriginY;
    mrcImageParaTypeInteger            LabelN;
+
mrcImageParaTypeInteger            LabelN;
    char                                Label[MRC_MAX_LABEL_N][MRC_MAX_LABEL_LEN];
+
char                                Label[MRC_MAX_LABEL_N][MRC_MAX_LABEL_LEN];
 
  } _mrcImageHeader;
 
  } _mrcImageHeader;
 
   
 
   
/* For CCP4 2000 : Current New */
+
=====CCP4 2000=====
 
  typedef struct _mrcImageHeaderCCP4 {
 
  typedef struct _mrcImageHeaderCCP4 {
 
  mrcImageParaTypeIntegerCoord        N;     /* Data Numbers */
 
  mrcImageParaTypeIntegerCoord        N;     /* Data Numbers */
行208: 行431:
 
  mrcImageParaTypeReal SKWTRN[3]; /* Skew translation */
 
  mrcImageParaTypeReal SKWTRN[3]; /* Skew translation */
 
  mrcImageParaTypeReal                EXTRA[MRC_MAX_EXTRA_CCP4]; /* Extra, user defined storage space */
 
  mrcImageParaTypeReal                EXTRA[MRC_MAX_EXTRA_CCP4]; /* Extra, user defined storage space */
    mrcImageParaTypeCharacter  MAP[4];
+
mrcImageParaTypeCharacter  MAP[4];
    mrcImageParaTypeInteger  MARCHST;
+
mrcImageParaTypeInteger  MARCHST;
    mrcImageParaTypeReal                ARMS;
+
mrcImageParaTypeReal                ARMS;
    mrcImageParaTypeInteger            LabelN;
+
mrcImageParaTypeInteger            LabelN;
    char                                Label[MRC_MAX_LABEL_N][MRC_MAX_LABEL_LEN];
+
char                                Label[MRC_MAX_LABEL_N][MRC_MAX_LABEL_LEN];
 
  } _mrcImageHeaderCCP4;
 
  } _mrcImageHeaderCCP4;
 
   
 
   
/* For IMOD: Current New */
+
=====IMOD=====
 
  typedef struct _mrcImageHeaderIMOD {
 
  typedef struct _mrcImageHeaderIMOD {
 
  mrcImageParaTypeIntegerCoord        N;     /* Data Numbers */
 
  mrcImageParaTypeIntegerCoord        N;     /* Data Numbers */
行250: 行473:
 
  mrcImageParaTypeReal                yorg; /* Extra, user defined storage space */
 
  mrcImageParaTypeReal                yorg; /* Extra, user defined storage space */
 
  mrcImageParaTypeReal                zorg; /* Extra, user defined storage space */
 
  mrcImageParaTypeReal                zorg; /* Extra, user defined storage space */
    mrcImageParaTypeCharacter  MAP[4];
+
mrcImageParaTypeCharacter  MAP[4];
    mrcImageParaTypeInteger  MARCHST;
+
mrcImageParaTypeInteger  MARCHST;
    mrcImageParaTypeReal                ARMS;
+
mrcImageParaTypeReal                ARMS;
    mrcImageParaTypeInteger            LabelN;
+
mrcImageParaTypeInteger            LabelN;
    char                                Label[MRC_MAX_LABEL_N][MRC_MAX_LABEL_LEN];
+
char                                Label[MRC_MAX_LABEL_N][MRC_MAX_LABEL_LEN];
 
  } _mrcImageHeaderIMOD;
 
  } _mrcImageHeaderIMOD;
+
 
+
=====ヘッダの共用体=====
 +
以上で定義したヘッダを共用体とします。
 
  typedef union mrcImageHeader {
 
  typedef union mrcImageHeader {
 
   unsigned char          All[MRC_HEADER];
 
   unsigned char          All[MRC_HEADER];
行266: 行490:
 
   _mrcImageHeaderIMOD    ContIMOD;
 
   _mrcImageHeaderIMOD    ContIMOD;
 
  } mrcImageHeader;
 
  } mrcImageHeader;
 +
 +
メンバー呼び出しの省略表記を定義
 +
#define HeaderN      Header.Cont.N     
 +
#define HeaderMode    Header.Cont.Mode   
 +
#define HeaderStartN  Header.Cont.StartN 
 +
#define HeaderM      Header.Cont.M     
 +
#define HeaderLength  Header.Cont.Length 
 +
#define HeaderAlpha  Header.Cont.Alpha 
 +
#define HeaderBeta    Header.Cont.Beta   
 +
#define HeaderGamma  Header.Cont.Gamma 
 +
#define HeaderMAPC    Header.Cont.MAPC   
 +
#define HeaderMAPR    Header.Cont.MAPR   
 +
#define HeaderMAPS    Header.Cont.MAPS   
 +
#define HeaderAMin    Header.Cont.AMin   
 +
#define HeaderAMax    Header.Cont.AMax   
 +
#define HeaderAMean  Header.Cont.AMean 
 +
#define HeaderISPG    Header.Cont.ISPG   
 +
#define HeaderNSYMBT  Header.Cont.NSYMBT 
 +
#define HeaderLSKFLG  Header.ContCCP4.LSKFLG
 +
#define HeaderEXTRA  Header.Cont.EXTRA
 +
#define HeaderOriginX Header.Cont.OriginX
 +
#define HeaderOriginY Header.Cont.OriginY 
 +
#define HeaderLabelN  Header.Cont.LabelN
 +
#define HeaderLabel  Header.Cont.Label
 
   
 
   
+
=====FEI=====
 
  #define FEI_EXTENDED_HEADER_EACH (128)  
 
  #define FEI_EXTENDED_HEADER_EACH (128)  
+
 
 
  typedef struct _FEIextendedHeader {
 
  typedef struct _FEIextendedHeader {
 
  mrcImageParaTypeReal aTilt;  // Alpha tilt, in degrees
 
  mrcImageParaTypeReal aTilt;  // Alpha tilt, in degrees
行293: 行541:
 
  mrcImageParaTypeReal reminder[FEI_EXTENDED_HEADER_EACH/4-16];   
 
  mrcImageParaTypeReal reminder[FEI_EXTENDED_HEADER_EACH/4-16];   
 
  } _FEIextendedHeader;
 
  } _FEIextendedHeader;
+
 
 
  typedef union FEIextendedHeader {
 
  typedef union FEIextendedHeader {
 
  mrcImageParaTypeReal Real[FEI_EXTENDED_HEADER_EACH/4];
 
  mrcImageParaTypeReal Real[FEI_EXTENDED_HEADER_EACH/4];
行299: 行547:
 
  } FEIextendedHeader;
 
  } FEIextendedHeader;
  
===Tailer===
+
====テイラ情報====
 
  typedef struct _mrcImageTailer {
 
  typedef struct _mrcImageTailer {
 
  char                Code[4];  
 
  char                Code[4];  
行309: 行557:
 
  mrcImageParaTypeInteger Mirror;
 
  mrcImageParaTypeInteger Mirror;
 
  } _mrcImageTailer;
 
  } _mrcImageTailer;
+
 
+
 
  typedef union mrcImageTailer {
 
  typedef union mrcImageTailer {
 
   unsigned char          All[MRC_TAILER];
 
   unsigned char          All[MRC_TAILER];
行317: 行564:
 
   _mrcImageTailer        Cont;
 
   _mrcImageTailer        Cont;
 
  } mrcImageTailer;
 
  } mrcImageTailer;
+
 
+
 
  typedef char mrcImageSymmetryOperator;
 
  typedef char mrcImageSymmetryOperator;
  
===mrcImage Structure===
+
===画像の統計データ===
typedef struct mrcImage {
+
mrcImageの統計データを格納する構造体です。<br>
    mrcImageHeader          Header;
+
データは[[mrcImage(API)#統計データの取得|mrcImageInformation(API)]]から取得して、主に入力情報として使用します。<br>
    size_t BytePerImage;
+
    mrcImageParaTypeInteger BytePerBand;
+
    mrcImageParaTypeInteger BandPerPixel;
+
    size_t PixelPerImage;
+
    mrcStatusType          status;
+
    char*          Image;
+
    unsigned char*  ImageCharImage;
+
    unsigned short* ImageShortImage;
+
    unsigned long*  ImageLongImage;
+
    float*          ImageFloatImage;
+
    double*        ImageDoubleImage;
+
+
/* Tailer */
+
mrcImageTailer*        Tailer;
+
mrcImageParaTypeInteger numTailer;
+
+
/* FEIextendedHeader */
+
FEIextendedHeader*      FEIHeader;
+
mrcImageParaTypeInteger numFEIHeader;
+
+
  /* Dummy */
+
char*    dummyHeader;
+
mrcImageParaTypeInteger dummyHeaderByte;
+
+
/* Swap Bytes */
+
mrcImageParaTypeInteger flagByteSwap;
+
+
/* flag CCP4-2000 */
+
mrcImageParaTypeInteger  flagCCP4;
+
mrcImageParaTypeInteger  ImageOffset;
+
mrcImageSymmetryOperator* SymmetryOperator;
+
} mrcImage;
+
+
 
  typedef struct mrcImageInformation {
 
  typedef struct mrcImageInformation {
    double mean;
+
double mean;
    double rootMeanSquare;
+
double rootMeanSquare;
    double meanOfSphereSurface;
+
double meanOfSphereSurface;
    double sdOfSphereSurface;
+
double sdOfSphereSurface;
    double seOfSphereSurface;
+
double seOfSphereSurface;
    double meanOfCylinderSurface;
+
double meanOfCylinderSurface;
    double sdOfCylinderSurface;
+
double sdOfCylinderSurface;
    double seOfCylinderSurface;
+
double seOfCylinderSurface;
    double meanOfEdge;
+
double meanOfEdge;
    double sdOfEdge;
+
double sdOfEdge;
    double seOfEdge;
+
double seOfEdge;
    double max;
+
double max;
 
  mrcImageParaTypeRealCoord maxCoord;
 
  mrcImageParaTypeRealCoord maxCoord;
    double min;
+
double min;
 
  mrcImageParaTypeRealCoord minCoord;
 
  mrcImageParaTypeRealCoord minCoord;
    double sd;
+
double sd;
    double se;
+
double se;
 
  double rmax;
 
  double rmax;
 
  long flagrmax;
 
  long flagrmax;
行397: 行610:
 
  } mrcImageInformation;
 
  } mrcImageInformation;
  
#define HeaderN      Header.Cont.N     
+
===API毎の設定ファイル===
#define HeaderMode    Header.Cont.Mode   
+
====lmrcImageSmoothingInfo====
#define HeaderStartN  Header.Cont.StartN 
+
[[mrcImage(API)#lmrcImageSmoothing|lmrcImageSmoothing]]の設定データとして使用します。
#define HeaderM      Header.Cont.M     
+
#define HeaderLength  Header.Cont.Length 
+
#define HeaderAlpha  Header.Cont.Alpha 
+
#define HeaderBeta    Header.Cont.Beta   
+
#define HeaderGamma  Header.Cont.Gamma 
+
#define HeaderMAPC    Header.Cont.MAPC   
+
#define HeaderMAPR    Header.Cont.MAPR   
+
#define HeaderMAPS    Header.Cont.MAPS   
+
#define HeaderAMin    Header.Cont.AMin   
+
#define HeaderAMax    Header.Cont.AMax   
+
#define HeaderAMean  Header.Cont.AMean 
+
#define HeaderISPG    Header.Cont.ISPG   
+
#define HeaderNSYMBT  Header.Cont.NSYMBT 
+
#define HeaderLSKFLG  Header.ContCCP4.LSKFLG
+
#define HeaderEXTRA  Header.Cont.EXTRA
+
#define HeaderOriginX Header.Cont.OriginX
+
#define HeaderOriginY Header.Cont.OriginY 
+
#define HeaderLabelN  Header.Cont.LabelN
+
#define HeaderLabel  Header.Cont.Label
+
 
+
===画像情報===
+
 
  typedef struct lmrcImageSmoothingInfo  {
 
  typedef struct lmrcImageSmoothingInfo  {
 
  long mode;
 
  long mode;
行428: 行620:
 
  double sigma;            /* for Lee-Sigma filter  */
 
  double sigma;            /* for Lee-Sigma filter  */
 
  } lmrcImageSmoothingInfo;
 
  } lmrcImageSmoothingInfo;
+
 
 +
====lmrcImageCVEInfo====
 +
[[mrcImage(API)#lmrcImageCVE|lmrcImageCVE]]の設定データとして使用します。
 
  typedef struct lmrcImageCVEInfo {
 
  typedef struct lmrcImageCVEInfo {
 
  long sx; /* CVE domain size. */
 
  long sx; /* CVE domain size. */
行434: 行628:
 
  long sz;
 
  long sz;
 
  } lmrcImageCVEInfo;
 
  } lmrcImageCVEInfo;
+
 
 +
====lmrcImageTfunctionInfo====
 +
[[mrcImage(API)#lmrcImageTfunction|lmrcImageTfunction]]の設定データとして使用します。
 
  typedef struct lmrcImageTfunctionInfo {
 
  typedef struct lmrcImageTfunctionInfo {
 
  long sx; /* Tfunction domain size. */
 
  long sx; /* Tfunction domain size. */
行440: 行636:
 
  long sz;
 
  long sz;
 
  } lmrcImageTfunctionInfo;
 
  } lmrcImageTfunctionInfo;
+
 
 +
====lmrcImageHighlightInfo====
 +
[[mrcImage(API)#lmrcImageHighlighting|lmrcImageHighlighting]]の設定データとして使用します。
 
  typedef struct lmrcImageHighlightInfo {
 
  typedef struct lmrcImageHighlightInfo {
 
  long mode;
 
  long mode;
行446: 行644:
 
  float Grad;
 
  float Grad;
 
  } lmrcImageHighlightInfo;
 
  } lmrcImageHighlightInfo;
+
 
 +
====lmrcImageLowPassFilterInfo====
 +
[[mrcImage(API)#lmrcImageLowPassFilter|lmrcImageLowPassFilter]]の設定データとして使用します。
 
  typedef struct lmrcImageLowPassFilterInfo  
 
  typedef struct lmrcImageLowPassFilterInfo  
 
  {
 
  {
行452: 行652:
 
  float hvp, width;
 
  float hvp, width;
 
  } lmrcImageLowPassFilterInfo;
 
  } lmrcImageLowPassFilterInfo;
+
 
 +
====lmrcImageHighPassFilterInfo====
 +
[[mrcImage(API)#lmrcImageHighPassFilter|lmrcImageHighPassFilter]]の設定データとして使用します。
 
  typedef struct lmrcImageHighPassFilterInfo  
 
  typedef struct lmrcImageHighPassFilterInfo  
 
  {
 
  {
行460: 行662:
 
  float pathWindowHigh;
 
  float pathWindowHigh;
 
  } lmrcImageHighPassFilterInfo;
 
  } lmrcImageHighPassFilterInfo;
+
 
 +
====lmrcImageBandPassFilterInfo====
 +
[[mrcImage(API)#lmrcImageBandPassFilter|lmrcImageBandPassFilter]]の設定データとして使用します。
 
  typedef struct lmrcImageBandPassFilterInfo  
 
  typedef struct lmrcImageBandPassFilterInfo  
 
  {
 
  {
行469: 行673:
 
  } lmrcImageBandPassFilterInfo;
 
  } lmrcImageBandPassFilterInfo;
  
===mrcImageDataSet===
+
====lmrcImageMultiCTFCompensationInfo====
  typedef enum mrcImageDataSetMode {
+
[[mrcImage(API)#lmrcImageMultiCTFCompensation|lmrcImageMultiCTFCompensation]]の設定データとして使用します。
  mrcImageDataSetModeCentre = 0,
+
  typedef enum lmrcImageMultiCTFCompensationSolventFlatteningMode {
  mrcImageDataSetModeOrigin = 1
+
  lmrcImageMultiCTFCompensationSolventFlatteningModeDensityPeakIsSolvent=0,
  } mrcImageDataSetMode;
+
  lmrcImageMultiCTFCompensationSolventFlatteningModeDefinedSTDIsSolvent=1
 +
  } lmrcImageMultiCTFCompensationSolventFlatteningMode;
 +
 +
typedef struct lmrcImageMultiCTFCompensationInfo {
 +
long  maxiteration;
 +
double okrms;
 +
long  diversefactor;
 +
double z;
 +
long  nhist;
 +
FILE*  logfile;
 +
lmrcImageMultiCTFCompensationSolventFlatteningMode solventMode;
 +
float  definedSTD;
 +
} lmrcImageMultiCTFCompensationInfo;
 +
 
 +
====lmrcImageCTFSNInfo====
 +
[[mrcImage(API)#lmrcImageCTFSN|lmrcImageCTFSN]]の設定データとして使用します。
 +
typedef struct lmrcImageCTFSNInfo
 +
{
 +
long mode, deg1, deg2;
 +
ctfInfo ctf;
 +
} lmrcImageCTFSNInfo;
 +
 
 +
====lmrcImageFourierPowerSpectrumInfo====
 +
[[mrcImage(API)#lmrcImageFourierPowerSpectrum|lmrcImageFourierPowerSpectrum]]の設定データとして使用します。
 +
typedef struct mrcImageFourierPowerSpectrum
 +
{
 +
long n;
 +
double d, *h;
 +
} mrcImageFourierPowerSpectrum;
 +
 +
typedef struct lmrcImageFourierPowerSpectrumInfo
 +
{
 +
double dX, dY, dZ;
 +
} lmrcImageFourierPowerSpectrumInfo;
  
 
==API==
 
==API==
=== 初期化 ===
+
===初期化===
 +
====画像データの初期化====
 
  extern mrcStatusType mrcInit(mrcImage* mrc, char* filaname);
 
  extern mrcStatusType mrcInit(mrcImage* mrc, char* filaname);
 +
ヘッダ情報(画像モードやサイズ)を別のmrcファイルから読み出す場合はfilenameにファイル名を指定し、NULLの場合はデフォルト設定となります。画像データをmrcのメンバーImageに新規作成し, ポインタをImageXXXXImage(XXXX: Char, Shortなど)に格納されます。<br>
 +
<br>
 +
※ このAPIは無条件でmrc->Imageにメモリを確保しますので、mrc->Imageが空であることが保証されるときのみ使用して下さい。(空でない場合は[[mrcImage(API)#画像データの解放|mrcImageFree]]でメモリを解放してから確認します。)
 +
 +
====ヘッダ情報の初期化====
 
  extern mrcStatusType mrcDefaultHeaderValueSet(mrcImage* mrc);
 
  extern mrcStatusType mrcDefaultHeaderValueSet(mrcImage* mrc);
 +
extern mrcStatusType mrcDefaultHeaderValueSetOnlyFixedValue(mrcImage* mrc);
 +
 +
====隠しデータの設定====
 
  extern mrcStatusType mrcHiddenDataSet(mrcImage* mrc, long mode);
 
  extern mrcStatusType mrcHiddenDataSet(mrcImage* mrc, long mode);
extern void mrcImageFree(mrcImage* mrc, char* message);
+
 
 +
====テイラ情報の初期化====
 
  extern void mrcTailerInit(mrcImage* mrc, long mode);
 
  extern void mrcTailerInit(mrcImage* mrc, long mode);
  extern void mrcTailerCopy(mrcImage* dst, mrcImage* src, long mode);
+
 
 +
===画像データの解放===
 +
  extern void mrcImageFree(mrcImage* mrc, char* message);
 +
画像データの実体(Image)を解放し、Image, ImageXXXXImage(XXXX: Char, Shortなど)をNULLポインタとします。
  
 
=== ファイルの読み込み ===
 
=== ファイルの読み込み ===
 +
filenameを読み出して、mrcへ格納する。
 
  extern mrcStatusType mrcFileRead  (mrcImage* mrc, char* filename, char* message, long mode);
 
  extern mrcStatusType mrcFileRead  (mrcImage* mrc, char* filename, char* message, long mode);
 +
 +
 
  extern mrcStatusType mrcImageRead (mrcImage* mrc, char* filename, char* message, long mode);
 
  extern mrcStatusType mrcImageRead (mrcImage* mrc, char* filename, char* message, long mode);
 
  extern mrcStatusType mrcHeaderRead(mrcImage* mrc, char* filename, char* message, long mode);
 
  extern mrcStatusType mrcHeaderRead(mrcImage* mrc, char* filename, char* message, long mode);
行505: 行758:
 
  extern mrcStatusType mrcHeaderReadIMODextendedMRC(mrcImage* mrc, char* filename, char* message, long mode);
 
  extern mrcStatusType mrcHeaderReadIMODextendedMRC(mrcImage* mrc, char* filename, char* message, long mode);
 
  extern mrcStatusType mrcTailerReadIMODextendedMRC(mrcImage* mrc, char* filename, char* message, long mode);
 
  extern mrcStatusType mrcTailerReadIMODextendedMRC(mrcImage* mrc, char* filename, char* message, long mode);
 +
 +
message: エラーメッセージ用<br>
 +
mode: 読み込みデータを 0: 表示しない, 1: 表示する
  
 
=== ファイルの書き出し ===
 
=== ファイルの書き出し ===
行511: 行767:
 
  extern mrcStatusType mrcHeaderWrite(mrcImage* mrc, char* filename, char* message, long mode);
 
  extern mrcStatusType mrcHeaderWrite(mrcImage* mrc, char* filename, char* message, long mode);
 
  extern mrcStatusType mrcTailerWrite(mrcImage* mrc, char* filename, char* message, long mode);
 
  extern mrcStatusType mrcTailerWrite(mrcImage* mrc, char* filename, char* message, long mode);
+
 
 
  #define mrcFileWriteModeGet(x)    BYTE4GETBYTE(x,0)
 
  #define mrcFileWriteModeGet(x)    BYTE4GETBYTE(x,0)
 
  #define mrcImageWriteModeGet(x)    BYTE4GETBYTE(x,1)
 
  #define mrcImageWriteModeGet(x)    BYTE4GETBYTE(x,1)
行518: 行774:
 
  #define mrcFileWriteMode_InfoPrint        1
 
  #define mrcFileWriteMode_InfoPrint        1
 
  #define mrcFileWriteMode_NoCallForStatData 2
 
  #define mrcFileWriteMode_NoCallForStatData 2
+
 
 +
message: エラーメッセージ用<br>
 +
mode: +1: 書き出しデータを表示する, +2: [[mrcImage(API)#画素データの統計処理|統計データを計算]]しない
 +
 
 +
====低分解能での書き出し====
 +
[[ip2mrc]]などで使用されています。
 
  extern mrcStatusType mrcFileWriteLowerResolution(mrcImage* mrc, char* filename, char* message, long sample , long mode);
 
  extern mrcStatusType mrcFileWriteLowerResolution(mrcImage* mrc, char* filename, char* message, long sample , long mode);
  
=== 画素のデータの取得 ===
+
===データコピー===
====ピクセル単位での画素データの取得====
+
src -> dst へコピーする
 +
====画像データのコピー====
 +
extern void lmrcImageCopy(mrcImage* dst, mrcImage* src, mrcImageParaTypeRealCoord to);
 +
to: オフセット(座標)
 +
 
 +
====テイラ情報のコピー====
 +
extern void mrcTailerCopy(mrcImage* dst, mrcImage* src, long mode);
 +
mode: +1: 新規作成してコピーする, それ以外: そのままコピーする
 +
 
 +
===画像モードのチェック===
 +
extern int IsFloatImage(mrcImage* mrc, char* message, mrcImageParaTypeInteger mode);
 +
extern int IsFloatFT(mrcImage* mrc, char* message, mrcImageParaTypeInteger mode);
 +
extern int IsImage(mrcImage* mrc, char* message, mrcImageParaTypeInteger mode);
 +
extern int IsFT(mrcImage* mrc, char* message, mrcImageParaTypeInteger mode);
 +
extern int IsFFT(mrcImage* mrc, char* message, mrcImageParaTypeInteger mode);
 +
戻り値: 0: 該当しない, 1: 該当する
 +
 
 +
=== 画素データの取得 ===
 +
====ピクセル単位の画素データの取得====
 
  extern double mrcPixelDataGet(mrcImage* mrc,
 
  extern double mrcPixelDataGet(mrcImage* mrc,
 
                               mrcImageParaTypeReal x /* Pixel Unit */,
 
                               mrcImageParaTypeReal x /* Pixel Unit */,
行530: 行809:
 
                               mrcPixelDataType mode,
 
                               mrcPixelDataType mode,
 
                               mrcPixelDataHowToGet how);
 
                               mrcPixelDataHowToGet how);
 +
座標(x, y, z)におけるデータを取得し、dataに格納されます。<br>
 +
[[mrcImage(API)#ピクセルデータ|mode及びhow]]により取得するデータが異なります。<br>
  
 
====オングストローム単位での画素データの取得====
 
====オングストローム単位での画素データの取得====
行554: 行835:
 
  extern void mrcInfoSet(mrcImage* mrc, FILE* fptIn, FILE* fptOut, mrcImageParaTypeInteger mode);
 
  extern void mrcInfoSet(mrcImage* mrc, FILE* fptIn, FILE* fptOut, mrcImageParaTypeInteger mode);
  
====ピクセル単位の画素データの設定====
+
====画素情報の設定====
 +
extern void mrcImageInfoSet(mrcImage* mrc, FILE* fptIn, FILE* fptOut, long mode);
 +
 
 +
====フィラメントデータの作成====
 +
入力ファイルinを基にフィラメントデータoutを作成する。<br>
 +
[[mrcImage(API)#mrcImageDataSetMode|mrcImageDataSetMode]](mode)によって、inの取得位置が異なることに注意。
 
  extern void mrcImageDataSet(mrcImage* out,  
 
  extern void mrcImageDataSet(mrcImage* out,  
 
  mrcImage* in,  
 
  mrcImage* in,  
行562: 行848:
 
  float phi,
 
  float phi,
 
  mrcImageDataSetMode  mode);
 
  mrcImageDataSetMode  mode);
 +
 +
====ピクセル単位の画素データの設定====
 +
extern double mrcPixelDataSet(mrcImage* mrc,
 +
      mrcImageParaTypeReal x /* Pixel Unit */,
 +
      mrcImageParaTypeReal y /* Pixel Unit */,
 +
      mrcImageParaTypeReal z /* Pixel Unit */,
 +
      double data,
 +
      mrcPixelDataType mode);
  
 
====オングストローム単位での画素データの設定====
 
====オングストローム単位での画素データの設定====
行571: 行865:
 
        mrcPixelDataType mode);
 
        mrcPixelDataType mode);
  
====インライン型関数の画素データの取得====
+
====インライン型関数の画素データの設定====
extern double mrcPixelDataSet(mrcImage* mrc,
+
      mrcImageParaTypeReal x /* Pixel Unit */,
+
      mrcImageParaTypeReal y /* Pixel Unit */,
+
      mrcImageParaTypeReal z /* Pixel Unit */,
+
      double data,
+
      mrcPixelDataType mode);
+
+
 
  static inline void mrcPixelDataSetFloatImage(mrcImage* img,  
 
  static inline void mrcPixelDataSetFloatImage(mrcImage* img,  
 
  mrcImageParaTypeInteger x, mrcImageParaTypeInteger y, mrcImageParaTypeInteger z, double data)
 
  mrcImageParaTypeInteger x, mrcImageParaTypeInteger y, mrcImageParaTypeInteger z, double data)
{
+
 
img->ImageFloatImage[x + y*img->HeaderN.x + z*img->HeaderN.x*img->HeaderN.y] = (float)data;
+
}
+
+
 
  static inline void mrcPixelDataSetFloatFTRe(mrcImage* fft,  
 
  static inline void mrcPixelDataSetFloatFTRe(mrcImage* fft,  
 
  mrcImageParaTypeInteger x, mrcImageParaTypeInteger y, mrcImageParaTypeInteger z, double data)
 
  mrcImageParaTypeInteger x, mrcImageParaTypeInteger y, mrcImageParaTypeInteger z, double data)
{
+
 
fft->ImageFloatImage[2*(x + y*(fft->HeaderN.x/2+1) + z*(fft->HeaderN.x/2+1)*fft->HeaderN.y)] = (float)data;
+
}
+
+
 
  static inline void mrcPixelDataSetFloatFTIm(mrcImage* fft,  
 
  static inline void mrcPixelDataSetFloatFTIm(mrcImage* fft,  
 
  mrcImageParaTypeInteger x, mrcImageParaTypeInteger y, mrcImageParaTypeInteger z, double data)
 
  mrcImageParaTypeInteger x, mrcImageParaTypeInteger y, mrcImageParaTypeInteger z, double data)
{
+
 
fft->ImageFloatImage[2*(x + y*(fft->HeaderN.x/2+1) + z*(fft->HeaderN.x/2+1)*fft->HeaderN.y)+1] = (float)data;
+
===画素データの統計処理===
}
+
最大値、最小値、平均値を算出(mrcのヘッダ情報に格納する)
+
 
  extern void mrcStatDataSet(mrcImage* mrc, mrcImageParaTypeInteger mode);
 
  extern void mrcStatDataSet(mrcImage* mrc, mrcImageParaTypeInteger mode);
  
 
=== 画像処理一般のライブラリ ===
 
=== 画像処理一般のライブラリ ===
====mrcImageOperation 画像の演算====
+
====画像の演算(mrcImageOperation)====
 
=====単項演算=====
 
=====単項演算=====
 
======加算======
 
======加算======
行618: 行898:
 
  void ImageAbs(mrcImage* out ,mrcImage* in);                              out := fabs(in);
 
  void ImageAbs(mrcImage* out ,mrcImage* in);                              out := fabs(in);
  
======それ以外======
+
======2乗、平方根======
 
  void lmrcImageSquare(mrcImage* in);                                      in := in*in
 
  void lmrcImageSquare(mrcImage* in);                                      in := in*in
 
  void lmrcImageRoot(mrcImage* in ,double eps);                            in := sqrt(in), if in>eps else in:=0
 
  void lmrcImageRoot(mrcImage* in ,double eps);                            in := sqrt(in), if in>eps else in:=0
行642: 行922:
 
  void mrcImageStdErr(mrcImage* se, mrcImage* avg, mrcImage* avg2, long number);  se := sqrt(avg2 - avg*avg)/number, at present, avg, avg2 must be given.
 
  void mrcImageStdErr(mrcImage* se, mrcImage* avg, mrcImage* avg2, long number);  se := sqrt(avg2 - avg*avg)/number, at present, avg, avg2 must be given.
  
===エンディアン関連===
+
====エンディアン関連====
 
  extern int mrcImageByteSwap(mrcImage* mrc, long mode);
 
  extern int mrcImageByteSwap(mrcImage* mrc, long mode);
  
===mrcImageInfo===
+
====投影====
 
  extern void lmrcImageXSection(mrcImage* proj, mrcImage* img, double Y);
 
  extern void lmrcImageXSection(mrcImage* proj, mrcImage* img, double Y);
 
  extern void lmrcImageYSection(mrcImage* proj, mrcImage* img, double X);
 
  extern void lmrcImageYSection(mrcImage* proj, mrcImage* img, double X);
行662: 行942:
 
  extern void lmrcImageHistgram4(double** hist, double delta, mrcImage* img);
 
  extern void lmrcImageHistgram4(double** hist, double delta, mrcImage* img);
 
  extern void lmrcImageHistgram6(double** hist, unsigned long nlevel, double Low, double High, mrcImage* img);
 
  extern void lmrcImageHistgram6(double** hist, unsigned long nlevel, double Low, double High, mrcImage* img);
 +
 +
====統計データの取得====
 +
[[mrcImage]]データから[[mrcImage(API)#画像の統計データ|画像の統計データ]]を取得する。
 
  extern void lmrcImageInformation(mrcImageInformation* info, mrcImage* img);
 
  extern void lmrcImageInformation(mrcImageInformation* info, mrcImage* img);
  
===mrcImageCopy===
+
====画素データ変換====
  extern void lmrcImageCopy(mrcImage* dst, mrcImage* src, mrcImageParaTypeRealCoord to);
+
画素データをint型に変換する
 
+
  extern void lmrcImageToIntImage(mrcImage* dst, mrcImage* src, mrcImageParaTypeInteger mode);
===mrcUtil===
+
extern int IsFloatImage(mrcImage* mrc, char* message, mrcImageParaTypeInteger mode);
+
extern int IsFloatFT(mrcImage* mrc, char* message, mrcImageParaTypeInteger mode);
+
extern int IsImage(mrcImage* mrc, char* message, mrcImageParaTypeInteger mode);
+
extern int IsFT(mrcImage* mrc, char* message, mrcImageParaTypeInteger mode);
+
extern int IsFFT(mrcImage* mrc, char* message, mrcImageParaTypeInteger mode);
+
extern void mrcImageInfoSet(mrcImage* mrc, FILE* fptIn, FILE* fptOut, long mode);
+
  
===mrcImageToIntImage===
+
====FFT関連====
extern void lmrcImageToIntImage(mrcImage* dst, mrcImage* src, mrcImageParaTypeInteger mode);
+
+
 
  extern void lfft2d(mrcImage* fft, mrcImage* img);
 
  extern void lfft2d(mrcImage* fft, mrcImage* img);
 
   
 
   
行687: 行961:
 
  extern void lmrcFFTFGconj(mrcImage* out, mrcImage* in1, mrcImage* in2);
 
  extern void lmrcFFTFGconj(mrcImage* out, mrcImage* in1, mrcImage* in2);
 
  extern void lmrcFFTFxG(mrcImage* out, mrcImage* in1, mrcImage* in2);
 
  extern void lmrcFFTFxG(mrcImage* out, mrcImage* in1, mrcImage* in2);
 +
 +
====画像データの相関====
 
  extern void lmrcImageCorrelation(mrcImage* out, mrcImage* in, mrcImage* ref, long mode);
 
  extern void lmrcImageCorrelation(mrcImage* out, mrcImage* in, mrcImage* ref, long mode);
 
  extern void lmrcImageCorrelationModePrint(FILE* fpt);
 
  extern void lmrcImageCorrelationModePrint(FILE* fpt);
行692: 行968:
 
  extern void lmrcImageCorrelationWithCTFCompensation(mrcImage* out, mrcImage* in, ctfInfo* inctf, mrcImage* ref, ctfInfo* refctf, long mode);
 
  extern void lmrcImageCorrelationWithCTFCompensation(mrcImage* out, mrcImage* in, ctfInfo* inctf, mrcImage* ref, ctfInfo* refctf, long mode);
  
===mrcError===
+
===エラー処理===
 
  extern mrcStatusType mrcError(char* message, char* inRtnName, char* callRtnName, mrcStatusType status);
 
  extern mrcStatusType mrcError(char* message, char* inRtnName, char* callRtnName, mrcStatusType status);
 
  extern mrcStatusType mrcErrorMsg(FILE* fpt, char* message, char* inRtnName, char* callRtnName, mrcStatusType status);
 
  extern mrcStatusType mrcErrorMsg(FILE* fpt, char* message, char* inRtnName, char* callRtnName, mrcStatusType status);
  
===lmrcFFTInfo===
+
===コマンド毎の処理===
 +
====lmrcFFTInfo====
 
  extern floatVector* lmrcFSInfoXAxisMag(mrcImage* fft);
 
  extern floatVector* lmrcFSInfoXAxisMag(mrcImage* fft);
 
  extern floatVector* lmrcFSInfoXAxisPhase(mrcImage* fft);
 
  extern floatVector* lmrcFSInfoXAxisPhase(mrcImage* fft);
行707: 行984:
 
  extern floatVector* lmrcFSInfoSpacing(mrcImage* fft);
 
  extern floatVector* lmrcFSInfoSpacing(mrcImage* fft);
  
===mrcImageCheckSameSize===
+
====mrcImageCheckSameSize====
 
  extern void lmrcImageCheckSameSize(mrcImage* in, mrcImage* ref);
 
  extern void lmrcImageCheckSameSize(mrcImage* in, mrcImage* ref);
  
===mrcImageCheckFFT===
+
====mrcImageCheckFFT====
 +
入力ファイルinのモードに関係なくFFT画像をrefへ出力します。
 
  extern void lmrcImageCheckFFT(mrcImage* in, mrcImage* ref);
 
  extern void lmrcImageCheckFFT(mrcImage* in, mrcImage* ref);
  
===lmrcImageSmoothing===
+
====lmrcImageSmoothing====
 +
設定データ[[mrcImage(API)#lmrcImageSmoothingInfo|lmrcImageSmoothingInfo]]を使用します。
 
  extern void lmrcImageSmoothingModeInfo(FILE* fpt);
 
  extern void lmrcImageSmoothingModeInfo(FILE* fpt);
 
  extern void lmrcImageSmoothing(mrcImage* dst, mrcImage* src, lmrcImageSmoothingInfo* info, long mode);
 
  extern void lmrcImageSmoothing(mrcImage* dst, mrcImage* src, lmrcImageSmoothingInfo* info, long mode);
  
===lmrcImageCVE===
+
====lmrcImageCVE====
 +
設定データ[[mrcImage(API)#lmrcImageCVEInfo|lmrcImageCVEInfo]]を使用します。
 
  extern void lmrcImageCVE(mrcImage* dst, mrcImage* src, lmrcImageCVEInfo* info);
 
  extern void lmrcImageCVE(mrcImage* dst, mrcImage* src, lmrcImageCVEInfo* info);
  
===lmrcImageTfunction===
+
====lmrcImageTfunction====
 +
設定データ[[mrcImage(API)#lmrcImageTfunctionInfo|lmrcImageTfunctionInfo]]を使用します。
 
  extern void lmrcImageTfunction(mrcImage* dst, mrcImage* src, lmrcImageTfunctionInfo* info, long mode);
 
  extern void lmrcImageTfunction(mrcImage* dst, mrcImage* src, lmrcImageTfunctionInfo* info, long mode);
  
===lmrcImageHighlighting===
+
====lmrcImageHighlighting====
 +
設定データ[[mrcImage(API)#lmrcImageHighlightInfo|lmrcImageHighlightInfo]]を使用します。
 
  extern void lmrcImageHighlightingInfoPrint(FILE* fpt);
 
  extern void lmrcImageHighlightingInfoPrint(FILE* fpt);
 
  extern void lmrcImageHighlighting(mrcImage* dst, mrcImage* src, lmrcImageHighlightInfo* info);
 
  extern void lmrcImageHighlighting(mrcImage* dst, mrcImage* src, lmrcImageHighlightInfo* info);
  
===lmrcImageLowPassFilter===
+
====lmrcImageLowPassFilter====
 +
設定データ[[mrcImage(API)#lmrcImageLowPassFilterInfo|lmrcImageLowPassFilterInfo]]を使用します。
 
  extern void lmrcImageLowPassFilter(mrcImage* dst, mrcImage* src, lmrcImageLowPassFilterInfo* info, long mode);
 
  extern void lmrcImageLowPassFilter(mrcImage* dst, mrcImage* src, lmrcImageLowPassFilterInfo* info, long mode);
  
===lmrcImageHighPassFilter===
+
====lmrcImageHighPassFilter====
 +
設定データ[[mrcImage(API)#lmrcImageHighPassFilterInfo|lmrcImageHighPassFilterInfo]]を使用します。
 
  extern void lmrcImageHighPassFilter(mrcImage* dst, mrcImage* src, lmrcImageHighPassFilterInfo* info, long mode);
 
  extern void lmrcImageHighPassFilter(mrcImage* dst, mrcImage* src, lmrcImageHighPassFilterInfo* info, long mode);
  
===lmrcImageBandPassFilter===
+
====lmrcImageBandPassFilter====
 +
設定データ[[mrcImage(API)#lmrcImageBandPassFilterInfo|lmrcImageBandPassFilterInfo]]を使用します。
 
  extern void lmrcImageBandPassFilter(mrcImage* dst, mrcImage* src, lmrcImageBandPassFilterInfo* info, long mode);
 
  extern void lmrcImageBandPassFilter(mrcImage* dst, mrcImage* src, lmrcImageBandPassFilterInfo* info, long mode);
  
===lmrcImageShrink===
+
====lmrcImageShrink====
 
  extern void lmrcImageShrink(mrcImage* dst, mrcImage* src, mrcImageParaTypeIntegerCoord S, long mode);
 
  extern void lmrcImageShrink(mrcImage* dst, mrcImage* src, mrcImageParaTypeIntegerCoord S, long mode);
  
===lmrcImageShift===
+
====lmrcImageShift====
 
  extern void lmrcImageShift(mrcImage* out, mrcImage* in, mrcImageParaTypeRealCoord shift, mrcPixelDataHowToGet mode);
 
  extern void lmrcImageShift(mrcImage* out, mrcImage* in, mrcImageParaTypeRealCoord shift, mrcPixelDataHowToGet mode);
 
  extern void lmrcImageShiftFollowingGC(mrcImage* out, mrcImage* in, int mode);
 
  extern void lmrcImageShiftFollowingGC(mrcImage* out, mrcImage* in, int mode);
  
===mrcImagePrint===
+
====mrcImagePrint====
 
  extern  void mrcInfoPrint(FILE* fpt, mrcImage* mrc, mrcImageParaTypeInteger mode);
 
  extern  void mrcInfoPrint(FILE* fpt, mrcImage* mrc, mrcImageParaTypeInteger mode);
 +
 +
====lmrcImageMultiCTFCompensation====
 +
設定データ[[mrcImage(API)#lmrcImageMultiCTFCompensationInfo|lmrcImageMultiCTFCompensationInfo]]を使用します。
 +
extern void lmrcImageMultiCTFCompensationInfoInit(lmrcImageMultiCTFCompensationInfo* info);
 +
extern void lmrcImageMultiCTFCompensationInfoSet(lmrcImageMultiCTFCompensationInfo* info);
 +
extern void lmrcImageMultiCTFCompensation(mrcImage* dst, mrcImage* src, ctfInfo* ctf, long nfile, lmrcImageMultiCTFCompensationInfo info, long mode);
 +
 +
====lmrcImageCTFObservation====
 +
extern void lmrcImageCTFObservation(mrcImage* dst, mrcImage* src, ctfInfo* ctf, long mode);
 +
extern void lmrcImagesCTFObservation(mrcImage* dst, mrcImage* src, ctfInfo* ctf, long mode);
 +
 +
====lmrcImageCTFCompensation====
 +
extern void lmrcImageCTFCompensation(mrcImage* src, ctfInfo* ctf, long mode);
 +
 +
====lmrcImageCTFSN====
 +
設定データ[[mrcImage(API)#lmrcImageCTFSNInfo|lmrcImageCTFSNInfo]]を使用します。
 +
extern void lmrcImageCTFSN(mrcImage *outMrc, const mrcImage *inMrc, lmrcImageCTFSNInfo *info, long mode);
 +
 +
====lmrcImageFourierPowerSpectrum====
 +
設定データ[[mrcImage(API)#lmrcImageFourierPowerSpectrumInfo|lmrcImageFourierPowerSpectrumInfo]]を使用します。
 +
extern mrcImageFourierPowerSpectrum lmrcImageFourierPowerSpectrumMakeSpectrum(const mrcImage *inFFT, lmrcImageFourierPowerSpectrumInfo *info);
 +
extern void lmrcImageFourierPowerSpectrumDeleteSpectrum(mrcImageFourierPowerSpectrum theSpectrum);
 +
extern mrcImageFourierPowerSpectrum lmrcImageFourierPowerSpectrum(const mrcImage *inMrc, lmrcImageFourierPowerSpectrumInfo *info, long mode);
 +
 +
extern void lmrcImageRotation3DModePrint(FILE* fpt);
 +
extern void lmrcImageRotation3DFollowingEulerAngle(mrcImage* dst, mrcImage* src, const char* m,
 +
mrcImageParaTypeReal rot1, mrcImageParaTypeReal rot2, mrcImageParaTypeReal rot3, mrcPixelDataHowToGet mode, int mode2);
 +
 +
extern void lmrcImageRotation3DFollowingMatrix3D(mrcImage* dst, mrcImage* src, Matrix3D mat, mrcPixelDataHowToGet mode, int mode2);
 +
 +
extern void lmrcImageRotation3DZXY(mrcImage* dst, mrcImage* src, 
 +
mrcImageParaTypeReal rotx, mrcImageParaTypeReal roty, mrcImageParaTypeReal rotz, mrcPixelDataHowToGet mode, int mode2);
 +
 +
extern void lmrcImageRotation2D(mrcImage* dst, mrcImage* src, double angle, mrcPixelDataHowToGet mode);
 +
 +
入力画像srcを角度angleで回転した画像をdstへ格納します。(mode: [[#補間方法]])
 +
extern void lmrcImageRotation2DPeriodicBoundary(mrcImage* dst, mrcImage* src, double angle, mrcPixelDataHowToGet mode);
 +
<br>
 +
 +
====mrcImageSectionGet====
 +
extern char* mrcImageSectionGetModeDescription(long mode);
 +
extern void mrcImageSectionGet(mrcImage* dst, mrcImage* src, mrcImageParaTypeReal z, long mode);
 +
 +
====mrcImageSectionSet====
 +
extern void mrcImageSectionSet(mrcImage* dst, mrcImage* src, mrcImageParaTypeReal z, long mode);
 +
extern double lmrcImageMaxDataGet(mrcImage* src, long mode);

2015年3月23日 (月) 05:47時点における最新版

DataManip/mrcImageは、mrcImage型の画像を取り扱うための低水準APIです。

目次

定数

マスク処理

typedef unsigned int mrcStatusMask;
typedef unsigned int mrcStatusType;
#define  mrcStatusMask_ExitFailure  ((mrcStatusMask)0x80000000L)
#define  mrcStatusMask_Warning      ((mrcStatusMask)0x40000000L)
#define  mrcStatusMask_Information  ((mrcStatusMask)0x20000000L)
#define  mrcStatusMask_Message      ((mrcStatusMask)0x10000000L)
#define  mrcStatusMask_1B           ((mrcStatusMask)0x08000000L)
#define  mrcStatusMask_1A           ((mrcStatusMask)0x04000000L)
#define  mrcStatusMask_19           ((mrcStatusMask)0x02000000L)
#define  mrcStatusMask_18           ((mrcStatusMask)0x01000000L)
#define  mrcStatusMask_17           ((mrcStatusMask)0x00800000L)
#define  mrcStatusMask_16           ((mrcStatusMask)0x00400000L)
#define  mrcStatusMask_15           ((mrcStatusMask)0x00200000L)
#define  mrcStatusMask_14           ((mrcStatusMask)0x00100000L)
#define  mrcStatusMask_ReferMRCInfo ((mrcStatusMask)0x00080000L)
#define  mrcStatusMask_Mode         ((mrcStatusMask)0x00040000L)
#define  mrcStatusMask_ReferMemory  ((mrcStatusMask)0x00020000L)
#define  mrcStatusMask_ReferFile    ((mrcStatusMask)0x00010000L)

mrcファイルの状態

#define  MRC_Status_OK              ((mrcStatusType)0x00000000L)

#define  MRC_FileCanNotOpened       ((mrcStatusType)0x00000000L|mrcStatusMask_ReferFile)
#define  MRC_ImageHeaderCanNotRead  ((mrcStatusType)0x00000001L|mrcStatusMask_ReferFile)
#define  MRC_ImageDataCanNotRead    ((mrcStatusType)0x00000002L|mrcStatusMask_ReferFile)
#define  MRC_ImageHeaderCanNotWrite ((mrcStatusType)0x00000003L|mrcStatusMask_ReferFile)
#define  MRC_ImageDataCanNotWrite   ((mrcStatusType)0x00000004L|mrcStatusMask_ReferFile)
#define  MRC_FileCanNotClosed       ((mrcStatusType)0x00000005L|mrcStatusMask_ReferFile)

#define  MRC_MemoryNotAllocate      ((mrcStatusType)0x00000000L|mrcStatusMask_ReferMemory)

#define  MRC_ModeNotSupported       ((mrcStatusType)0x00000000L|mrcStatusMask_Mode)
#define  MRC_ModeZNot1FFTMode       ((mrcStatusType)0x00000001L|mrcStatusMask_Mode)

#define  MRC_SizeOfZero             ((mrcStatusType)0x00000000L|mrcStatusMask_ReferMRCInfo)
extern char* mrcImageGeneralTypeList[];

サイズ

ヘッダサイズ

#define MRC_HEADER (1024)

テイラサイズ

#define MRC_TAILER (1024)

画像モード

mrcファイル互換のための定義
typedef	mrcImageParaTypeInteger mrcImageMode;
#define	MRC_char_image	    	 ((mrcImageMode)0)
#define	MRC_short_image	    	 ((mrcImageMode)1)
#define	MRC_float_image	    	 ((mrcImageMode)2)
#define	MRC_complex_short_ft     ((mrcImageMode)3)
#define	MRC_complex_float_ft     ((mrcImageMode)4)
#define	MRC_long_image	         ((mrcImageMode)101)
#define	MRC_double_image	     ((mrcImageMode)102)
#define	MRC_complex_long_ft      ((mrcImageMode)103)
#define	MRC_complex_double_ft    ((mrcImageMode)104)
#define	MRC_complex_short_fft    ((mrcImageMode)1003)
#define	MRC_complex_float_fft    ((mrcImageMode)1004)
#define	MRC_complex_long_fft     ((mrcImageMode)1103)
#define	MRC_complex_double_fft   ((mrcImageMode)1104)
#define	MRC_NotSuppotedMode      ((mrcImageMode)0xffffffffL)
#define	mrcCharImage	    	 ((mrcImageMode)0)
#define	mrcShortImage	    	 ((mrcImageMode)1)
#define	mrcFloatImage	    	 ((mrcImageMode)2)
#define	mrcComplexShortFT        ((mrcImageMode)3)
#define	mrcComplexFloatFT        ((mrcImageMode)4)
#define	mrcComplexFloatOneDimFT  ((mrcImageMode)5)
IMOD
#define	mrcUShortImage           ((mrcImageMode)6)
#define	mrcCharImageRGB          ((mrcImageMode)16)
IMOD: (6,7) -> (26,27)
#define	mrcFloatRadonImage       ((mrcImageMode)26)
#define	mrcFloatRadonFT          ((mrcImageMode)27)
#define	mrcLongImage	         ((mrcImageMode)101)
#define	mrcDoubleImage	         ((mrcImageMode)102)
#define	mrcComplexLongFT         ((mrcImageMode)103)
#define	mrcComplexDoubleFT       ((mrcImageMode)104)
#define	mrcComplexShortFFT       ((mrcImageMode)1003)
#define	mrcComplexFloatFFT       ((mrcImageMode)1004)
#define	mrcComplexLongFFT        ((mrcImageMode)1103)
#define	mrcComplexDoubleFFT      ((mrcImageMode)1104)
#define	mrcNotSuppotedMode       ((mrcImageMode)0xffffffffL)
#define MRC_MAX_LABEL_N    (10)
#define MRC_MAX_LABEL_LEN  (80)
#define MRC_MAX_EXTRA      (29)
#define MRC_MAX_EXTRA_CCP4 (15)

2D投影モード

#define  mrcImageTailerMode2DProjection 0

画像情報

統計データの算出モード

typedef enum mrcImageInformationMode {
	meanOfAll             = 0,
	meanOfSphereSurface   = 1,
	meanOfCylinderSurface = 2,
	meanOfEdge            = 3, 
	meanOfCentre          = 4,
	meanOfSparse          = 5,
	meanOf2DEdgeY         = 6,
	RMSofAllPixels       = 7
} mrcImageInformationMode;

平均値などを算出する関数(lmrcImageInformationlmrcImageSolventFlattening(API)など)のモードとして設定します。
mrcImageInformation.modeの値として使用します。

ピクセルデータ

データの種類

typedef enum mrcPixelDataType {
    mrcPixelRePart = 0,
    mrcPixelImPart,
    mrcPixelMag,
    mrcPixelPow,
    mrcPixelLogMag,
    mrcPixelLogPow,
    mrcPixelPhase
} mrcPixelDataType;

設定・取得するピクセルデータのタイプで、mrcPixselDataSetmrcPixselDataGetの引数(mode)として使用します。

モード 実画像 FT画像
mrcPixelRePart データ 実部データ
mrcPixelImPart 対応無し 虚部データ
mrcPixelMag データ 振幅: (実部^2 + 虚部^2)^(1/2)
mrcPixelPow データ^2 強度: 実部^2 + 虚部^2
mrcPixelLogMag 対応無し ログ振幅: (log10(実部^2 + 虚部^2)) / 2
mrcPixelLogPow 対応無し ログ強度: log10(実部^2 + 虚部^2)
mrcPixelPhase 対応無し 位相


補間方法

typedef enum mrcPixelDataHowToGet {
    mrcPixelHowNearest = 0,
    mrcPixelHowLinear,
    mrcPixelHowCubicConv,
    mrcPixelHowPolySig
} mrcPixelDataHowToGet;

ピクセルデータの補間方法で、mrcPixselDataGetの引数(how)として使用します。

モード 設定値 補間方法
mrcPixelHowNearest 0 最近傍法
mrcPixelHowLinear 1 線形補間法
mrcPixelHowCubicConv 2 3次補間法
mrcPixelHowPolySig 3 2次曲面補間法


mrcImageDataSetMode

typedef enum mrcImageDataSetMode {
	mrcImageDataSetModeCentre = 0,
	mrcImageDataSetModeOrigin = 1
} mrcImageDataSetMode;

mrcImageDataSetのモードとして使用します。

定数名

説明

mrcImageDataSetModeCentre

0

画像の中心から取得する

mrcImageDataSetModeOrigin

1

原点から取得する


構造体

マスク処理

typedef union MRC_Status_t {
   mrcStatusType all;
   struct Content {
#ifdef M68
       unsigned char level;
       unsigned char category;
       short detail;
#else
       short detail;
       unsigned char category;
       unsigned char level;
#endif
	} status;
} MRC_Status_t;
#ifdef M68
typedef int mrcImageParaTypeInteger;
#else
typedef int mrcImageParaTypeInteger;
#endif
typedef float mrcImageParaTypeReal;
typedef unsigned char mrcImageParaTypeCharacter;

座標

整数: ピクセルデータなどを扱うときに使用します。

typedef struct mrcImageParaTypeIntegerCoord {
	mrcImageParaTypeInteger x;
	mrcImageParaTypeInteger y;
	mrcImageParaTypeInteger z;
} mrcImageParaTypeIntegerCoord;

実数: 実データやPDBデータなどを扱うときに使用します。

typedef struct mrcImageParaTypeRealCoord {
	mrcImageParaTypeReal x;
	mrcImageParaTypeReal y;
	mrcImageParaTypeReal z;
} mrcImageParaTypeRealCoord;

mrcImageの構造

typedef struct mrcImage {
	mrcImageHeader          Header;
	size_t BytePerImage;
	mrcImageParaTypeInteger BytePerBand;
	mrcImageParaTypeInteger BandPerPixel;
	size_t PixelPerImage;
	mrcStatusType           status;
	char*           Image;
	unsigned char*  ImageCharImage;
	unsigned short* ImageShortImage;
	unsigned long*  ImageLongImage;
	float*          ImageFloatImage;
	double*         ImageDoubleImage;

	/* Tailer */
	mrcImageTailer*         Tailer;	
	mrcImageParaTypeInteger numTailer;

	/* FEIextendedHeader */
	FEIextendedHeader*      FEIHeader;
	mrcImageParaTypeInteger numFEIHeader;

 	/* Dummy */
	char*     dummyHeader;
	mrcImageParaTypeInteger dummyHeaderByte;

	/* Swap Bytes */
	mrcImageParaTypeInteger flagByteSwap;

	/* flag CCP4-2000 */
	mrcImageParaTypeInteger   flagCCP4;
	mrcImageParaTypeInteger   ImageOffset; 
	mrcImageSymmetryOperator* SymmetryOperator;
} mrcImage;
構成 対応メンバ 役割
ヘッダ情報 Header 画像モード、サイズなど
隠しデータ BytePerImage, BytePerBand, BandPerPixel, PixelPerImage 1ピクセル当たりのオングストロームなど
ステータス status ファイルの状態
画像データ Image, ImageCharImage, ... , ImageDoubleImage 画像データ本体(実体はImage、他メンバはポインタで管理)
テイラ情報 Tailer, numTailer 角度情報など
FEIヘッダ FEIHeader, numFEIHeader FEI用の拡張ヘッダ
ダミー dummyHeaderByte ダミーデータ
バイトスワップ flagByteSwap 処理系によったエンディアン関連のフラグ
CCP4-2000 flagCCP4, ImageOffset, SymmetryOperator CCP4-2000用


ヘッダ情報

デフォルト
typedef struct _mrcImageHeader {
	mrcImageParaTypeIntegerCoord        N;	    /* Data Numbers */
	mrcImageMode                        Mode;   /* Data Type */
	mrcImageParaTypeIntegerCoord        StartN; /* First in map */
	mrcImageParaTypeIntegerCoord        M;	    /* Number of Intervals */
	mrcImageParaTypeRealCoord           Length; /* Cell Dimensions : Angstrom */
	mrcImageParaTypeReal                Alpha;  /* Cell Angle : Degree */
	mrcImageParaTypeReal                Beta;
	mrcImageParaTypeReal                Gamma;
	mrcImageParaTypeInteger             MAPC;   /* Which Axis Corresponds to Columns */
	mrcImageParaTypeInteger             MAPR;   /* Which Axis Corresponds to Rows */
	mrcImageParaTypeInteger             MAPS;   /* Which Axis Corresponds to Sections */
	mrcImageParaTypeReal                AMin;   /* Minimum Density Value */
	mrcImageParaTypeReal                AMax;   /* Maximum Density Value */
	mrcImageParaTypeReal                AMean;  /* Mean Density Value */
	mrcImageParaTypeInteger             ISPG;   /* Space Group */
	mrcImageParaTypeInteger             NSYMBT; /* Number of bytes */
	mrcImageParaTypeReal                EXTRA[MRC_MAX_EXTRA]; /* Extra, user defined storage space */
	mrcImageParaTypeReal                OriginX;
	mrcImageParaTypeReal                OriginY;
	mrcImageParaTypeInteger             LabelN;
	char                                Label[MRC_MAX_LABEL_N][MRC_MAX_LABEL_LEN];
} _mrcImageHeader;

CCP4 2000
typedef struct _mrcImageHeaderCCP4 {
	mrcImageParaTypeIntegerCoord        N;	    /* Data Numbers */
	mrcImageMode                        Mode;   /* Data Type */
	mrcImageParaTypeIntegerCoord        StartN; /* First in map */
	mrcImageParaTypeIntegerCoord        NI;	    /* Number of Intervals */
	mrcImageParaTypeRealCoord           Length; /* Cell Dimensions : Angstrom */
	mrcImageParaTypeReal                Alpha;  /* Cell Angle : Degree */
	mrcImageParaTypeReal                Beta;
	mrcImageParaTypeReal                Gamma;
	mrcImageParaTypeInteger             MAPC;   /* Which Axis Corresponds to Columns */
	mrcImageParaTypeInteger             MAPR;   /* Which Axis Corresponds to Rows */
	mrcImageParaTypeInteger             MAPS;   /* Which Axis Corresponds to Sections */
	mrcImageParaTypeReal                AMin;   /* Minimum Density Value */
	mrcImageParaTypeReal                AMax;   /* Maximum Density Value */
	mrcImageParaTypeReal                AMean;  /* Mean Density Value */
	mrcImageParaTypeInteger             ISPG;   /* Space Group */
	mrcImageParaTypeInteger             NSYMBT; /* Number of bytes used for storing symmetry operators */
	mrcImageParaTypeInteger             LSKFLG; /* Flag for Skew transformation */
	mrcImageParaTypeReal 				SKWMAT[9]; /* Skew matrix S */
	mrcImageParaTypeReal 				SKWTRN[3]; /* Skew translation */
	mrcImageParaTypeReal                EXTRA[MRC_MAX_EXTRA_CCP4]; /* Extra, user defined storage space */
	mrcImageParaTypeCharacter  			MAP[4];
	mrcImageParaTypeInteger  			MARCHST;
	mrcImageParaTypeReal                ARMS;
	mrcImageParaTypeInteger             LabelN;
	char                                Label[MRC_MAX_LABEL_N][MRC_MAX_LABEL_LEN];
} _mrcImageHeaderCCP4;

IMOD
typedef struct _mrcImageHeaderIMOD {
	mrcImageParaTypeIntegerCoord        N;	    /* Data Numbers */
	mrcImageMode                        Mode;   /* Data Type */
	mrcImageParaTypeIntegerCoord        StartN; /* First in map */
	mrcImageParaTypeIntegerCoord        M;	    /* Number of Intervals */
	mrcImageParaTypeRealCoord           Length; /* PixelSize=Len/M: Angstrom */
	mrcImageParaTypeReal                Alpha;  /* Cell Angle : Degree */
	mrcImageParaTypeReal                Beta;
	mrcImageParaTypeReal                Gamma;
	mrcImageParaTypeInteger             MAPC;   /* Which Axis Corresponds to Columns */
	mrcImageParaTypeInteger             MAPR;   /* Which Axis Corresponds to Rows */
	mrcImageParaTypeInteger             MAPS;   /* Which Axis Corresponds to Sections */
	mrcImageParaTypeReal                AMin;   /* Minimum Density Value */
	mrcImageParaTypeReal                AMax;   /* Maximum Density Value */
	mrcImageParaTypeReal                AMean;  /* Mean Density Value */
	mrcImageParaTypeInteger             ISPG;   /* Space Group */
	mrcImageParaTypeInteger             NSYMBT; /* Number of bytes used for extended header */
	short                               creatid; /* Flag for Skew transformation */
	short                               extra1[15]; /* Flag for Skew transformation */
	short                               nint;
	short                               nreal; /*l Skew matrix S */
	mrcImageParaTypeReal                extra2[5]; /* Extra, user defined storage space */
	mrcImageParaTypeInteger             imodStamp;   
	mrcImageParaTypeInteger             imodFlags;   
	short                               idtype;   
	short                               lnes;   
	short                               nd1;   
	short                               nd2;   
	short                               vd1;   
	short                               vd2;   
	mrcImageParaTypeReal                tiltangles[6]; /* Extra, user defined storage space */
	mrcImageParaTypeReal                xorg; /* Extra, user defined storage space */
	mrcImageParaTypeReal                yorg; /* Extra, user defined storage space */
	mrcImageParaTypeReal                zorg; /* Extra, user defined storage space */
	mrcImageParaTypeCharacter  			MAP[4];
	mrcImageParaTypeInteger  			MARCHST;
	mrcImageParaTypeReal                ARMS;
	mrcImageParaTypeInteger             LabelN;
	char                                Label[MRC_MAX_LABEL_N][MRC_MAX_LABEL_LEN];
} _mrcImageHeaderIMOD;
ヘッダの共用体

以上で定義したヘッダを共用体とします。

typedef union mrcImageHeader {
  unsigned char           All[MRC_HEADER];
  mrcImageParaTypeInteger Int[MRC_HEADER/4];
  mrcImageParaTypeReal    Real[MRC_HEADER/4];
  _mrcImageHeader         Cont;
  _mrcImageHeaderCCP4     ContCCP4;
  _mrcImageHeaderIMOD     ContIMOD;
} mrcImageHeader;

メンバー呼び出しの省略表記を定義

#define HeaderN       Header.Cont.N       
#define HeaderMode    Header.Cont.Mode    
#define HeaderStartN  Header.Cont.StartN  
#define HeaderM       Header.Cont.M       
#define HeaderLength  Header.Cont.Length  
#define HeaderAlpha   Header.Cont.Alpha   
#define HeaderBeta    Header.Cont.Beta    
#define HeaderGamma   Header.Cont.Gamma   
#define HeaderMAPC    Header.Cont.MAPC    
#define HeaderMAPR    Header.Cont.MAPR    
#define HeaderMAPS    Header.Cont.MAPS    
#define HeaderAMin    Header.Cont.AMin    
#define HeaderAMax    Header.Cont.AMax    
#define HeaderAMean   Header.Cont.AMean   
#define HeaderISPG    Header.Cont.ISPG    
#define HeaderNSYMBT  Header.Cont.NSYMBT  
#define HeaderLSKFLG  Header.ContCCP4.LSKFLG
#define HeaderEXTRA   Header.Cont.EXTRA
#define HeaderOriginX Header.Cont.OriginX 
#define HeaderOriginY Header.Cont.OriginY  
#define HeaderLabelN  Header.Cont.LabelN
#define HeaderLabel   Header.Cont.Label

FEI
#define FEI_EXTENDED_HEADER_EACH (128) 
typedef struct _FEIextendedHeader {
	mrcImageParaTypeReal aTilt;   // Alpha tilt, in degrees
	mrcImageParaTypeReal bTilt;   // Beta tilt, in degrees 
	mrcImageParaTypeReal xStage;  // Stage x position. 
								  // Normally in SI units (meters), 
								  // but some older files may be in micrometers. 
								  // Check by looking at values for x,y,z. 
								  // If one of these exceeds 1, it will be micrometers.
	mrcImageParaTypeReal yStage;  // Stage y position. For testing of units see x_stage.
	mrcImageParaTypeReal zStage;  // Stage z position. For testing of units see x_stage.
	mrcImageParaTypeReal xShift;  // Image shift x. For testing of units see x_stage.
	mrcImageParaTypeReal yShift;  // Image shift y. For testing of units see x_stage.
	mrcImageParaTypeReal defocus;  
	mrcImageParaTypeReal expTime;  
	mrcImageParaTypeReal mean;  
	mrcImageParaTypeReal tiltAxis;  
	mrcImageParaTypeReal pixelSize;  
	mrcImageParaTypeReal magnification;  
	mrcImageParaTypeReal ht;  
	mrcImageParaTypeReal binning;  
	mrcImageParaTypeReal appliedDefocus;  
	mrcImageParaTypeReal reminder[FEI_EXTENDED_HEADER_EACH/4-16];  
} _FEIextendedHeader;
typedef union FEIextendedHeader {
	mrcImageParaTypeReal Real[FEI_EXTENDED_HEADER_EACH/4];
	_FEIextendedHeader   Cont;
} FEIextendedHeader;

テイラ情報

typedef struct _mrcImageTailer {
	char                 		Code[4]; 
	mrcImageParaTypeInteger		Mode;  
	char                        EulerAngleMode[4];
	mrcImageParaTypeReal 		Rot1;   
	mrcImageParaTypeReal 		Rot2;
	mrcImageParaTypeReal 		Rot3;
	mrcImageParaTypeInteger 	Mirror;
} _mrcImageTailer;
typedef union mrcImageTailer {
  unsigned char           All[MRC_TAILER];
  mrcImageParaTypeInteger Int[MRC_TAILER/4];
  mrcImageParaTypeReal    Real[MRC_TAILER/4];
  _mrcImageTailer         Cont;
} mrcImageTailer;
typedef char mrcImageSymmetryOperator;

画像の統計データ

mrcImageの統計データを格納する構造体です。
データはmrcImageInformation(API)から取得して、主に入力情報として使用します。

typedef struct mrcImageInformation {
	double mean;
	double rootMeanSquare;
	double meanOfSphereSurface;
	double sdOfSphereSurface;
	double seOfSphereSurface;
	double meanOfCylinderSurface;
	double sdOfCylinderSurface;
	double seOfCylinderSurface;
	double meanOfEdge;
	double sdOfEdge;
	double seOfEdge;
	double max;
	mrcImageParaTypeRealCoord maxCoord;
	double min;
	mrcImageParaTypeRealCoord minCoord;
	double sd;
	double se;
	double rmax;
	long flagrmax;
	double RMS; /* Root mean square */
	int mode;

	/* For Search Area */
	int flagXrange;
	int flagYrange;
	int flagZrange;
	double XrangeMin; 
	double XrangeMax; 
	double YrangeMin; 
	double YrangeMax; 
	double ZrangeMin; 
	double ZrangeMax; 

	int flagCentre;
	double CentreX;
	double CentreY;
	double CentreZ;
} mrcImageInformation;

API毎の設定ファイル

lmrcImageSmoothingInfo

lmrcImageSmoothingの設定データとして使用します。

typedef struct lmrcImageSmoothingInfo  {
	long mode;
	mrcImageParaTypeReal sx; /* Filter kernel size */
	mrcImageParaTypeReal sy;
	mrcImageParaTypeReal sz;
	double sigma;            /* for Lee-Sigma filter  */
} lmrcImageSmoothingInfo;

lmrcImageCVEInfo

lmrcImageCVEの設定データとして使用します。

typedef struct lmrcImageCVEInfo {
	long sx; /* CVE domain size. */
	long sy; /* Apr.30,1996 */
	long sz;
} lmrcImageCVEInfo;

lmrcImageTfunctionInfo

lmrcImageTfunctionの設定データとして使用します。

typedef struct lmrcImageTfunctionInfo {
	long sx; /* Tfunction domain size. */
	long sy; /* June 11,1996 */
	long sz;
} lmrcImageTfunctionInfo;

lmrcImageHighlightInfo

lmrcImageHighlightingの設定データとして使用します。

typedef struct lmrcImageHighlightInfo {
	long mode;
	float Bias; /* May 1,1996 */
	float Grad;
} lmrcImageHighlightInfo;

lmrcImageLowPassFilterInfo

lmrcImageLowPassFilterの設定データとして使用します。

typedef struct lmrcImageLowPassFilterInfo 
{
	long mode; /* June 4,1996 */
	float hvp, width;
} lmrcImageLowPassFilterInfo;

lmrcImageHighPassFilterInfo

lmrcImageHighPassFilterの設定データとして使用します。

typedef struct lmrcImageHighPassFilterInfo 
{
	long mode; /* June 5,1996 */
	float hvp, width;
	float pathWindowLow;
	float pathWindowHigh;
} lmrcImageHighPassFilterInfo;

lmrcImageBandPassFilterInfo

lmrcImageBandPassFilterの設定データとして使用します。

typedef struct lmrcImageBandPassFilterInfo 
{
	long mode; /* June 5,1996 */
	float hvl, hvh, wl, wh;
	int flagLowWeight;
	double lowWeight;
} lmrcImageBandPassFilterInfo;

lmrcImageMultiCTFCompensationInfo

lmrcImageMultiCTFCompensationの設定データとして使用します。

typedef enum lmrcImageMultiCTFCompensationSolventFlatteningMode {
	lmrcImageMultiCTFCompensationSolventFlatteningModeDensityPeakIsSolvent=0,
	lmrcImageMultiCTFCompensationSolventFlatteningModeDefinedSTDIsSolvent=1
} lmrcImageMultiCTFCompensationSolventFlatteningMode;

typedef struct lmrcImageMultiCTFCompensationInfo {
	long   maxiteration;
	double okrms;
	long   diversefactor;
	double z;
	long   nhist;
	FILE*  logfile;
	lmrcImageMultiCTFCompensationSolventFlatteningMode solventMode;
	float  definedSTD;	 	
} lmrcImageMultiCTFCompensationInfo;

lmrcImageCTFSNInfo

lmrcImageCTFSNの設定データとして使用します。

typedef struct lmrcImageCTFSNInfo
{
	long mode, deg1, deg2;
	ctfInfo ctf;
} lmrcImageCTFSNInfo;

lmrcImageFourierPowerSpectrumInfo

lmrcImageFourierPowerSpectrumの設定データとして使用します。

typedef struct mrcImageFourierPowerSpectrum
{
	long n;
	double d, *h;
} mrcImageFourierPowerSpectrum;

typedef struct lmrcImageFourierPowerSpectrumInfo
{
	double dX, dY, dZ;
} lmrcImageFourierPowerSpectrumInfo;

API

初期化

画像データの初期化

extern mrcStatusType mrcInit(mrcImage* mrc, char* filaname);

ヘッダ情報(画像モードやサイズ)を別のmrcファイルから読み出す場合はfilenameにファイル名を指定し、NULLの場合はデフォルト設定となります。画像データをmrcのメンバーImageに新規作成し, ポインタをImageXXXXImage(XXXX: Char, Shortなど)に格納されます。

※ このAPIは無条件でmrc->Imageにメモリを確保しますので、mrc->Imageが空であることが保証されるときのみ使用して下さい。(空でない場合はmrcImageFreeでメモリを解放してから確認します。)

ヘッダ情報の初期化

extern mrcStatusType mrcDefaultHeaderValueSet(mrcImage* mrc);
extern mrcStatusType mrcDefaultHeaderValueSetOnlyFixedValue(mrcImage* mrc);

隠しデータの設定

extern mrcStatusType mrcHiddenDataSet(mrcImage* mrc, long mode);

テイラ情報の初期化

extern void mrcTailerInit(mrcImage* mrc, long mode);

画像データの解放

extern void mrcImageFree(mrcImage* mrc, char* message);

画像データの実体(Image)を解放し、Image, ImageXXXXImage(XXXX: Char, Shortなど)をNULLポインタとします。

ファイルの読み込み

filenameを読み出して、mrcへ格納する。

extern mrcStatusType mrcFileRead  (mrcImage* mrc, char* filename, char* message, long mode);


extern mrcStatusType mrcImageRead (mrcImage* mrc, char* filename, char* message, long mode);
extern mrcStatusType mrcHeaderRead(mrcImage* mrc, char* filename, char* message, long mode);
extern mrcStatusType mrcTailerRead(mrcImage* mrc, char* filename, char* message, long mode);
extern mrcStatusType mrcFileReadGeneral  (mrcImage* mrc, char* filename, char* type, char* message, long mode);
extern mrcStatusType mrcImageReadGeneral  (mrcImage* mrc, char* filename, char* type, char* message, long mode);
extern mrcStatusType mrcHeaderReadGeneral(mrcImage* mrc, char* filename, char* type, char* message, long mode);
extern mrcStatusType mrcTailerReadGeneral(mrcImage* mrc, char* filename, char* type, char* message, long mode);
extern mrcStatusType mrcFileGeneralListPrint(FILE* fpt); 
extern mrcStatusType mrcFileReadFEIextendedMRC  (mrcImage* mrc, char* filename, char* message, long mode);
extern mrcStatusType mrcImageReadFEIextendedMRC (mrcImage* mrc, char* filename, char* message, long mode);
extern mrcStatusType mrcHeaderReadFEIextendedMRC(mrcImage* mrc, char* filename, char* message, long mode);
extern mrcStatusType mrcTailerReadFEIextendedMRC(mrcImage* mrc, char* filename, char* message, long mode);
extern mrcStatusType mrcFileReadIMODextendedMRC  (mrcImage* mrc, char* filename, char* message, long mode);
extern mrcStatusType mrcImageReadIMODextendedMRC (mrcImage* mrc, char* filename, char* message, long mode);
extern mrcStatusType mrcHeaderReadIMODextendedMRC(mrcImage* mrc, char* filename, char* message, long mode);
extern mrcStatusType mrcTailerReadIMODextendedMRC(mrcImage* mrc, char* filename, char* message, long mode);

message: エラーメッセージ用
mode: 読み込みデータを 0: 表示しない, 1: 表示する

ファイルの書き出し

extern mrcStatusType mrcFileWrite  (mrcImage* mrc, char* filename, char* message, long mode);
extern mrcStatusType mrcImageWrite (mrcImage* mrc, char* filename, char* message, long mode);
extern mrcStatusType mrcHeaderWrite(mrcImage* mrc, char* filename, char* message, long mode);
extern mrcStatusType mrcTailerWrite(mrcImage* mrc, char* filename, char* message, long mode);
#define mrcFileWriteModeGet(x)     BYTE4GETBYTE(x,0)
#define mrcImageWriteModeGet(x)    BYTE4GETBYTE(x,1)
#define mrcHeaderWriteModeGet(x)   BYTE4GETBYTE(x,2)
#define mrcTailerWriteModeGet(x)   BYTE4GETBYTE(x,3)
#define mrcFileWriteMode_InfoPrint         1
#define mrcFileWriteMode_NoCallForStatData 2

message: エラーメッセージ用
mode: +1: 書き出しデータを表示する, +2: 統計データを計算しない

低分解能での書き出し

ip2mrcなどで使用されています。

extern mrcStatusType mrcFileWriteLowerResolution(mrcImage* mrc, char* filename, char* message, long sample , long mode);

データコピー

src -> dst へコピーする

画像データのコピー

extern void lmrcImageCopy(mrcImage* dst, mrcImage* src, mrcImageParaTypeRealCoord to);

to: オフセット(座標)

テイラ情報のコピー

extern void mrcTailerCopy(mrcImage* dst, mrcImage* src, long mode);

mode: +1: 新規作成してコピーする, それ以外: そのままコピーする

画像モードのチェック

extern int IsFloatImage(mrcImage* mrc, char* message, mrcImageParaTypeInteger mode);
extern int IsFloatFT(mrcImage* mrc, char* message, mrcImageParaTypeInteger mode);
extern int IsImage(mrcImage* mrc, char* message, mrcImageParaTypeInteger mode);
extern int IsFT(mrcImage* mrc, char* message, mrcImageParaTypeInteger mode);
extern int IsFFT(mrcImage* mrc, char* message, mrcImageParaTypeInteger mode);

戻り値: 0: 該当しない, 1: 該当する

画素データの取得

ピクセル単位の画素データの取得

extern double mrcPixelDataGet(mrcImage* mrc,
                              mrcImageParaTypeReal x /* Pixel Unit */,
                              mrcImageParaTypeReal y /* Pixel Unit */,
                              mrcImageParaTypeReal z /* Pixel Unit */,
                              double* data,
                              mrcPixelDataType mode,
                              mrcPixelDataHowToGet how);

座標(x, y, z)におけるデータを取得し、dataに格納されます。
mode及びhowにより取得するデータが異なります。

オングストローム単位での画素データの取得

extern double mrcImageDataGetbyAU(mrcImage* mrc,
                              mrcImageParaTypeReal x /* Angstrom */,
                              mrcImageParaTypeReal y /* Angstrom */,
                              mrcImageParaTypeReal z /* Angstrom */,
                              double* data,
                              mrcPixelDataType mode,
                              mrcPixelDataHowToGet how);

インライン型関数の画素データの取得

extern inline double mrcPixelDataGetFloatImage(mrcImage* img,
                mrcImageParaTypeInteger x, mrcImageParaTypeInteger y, mrcImageParaTypeInteger z)
extern inline double mrcPixelDataGetFloatFTRe(mrcImage* fft,
                mrcImageParaTypeInteger x, mrcImageParaTypeInteger y, mrcImageParaTypeInteger z)
extern inline double mrcPixelDataGetFloatFTIm(mrcImage* fft,
                mrcImageParaTypeInteger x, mrcImageParaTypeInteger y, mrcImageParaTypeInteger z)

画素のデータの設定

画像情報の設定

extern void mrcInfoSet(mrcImage* mrc, FILE* fptIn, FILE* fptOut, mrcImageParaTypeInteger mode);

画素情報の設定

extern void mrcImageInfoSet(mrcImage* mrc, FILE* fptIn, FILE* fptOut, long mode);

フィラメントデータの作成

入力ファイルinを基にフィラメントデータoutを作成する。
mrcImageDataSetMode(mode)によって、inの取得位置が異なることに注意。

extern void mrcImageDataSet(mrcImage* out, 
							mrcImage* in, 
							mrcImageParaTypeReal x,
							mrcImageParaTypeReal y,
							mrcImageParaTypeReal z,
							float phi,
							mrcImageDataSetMode  mode);

ピクセル単位の画素データの設定

extern double mrcPixelDataSet(mrcImage* mrc,
			      mrcImageParaTypeReal x /* Pixel Unit */,
			      mrcImageParaTypeReal y /* Pixel Unit */,
			      mrcImageParaTypeReal z /* Pixel Unit */,
			      double data,
			      mrcPixelDataType mode);

オングストローム単位での画素データの設定

extern double mrcImageDataSetbyAU(mrcImage* mrc,
			      mrcImageParaTypeReal x /* Angstrom */,
			      mrcImageParaTypeReal y /* Angstrom */,
			      mrcImageParaTypeReal z /* Angstrom */,
			      double data,
			      mrcPixelDataType mode);

インライン型関数の画素データの設定

static inline void mrcPixelDataSetFloatImage(mrcImage* img, 
		mrcImageParaTypeInteger x, mrcImageParaTypeInteger y, mrcImageParaTypeInteger z, double data)
static inline void mrcPixelDataSetFloatFTRe(mrcImage* fft, 
		mrcImageParaTypeInteger x, mrcImageParaTypeInteger y, mrcImageParaTypeInteger z, double data)
static inline void mrcPixelDataSetFloatFTIm(mrcImage* fft, 
		mrcImageParaTypeInteger x, mrcImageParaTypeInteger y, mrcImageParaTypeInteger z, double data)

画素データの統計処理

最大値、最小値、平均値を算出(mrcのヘッダ情報に格納する)

extern void mrcStatDataSet(mrcImage* mrc, mrcImageParaTypeInteger mode);

画像処理一般のライブラリ

画像の演算(mrcImageOperation)

単項演算
加算
void lmrcImageAddedByReal(mrcImage* img, double d);                       img := img+d
減算
void lmrcImageMeanSubtraction(mrcImage* out, mrcImage* in)                      out  :=  in - mean
void lmrcImageMeanSubtraction(mrcImage* out, mrcImage* in)                      out  :=  in - mean
void lmrcImageSubtraction(mrcImage* out, mrcImage* in, double value)            out  :=  in - value

除算
void lmrcImageDevidedByReal(mrcImage* img, double d);                     img := img/d
void lmrcImageDevidedByRealForOnlyPositive(mrcImage* img, double d);      img := img/d, if img>=0, else img:=img;
void lmrcImageDevidedByImage(mrcImage* img, mrcImage* i1, mrcImage* i2);        img := i1/i2, 0 := 0/0, 0 := x/0
絶対値
void ImageAbs(mrcImage* out ,mrcImage* in);                               out := fabs(in);
2乗、平方根
void lmrcImageSquare(mrcImage* in);                                       in := in*in
void lmrcImageRoot(mrcImage* in ,double eps);                             in := sqrt(in), if in>eps else in:=0
2項演算
連続加算
void lmrcImageAdd(mrcImage* img2, mrcImage* img1, long* number);                img2 := img2 + img1, number++
2乗加算
void lmrcSQRImageAdd(mrcImage* img2, mrcImage* img1, long* number);             img2 := img2 + img1*img1, number++
減算
void lmrcImageSubtractionCalc(mrcImage* out, mrcImage* in1, mrcImage* in2)      out  :=  in1 - in2
void llmrcImageSub(mrcImage*out ,mrcImage* in1 ,mrcImage* in2)                  out  : = in1 - in2(上記と同じ機能)

畳み込み
extern void lmrcImageConvolution(mrcImage* out, mrcImage* in,  mrcImage* kernel, int mode);
統計
void lmrcImagetMapForZero(mrcImage* t, mrcImage* avg, mrcImage* se);           t  := avg/se,  at present, avg, se must be given.
void lmrcImageSN(mrcImage* sn, mrcImage* avg, mrcImage* sig);                  sn := avg/sig, at present, avg, sig must be given.
void mrcImageStdDev(mrcImage* sig, mrcImage* avg, mrcImage* avg2, long number); sig:= sqrt(avg2 - avg*avg), at present, avg, avg2 must be given.
void mrcImageStdErr(mrcImage* se, mrcImage* avg, mrcImage* avg2, long number);  se := sqrt(avg2 - avg*avg)/number, at present, avg, avg2 must be given.

エンディアン関連

extern int mrcImageByteSwap(mrcImage* mrc, long mode);

投影

extern void lmrcImageXSection(mrcImage* proj, mrcImage* img, double Y);
extern void lmrcImageYSection(mrcImage* proj, mrcImage* img, double X);
extern void lmrcImageXProjection(mrcImage* proj, mrcImage* img);
extern void lmrcImageYProjection(mrcImage* proj, mrcImage* img);
extern void lmrcImageZProjection(mrcImage* proj, mrcImage* img);
extern void lmrcImageXYProjection(mrcImage* proj, mrcImage* img);
extern void lmrcImageYZProjection(mrcImage* proj, mrcImage* img);
extern void lmrcImageZXProjection(mrcImage* proj, mrcImage* img);

ヒストグラム

extern void lmrcImageHistgram(double** hist, unsigned long nlevel, mrcImage* img);
extern void lmrcImageHistgram2(double** hist, double delta, mrcImage* img);
extern void lmrcImageHistgram5(double** hist, unsigned long nlevel, double Low, double High, mrcImage* img);
extern void lmrcImageHistgram3(double** hist, unsigned long nlevel, mrcImage* img);
extern void lmrcImageHistgram4(double** hist, double delta, mrcImage* img);
extern void lmrcImageHistgram6(double** hist, unsigned long nlevel, double Low, double High, mrcImage* img);

統計データの取得

mrcImageデータから画像の統計データを取得する。

extern void lmrcImageInformation(mrcImageInformation* info, mrcImage* img);

画素データ変換

画素データをint型に変換する

extern void lmrcImageToIntImage(mrcImage* dst, mrcImage* src, mrcImageParaTypeInteger mode);

FFT関連

extern void lfft2d(mrcImage* fft, mrcImage* img);

extern void lmrcImageFFT(mrcImage* fft, mrcImage* img, long mode);
extern void lmrcImageFFTFirstDimensionOnly(mrcImage* fft, mrcImage* img, long mode);
#ifdef FFTW
extern void lmrcImageFFTWFlagSet(unsigned int flag);
#endif
extern void lmrcFFTFGconj(mrcImage* out, mrcImage* in1, mrcImage* in2);
extern void lmrcFFTFxG(mrcImage* out, mrcImage* in1, mrcImage* in2);

画像データの相関

extern void lmrcImageCorrelation(mrcImage* out, mrcImage* in, mrcImage* ref, long mode);
extern void lmrcImageCorrelationModePrint(FILE* fpt);

extern void lmrcImageCorrelationWithCTFCompensation(mrcImage* out, mrcImage* in, ctfInfo* inctf, mrcImage* ref, ctfInfo* refctf, long mode);

エラー処理

extern mrcStatusType mrcError(char* message, char* inRtnName, char* callRtnName, mrcStatusType status);
extern mrcStatusType mrcErrorMsg(FILE* fpt, char* message, char* inRtnName, char* callRtnName, mrcStatusType status);

コマンド毎の処理

lmrcFFTInfo

extern floatVector* lmrcFSInfoXAxisMag(mrcImage* fft);
extern floatVector* lmrcFSInfoXAxisPhase(mrcImage* fft);
extern floatVector* lmrcFSInfoYAxisMag(mrcImage* fft);
extern floatVector* lmrcFSInfoYAxisPhase(mrcImage* fft);
extern floatVector* lmrcFSInfoScatteringAngularDistribution(mrcImage* fft);
extern floatVector* lmrcFSInfoScatteringAngularDistributionAverage(mrcImage* fft);
extern floatVector* lmrcFSInfoScatteringAngularDistributionSD(mrcImage* fft);
extern floatVector* lmrcFSInfoSpacing(mrcImage* fft);

mrcImageCheckSameSize

extern void lmrcImageCheckSameSize(mrcImage* in, mrcImage* ref);

mrcImageCheckFFT

入力ファイルinのモードに関係なくFFT画像をrefへ出力します。

extern void lmrcImageCheckFFT(mrcImage* in, mrcImage* ref);

lmrcImageSmoothing

設定データlmrcImageSmoothingInfoを使用します。

extern void lmrcImageSmoothingModeInfo(FILE* fpt);
extern void lmrcImageSmoothing(mrcImage* dst, mrcImage* src, lmrcImageSmoothingInfo* info, long mode);

lmrcImageCVE

設定データlmrcImageCVEInfoを使用します。

extern void lmrcImageCVE(mrcImage* dst, mrcImage* src, lmrcImageCVEInfo* info);

lmrcImageTfunction

設定データlmrcImageTfunctionInfoを使用します。

extern void lmrcImageTfunction(mrcImage* dst, mrcImage* src, lmrcImageTfunctionInfo* info, long mode);

lmrcImageHighlighting

設定データlmrcImageHighlightInfoを使用します。

extern void lmrcImageHighlightingInfoPrint(FILE* fpt);
extern void lmrcImageHighlighting(mrcImage* dst, mrcImage* src, lmrcImageHighlightInfo* info);

lmrcImageLowPassFilter

設定データlmrcImageLowPassFilterInfoを使用します。

extern void lmrcImageLowPassFilter(mrcImage* dst, mrcImage* src, lmrcImageLowPassFilterInfo* info, long mode);

lmrcImageHighPassFilter

設定データlmrcImageHighPassFilterInfoを使用します。

extern void lmrcImageHighPassFilter(mrcImage* dst, mrcImage* src, lmrcImageHighPassFilterInfo* info, long mode);

lmrcImageBandPassFilter

設定データlmrcImageBandPassFilterInfoを使用します。

extern void lmrcImageBandPassFilter(mrcImage* dst, mrcImage* src, lmrcImageBandPassFilterInfo* info, long mode);

lmrcImageShrink

extern void lmrcImageShrink(mrcImage* dst, mrcImage* src, mrcImageParaTypeIntegerCoord S, long mode);

lmrcImageShift

extern void lmrcImageShift(mrcImage* out, mrcImage* in, mrcImageParaTypeRealCoord shift, mrcPixelDataHowToGet mode);
extern void lmrcImageShiftFollowingGC(mrcImage* out, mrcImage* in, int mode);

mrcImagePrint

extern  void mrcInfoPrint(FILE* fpt, mrcImage* mrc, mrcImageParaTypeInteger mode);

lmrcImageMultiCTFCompensation

設定データlmrcImageMultiCTFCompensationInfoを使用します。

extern void lmrcImageMultiCTFCompensationInfoInit(lmrcImageMultiCTFCompensationInfo* info);
extern void lmrcImageMultiCTFCompensationInfoSet(lmrcImageMultiCTFCompensationInfo* info);
extern void lmrcImageMultiCTFCompensation(mrcImage* dst, mrcImage* src, ctfInfo* ctf, long nfile, lmrcImageMultiCTFCompensationInfo info, long mode);

lmrcImageCTFObservation

extern void lmrcImageCTFObservation(mrcImage* dst, mrcImage* src, ctfInfo* ctf, long mode);
extern void lmrcImagesCTFObservation(mrcImage* dst, mrcImage* src, ctfInfo* ctf, long mode);

lmrcImageCTFCompensation

extern void lmrcImageCTFCompensation(mrcImage* src, ctfInfo* ctf, long mode);

lmrcImageCTFSN

設定データlmrcImageCTFSNInfoを使用します。

extern void lmrcImageCTFSN(mrcImage *outMrc, const mrcImage *inMrc, lmrcImageCTFSNInfo *info, long mode);

lmrcImageFourierPowerSpectrum

設定データlmrcImageFourierPowerSpectrumInfoを使用します。

extern mrcImageFourierPowerSpectrum lmrcImageFourierPowerSpectrumMakeSpectrum(const mrcImage *inFFT, lmrcImageFourierPowerSpectrumInfo *info);
extern void lmrcImageFourierPowerSpectrumDeleteSpectrum(mrcImageFourierPowerSpectrum theSpectrum);
extern mrcImageFourierPowerSpectrum lmrcImageFourierPowerSpectrum(const mrcImage *inMrc, lmrcImageFourierPowerSpectrumInfo *info, long mode);

extern void lmrcImageRotation3DModePrint(FILE* fpt);
extern void lmrcImageRotation3DFollowingEulerAngle(mrcImage* dst, mrcImage* src, const char* m, 
	mrcImageParaTypeReal rot1, mrcImageParaTypeReal rot2, mrcImageParaTypeReal rot3, mrcPixelDataHowToGet mode, int mode2);

extern void lmrcImageRotation3DFollowingMatrix3D(mrcImage* dst, mrcImage* src, Matrix3D mat, mrcPixelDataHowToGet mode, int mode2);

extern void lmrcImageRotation3DZXY(mrcImage* dst, mrcImage* src,  
	mrcImageParaTypeReal rotx, mrcImageParaTypeReal roty, mrcImageParaTypeReal rotz, mrcPixelDataHowToGet mode, int mode2);

extern void lmrcImageRotation2D(mrcImage* dst, mrcImage* src, double angle, mrcPixelDataHowToGet mode);

入力画像srcを角度angleで回転した画像をdstへ格納します。(mode: #補間方法

extern void lmrcImageRotation2DPeriodicBoundary(mrcImage* dst, mrcImage* src, double angle, mrcPixelDataHowToGet mode);


mrcImageSectionGet

extern char* mrcImageSectionGetModeDescription(long mode);
extern void mrcImageSectionGet(mrcImage* dst, mrcImage* src, mrcImageParaTypeReal z, long mode);

mrcImageSectionSet

extern void mrcImageSectionSet(mrcImage* dst, mrcImage* src, mrcImageParaTypeReal z, long mode);
extern double lmrcImageMaxDataGet(mrcImage* src, long mode);