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

提供: Eospedia
移動: 案内検索
(Kinoshita がページ「mrcImage.h」を「mrcImage(API)」に移動しました: コマンド及び他の記事との重複を避けるため)
行47: 行47:
  
 
====Image Data Type====
 
====Image Data Type====
 +
/* for compatibility */
 +
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)
 +
// Change of IMOD
 +
#define mrcUShortImage          ((mrcImageMode)6)
 +
#define mrcCharImageRGB          ((mrcImageMode)16)
 +
// Change for 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)
 +
 +
===Tailer===
 +
#define  mrcImageTailerMode2DProjection 0
 +
 +
===画像情報===
 +
typedef enum mrcImageInformationMode {
 +
meanOfAll            = 0,
 +
    meanOfSphereSurface  = 1,
 +
    meanOfCylinderSurface = 2,
 +
    meanOfEdge            = 3,
 +
    meanOfCentre          = 4,
 +
    meanOfSparse          = 5,
 +
meanOf2DEdgeY        = 6,
 +
RMSofAllPixels      = 7
 +
} mrcImageInformationMode;
 +
 +
typedef enum mrcPixelDataType {
 +
    mrcPixelRePart = 0,
 +
    mrcPixelImPart,
 +
    mrcPixelMag,
 +
    mrcPixelPow,
 +
    mrcPixelLogMag,
 +
    mrcPixelLogPow,
 +
    mrcPixelPhase
 +
} mrcPixelDataType;
 +
 +
typedef enum mrcPixelDataHowToGet {
 +
    mrcPixelHowNearest = 0,
 +
    mrcPixelHowLinear,
 +
    mrcPixelHowCubicConv,
 +
    mrcPixelHowPolySig
 +
} mrcPixelDataHowToGet;
  
 
==構造体==
 
==構造体==
 +
===Status Mask===
 
  typedef union MRC_Status_t {
 
  typedef union MRC_Status_t {
 
     mrcStatusType all;
 
     mrcStatusType all;
行85: 行161:
 
  } mrcImageParaTypeRealCoord;
 
  } mrcImageParaTypeRealCoord;
 
   
 
   
 +
=== MRC Image Header===
 +
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;
 +
 +
/* For CCP4 2000 : Current New */
 +
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;
 +
 +
/* For IMOD: Current New */
 +
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 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;
 +
 +
===Tailer===
 +
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 Structure===
 +
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;
 +
 +
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;
 +
 +
#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
 +
 +
===画像情報===
 +
typedef struct lmrcImageSmoothingInfo  {
 +
long mode;
 +
mrcImageParaTypeReal sx; /* Filter kernel size */
 +
mrcImageParaTypeReal sy;
 +
mrcImageParaTypeReal sz;
 +
double sigma;            /* for Lee-Sigma filter  */
 +
} lmrcImageSmoothingInfo;
 +
 +
typedef struct lmrcImageCVEInfo {
 +
long sx; /* CVE domain size. */
 +
long sy; /* Apr.30,1996 */
 +
long sz;
 +
} lmrcImageCVEInfo;
 +
 +
typedef struct lmrcImageTfunctionInfo {
 +
long sx; /* Tfunction domain size. */
 +
long sy; /* June 11,1996 */
 +
long sz;
 +
} lmrcImageTfunctionInfo;
 +
 +
typedef struct lmrcImageHighlightInfo {
 +
long mode;
 +
float Bias; /* May 1,1996 */
 +
float Grad;
 +
} lmrcImageHighlightInfo;
 +
 +
typedef struct lmrcImageLowPassFilterInfo
 +
{
 +
long mode; /* June 4,1996 */
 +
float hvp, width;
 +
} lmrcImageLowPassFilterInfo;
 +
 +
typedef struct lmrcImageHighPassFilterInfo
 +
{
 +
long mode; /* June 5,1996 */
 +
float hvp, width;
 +
float pathWindowLow;
 +
float pathWindowHigh;
 +
} lmrcImageHighPassFilterInfo;
 +
 +
typedef struct lmrcImageBandPassFilterInfo
 +
{
 +
long mode; /* June 5,1996 */
 +
float hvl, hvh, wl, wh;
 +
int flagLowWeight;
 +
double lowWeight;
 +
} lmrcImageBandPassFilterInfo;
 +
 +
===mrcImageDataSet用===
 +
