MrcImage.h

提供: Eospedia
2013年4月28日 (日) 20:39時点におけるAdmin (トーク | 投稿記録)による版

(差分) ←前の版 | 最新版 (差分) | 次の版→ (差分)
移動: 案内検索

mrcImage.hは、mrcImage型の画像を取り扱うための標準APIです。

クラス名(構造体)

mrcImage
  |- mrcImageHeader (画像の情報)
  |- mrcImageTailer (画像の付加的な情報)
 |- Image (画像)

メンバ

typedef struct mrcImage {
    // 画像の情報を示すヘッダーです。
    mrcImageHeader          Header;
    mrcImageParaTypeInteger BytePerImage;
    mrcImageParaTypeInteger BytePerBand;
    mrcImageParaTypeInteger BandPerPixel;
    mrcImageParaTypeInteger PixelPerImage;
    mrcStatusType           status;

    // 画像が格納された1次元配列です。型に応じて用意されています。
    char*           Image;
    unsigned char*  ImageCharImage;
    unsigned short* ImageShortImage;
    unsigned long*  ImageLongImage;
    float*          ImageFloatImage;
    double*         ImageDoubleImage;

    // 付加的情報のためのテーラーです。
    mrcImageTailer*         Tailer;
    mrcImageParaTypeInteger numTailer;

    /* Swap Bytes */
    mrcImageParaTypeInteger flagByteSwap;

    /* flag CCP4-2000 */
    mrcImageParaTypeInteger   flagCCP4;
    mrcImageParaTypeInteger   ImageOffset;
    mrcImageSymmetryOperator* SymmetryOperator;
} mrcImage;

ヘッダー情報です。共用体として、複数の書き出し、読み出しに対応しています。

/* Image Header */
typedef union mrcImageHeader {
  unsigned char           All[MRC_HEADER];
  mrcImageParaTypeInteger Int[MRC_HEADER/4];
  mrcImageParaTypeReal    Real[MRC_HEADER/4];
  _mrcImageHeader         Cont;                 /* Conventional Header */
  _mrcImageHeaderCCP4     ContCCP4;             /* Current Header */
} mrcImageHeader;

 以前のCCPフォーマットです。ただし、Lengthの意味が異なります。Eosでは、ピクセル間隔(サンプリング間隔)を示しています。

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年に正式に変更になったことに併せて、そのフォーマットに対応しました。以前のものと共用体によりいずれのフォーマットにも一端対応しています。 ただし、Lengthの意味が異なります。Eosでは、ピクセル間隔(サンプリング間隔)を示しています。

/* For CCP4 2000 : Current New */
typedef char mrcImageSymmetryOperator;

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             ARCHST;
    mrcImageParaTypeReal                ARMS;
    mrcImageParaTypeInteger             LabelN;
    char                                Label[MRC_MAX_LABEL_N][MRC_MAX_LABEL_LEN];
} _mrcImageHeaderCCP4;

付加的な情報を与えるために添付された情報です。とくに投影像のセットなどに利用されます。CCP4のフォーマットとの対応をとりながら、付加的な情報を付けています。

/*
        Tailer
*/
/* constant begin */
#define  mrcImageTailerMode2DProjection 0
/* constant end */

/* struct begin */
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;

メソッド