typedef enum mrcImageDataSetMode {
 +
mrcImageDataSetModeCentre = 0,
 +
mrcImageDataSetModeOrigin = 1
 +
} mrcImageDataSetMode;
  
 
==API==
 
==API==
行100: 行489:
 
  extern mrcStatusType mrcHeaderRead(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 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);
  
 
=== ファイルの書き出し ===
 
=== ファイルの書き出し ===
行148: 行553:
 
====ピクセル単位の画素データの設定====
 
====ピクセル単位の画素データの設定====
 
  extern void mrcInfoSet(mrcImage* mrc, FILE* fptIn, FILE* fptOut, mrcImageParaTypeInteger mode);
 
  extern void mrcInfoSet(mrcImage* mrc, FILE* fptIn, FILE* fptOut, mrcImageParaTypeInteger mode);
 
  
 
=== 画像処理一般のライブラリ ===
 
=== 画像処理一般のライブラリ ===
行186: 行590:
 
  void mrcImageStdDev(mrcImage* sig, mrcImage* avg, mrcImage* avg2, long number); sig:= sqrt(avg2 - avg*avg), at present, avg, avg2 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.
 
  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);

2014年5月9日 (金) 06:32時点における版

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

定数

Status Mask

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)

#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[];

MRC Image Header

Header Size

#define MRC_HEADER (1024)
#define MRC_TAILER (1024)

Image Data Type

/* for compatibility */
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)
// Change of IMOD 
#define	mrcUShortImage           ((mrcImageMode)6)
#define	mrcCharImageRGB          ((mrcImageMode)16)
// Change for 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)

Tailer

#define  mrcImageTailerMode2DProjection 0

画像情報

typedef enum mrcImageInformationMode {
	meanOfAll             = 0,
    meanOfSphereSurface   = 1,
    meanOfCylinderSurface = 2,
    meanOfEdge            = 3, 
    meanOfCentre          = 4,
    meanOfSparse          = 5,
	meanOf2DEdgeY         = 6,
	RMSofAllPixels       = 7
} mrcImageInformationMode;
typedef enum mrcPixelDataType {
    mrcPixelRePart = 0,
    mrcPixelImPart,
    mrcPixelMag,
    mrcPixelPow,
    mrcPixelLogMag,
    mrcPixelLogPow,
    mrcPixelPhase
} mrcPixelDataType;

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

構造体

Status Mask

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;
typedef struct mrcImageParaTypeRealCoord {
	mrcImageParaTypeReal x;
	mrcImageParaTypeReal y;
	mrcImageParaTypeReal z;
} mrcImageParaTypeRealCoord;

MRC Image Header

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;

/* For CCP4 2000 : Current New */
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;

/* For IMOD: Current New */
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 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;

Tailer

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 Structure

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;

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;
#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

画像情報

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

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

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

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

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

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

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

mrcImageDataSet用

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

API

初期化

extern mrcStatusType mrcInit(mrcImage* mrc, char* filaname);
extern mrcStatusType mrcDefaultHeaderValueSet(mrcImage* mrc);
extern mrcStatusType mrcHiddenDataSet(mrcImage* mrc, long mode);
extern void mrcImageFree(mrcImage* mrc, char* message);
extern void mrcTailerInit(mrcImage* mrc, long mode);
extern void mrcTailerCopy(mrcImage* dst, mrcImage* src, 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 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);

ファイルの書き出し

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

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

画素のデータの取得

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

extern double mrcPixelDataGet(mrcImage* mrc,
                              mrcImageParaTypeReal x /* Pixel Unit */,
                              mrcImageParaTypeReal y /* Pixel Unit */,
                              mrcImageParaTypeReal z /* Pixel Unit */,
                              double* data,
                              mrcPixelDataType mode,
                              mrcPixelDataHowToGet 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);

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

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 ImageAbs(mrcImage* out ,mrcImage* in);                               out := fabs(in);
それ以外
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++
減算
void lmrcImageSubtractionCalc(mrcImage* out, mrcImage* in1, mrcImage* in2)      out  :=  in1 - in2
void llmrcImageSub(mrcImage*out ,mrcImage* in1 ,mrcImage* in2)                  out  : = in1 - in2(上記と同じ機能)

void lmrcSQRImageAdd(mrcImage* img2, mrcImage* img1, long* number);             img2 := img2 + img1*img1, number++
void lmrcImageDevidedByImage(mrcImage* img, mrcImage* i1, mrcImage* i2);        img := i1/i2, 0 := 0/0, 0 := x/0
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);