mrcImage(API)
DataManip/mrcImageは、mrcImage型's imageを取り扱うための低水準APIです。
Contents
- 1 定数
- 2 構造体
- 2.1 マスク処理
- 2.2 座標
- 2.3 mrcImageの構造
- 2.4 画像の統計データ
- 2.5 API毎の設定ファイル
- 2.5.1 lmrcImageSmoothingInfo
- 2.5.2 lmrcImageCVEInfo
- 2.5.3 lmrcImageTfunctionInfo
- 2.5.4 lmrcImageHighlightInfo
- 2.5.5 lmrcImageLowPassFilterInfo
- 2.5.6 lmrcImageHighPassFilterInfo
- 2.5.7 lmrcImageBandPassFilterInfo
- 2.5.8 mrcImageDataSet
- 2.5.9 lmrcImageMultiCTFCompensationInfo
- 2.5.10 lmrcImageCTFSNInfo
- 2.5.11 lmrcImageFourierPowerSpectrumInfo
- 3 API
- 3.1 初期化
- 3.2 Release Image data
- 3.3 Read from file
- 3.4 Write to file
- 3.5 Copy data
- 3.6 Check Image mode
- 3.7 Getting Pixel data
- 3.8 Setting Pixel data
- 3.9 Statistics processing of Pixel data
- 3.10 Library of General image processing
- 3.11 Error Process
- 3.12 Process each command
- 3.12.1 lmrcFFTInfo
- 3.12.2 mrcImageCheckSameSize
- 3.12.3 mrcImageCheckFFT
- 3.12.4 lmrcImageSmoothing
- 3.12.5 lmrcImageCVE
- 3.12.6 lmrcImageTfunction
- 3.12.7 lmrcImageHighlighting
- 3.12.8 lmrcImageLowPassFilter
- 3.12.9 lmrcImageHighPassFilter
- 3.12.10 lmrcImageBandPassFilter
- 3.12.11 lmrcImageShrink
- 3.12.12 lmrcImageShift
- 3.12.13 mrcImagePrint
- 3.12.14 lmrcImageMultiCTFCompensation
- 3.12.15 lmrcImageCTFObservation
- 3.12.16 lmrcImageCTFCompensation
- 3.12.17 lmrcImageCTFSN
- 3.12.18 lmrcImageFourierPowerSpectrum
- 3.12.19 mrcImageSectionGet
- 3.12.20 mrcImageSectionSet
定数
マスク処理
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[];
サイズ
Headerサイズ
#define MRC_HEADER (1024)
トレイラサイズ
#define MRC_TAILER (1024)
画像Mode
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投影Mode
#define mrcImageTailerMode2DProjection 0
画像情報
統計データの算出Mode
typedef enum mrcImageInformationMode {
meanOfAll = 0,
meanOfSphereSurface = 1,
meanOfCylinderSurface = 2,
meanOfEdge = 3,
meanOfCentre = 4,
meanOfSparse = 5,
meanOf2DEdgeY = 6,
RMSofAllPixels = 7
} mrcImageInformationMode;
平均値などを算出する関数(lmrcImageInformation、lmrcImageSolventFlattening(API)など)のModeとして設定します。
mrcImageInformation.modeの値として使用します。
ピクセルデータ
データの種類
typedef enum mrcPixelDataType {
mrcPixelRePart = 0,
mrcPixelImPart,
mrcPixelMag,
mrcPixelPow,
mrcPixelLogMag,
mrcPixelLogPow,
mrcPixelPhase
} mrcPixelDataType;
設定・取得するピクセルデータのタイプで、mrcPixselDataSetやmrcPixselDataGetの引数(mode)として使用します。
| Value | 実画像 | FT画像 |
|---|---|---|
| mrcPixelRePart | データ | 実部データ |
| mrcPixelImPart | 対応無し | 虚部データ |
| mrcPixelMag | データ | 振幅: (実部^2 + 虚部^2)^(1/2) |
| mrcPixelPow | データ^2 | 強度: 実部^2 + 虚部^2 |
| mrcPixelLogMag | 対応無し | ログ振幅: (log10(実部^2 + 虚部^2)) / 2 |
| mrcPixelLogPow | 対応無し | ログ強度: log10(実部^2 + 虚部^2) |
| mrcPixelPhase | 対応無し | 位相 |
Interpolation方法
typedef enum mrcPixelDataHowToGet {
mrcPixelHowNearest = 0,
mrcPixelHowLinear,
mrcPixelHowCubicConv,
mrcPixelHowPolySig
} mrcPixelDataHowToGet;
ピクセルデータのInterpolation方法で、mrcPixselDataGetの引数(how)として使用します。
| Value | 設定値 | Interpolation方法 |
|---|---|---|
| mrcPixelHowNearest | 0 | Nearest neighbor method |
| mrcPixelHowLinear | 1 | Bi-linear interpolation method |
| mrcPixelHowCubicConv | 2 | Cubic convolution method |
| mrcPixelHowPolySig | 3 | Polynomial interpolation method |
構造体
マスク処理
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情報 | Header | 画像Mode、サイズなど |
| 隠しデータ | BytePerImage, BytePerBand, BandPerPixel, PixelPerImage | 1ピクセル当たりのオングストロームなど |
| ステータス | status | ファイルの状態 |
| 画像データ | Image, ImageCharImage, ... , ImageDoubleImage | 画像データ本体(実体はImage、他メンバはポインタで管理) |
| トレイラ情報 | Tailer, numTailer | 角度情報など |
| FEIHeader | FEIHeader, numFEIHeader | FEI用の拡張Header |
| ダミー | dummyHeaderByte | ダミーデータ |
| バイトスワップ | flagByteSwap | 処理系によったエンディアン関連のフラグ |
| CCP4-2000 | flagCCP4, ImageOffset, SymmetryOperator | CCP4-2000用 |
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;
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;
Headerの共用体
以上で定義したHeaderを共用体とします。
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
lmrcImageSmoothingIt is used for 's setting data.
typedef struct lmrcImageSmoothingInfo {
long mode;
mrcImageParaTypeReal sx; /* Filter kernel size */
mrcImageParaTypeReal sy;
mrcImageParaTypeReal sz;
double sigma; /* for Lee-Sigma filter */
} lmrcImageSmoothingInfo;
lmrcImageCVEInfo
lmrcImageCVEIt is used for 's setting data.
typedef struct lmrcImageCVEInfo {
long sx; /* CVE domain size. */
long sy; /* Apr.30,1996 */
long sz;
} lmrcImageCVEInfo;
lmrcImageTfunctionInfo
lmrcImageTfunctionIt is used for 's setting data.
typedef struct lmrcImageTfunctionInfo {
long sx; /* Tfunction domain size. */
long sy; /* June 11,1996 */
long sz;
} lmrcImageTfunctionInfo;
lmrcImageHighlightInfo
lmrcImageHighlightingIt is used for 's setting data.
typedef struct lmrcImageHighlightInfo {
long mode;
float Bias; /* May 1,1996 */
float Grad;
} lmrcImageHighlightInfo;
lmrcImageLowPassFilterInfo
lmrcImageLowPassFilterIt is used for 's setting data.
typedef struct lmrcImageLowPassFilterInfo
{
long mode; /* June 4,1996 */
float hvp, width;
} lmrcImageLowPassFilterInfo;
lmrcImageHighPassFilterInfo
lmrcImageHighPassFilterIt is used for 's setting data.
typedef struct lmrcImageHighPassFilterInfo
{
long mode; /* June 5,1996 */
float hvp, width;
float pathWindowLow;
float pathWindowHigh;
} lmrcImageHighPassFilterInfo;
lmrcImageBandPassFilterInfo
lmrcImageBandPassFilterIt is used for 's setting data.
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;
lmrcImageMultiCTFCompensationInfo
lmrcImageMultiCTFCompensationIt is used for 's setting data.
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
lmrcImageCTFSNIt is used for 's setting data.
typedef struct lmrcImageCTFSNInfo
{
long mode, deg1, deg2;
ctfInfo ctf;
} lmrcImageCTFSNInfo;
lmrcImageFourierPowerSpectrumInfo
lmrcImageFourierPowerSpectrumIt is used for 's setting data.
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);
Header情報(画像Modeやサイズ)を別のmrcファイルから読み出す場合はfilenameにファイル名を指定し、NULLの場合はデフォルト設定となります。画像データをmrcのメンバーImageに新規作成し, ポインタをImageXXXXImage(XXXX: Char, Shortなど)に格納されます。
※ このAPIは無条件でmrc->Imageにメモリを確保しますので、mrc->Imageが空であることが保証されるときのみ使用して下さい。(空でない場合はmrcImageFreeでメモリを解放してから確認します。)
Initialize Header information
extern mrcStatusType mrcDefaultHeaderValueSet(mrcImage* mrc); extern mrcStatusType mrcDefaultHeaderValueSetOnlyFixedValue(mrcImage* mrc);
Setting Hidden data
extern mrcStatusType mrcHiddenDataSet(mrcImage* mrc, long mode);
Initialize Trailer information
extern void mrcTailerInit(mrcImage* mrc, long mode);
Release Image data
extern void mrcImageFree(mrcImage* mrc, char* message);
Release the Image data's substance(Image), and Change Pointers of Image, ImageXXXXImage(XXXX: Char, Short, ...) to NULL Pointer.
Read from file
Read filename, and store to 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: for error message
mode: Read data 0: Not display, 1: Display
Write to file
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: for error message
mode: +1: Display written data, +2: Not Calculate Statistics data
Writing by Lower Resolution
It is used by ip2mrc, ...
extern mrcStatusType mrcFileWriteLowerResolution(mrcImage* mrc, char* filename, char* message, long sample , long mode);
Copy data
Copy as: src -> dst
Copy Image data
extern void lmrcImageCopy(mrcImage* dst, mrcImage* src, mrcImageParaTypeRealCoord to);
to: Offset(Coordinate)
Copy Trailer information
extern void mrcTailerCopy(mrcImage* dst, mrcImage* src, long mode);
mode: +1: New create and Copy, Otherwise: Copy directly
Check Image mode
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);
Return value: 0: False, 1: True
Getting Pixel data
Getting Pixel data by Pixel
extern double mrcPixelDataGet(mrcImage* mrc,
mrcImageParaTypeReal x /* Pixel Unit */,
mrcImageParaTypeReal y /* Pixel Unit */,
mrcImageParaTypeReal z /* Pixel Unit */,
double* data,
mrcPixelDataType mode,
mrcPixelDataHowToGet how);
Get the data of Coordinate(x, y, z), and store to "data".
Gotten data is depending to mode and how.
Getting Pixel data by Angstrom
extern double mrcImageDataGetbyAU(mrcImage* mrc,
mrcImageParaTypeReal x /* Angstrom */,
mrcImageParaTypeReal y /* Angstrom */,
mrcImageParaTypeReal z /* Angstrom */,
double* data,
mrcPixelDataType mode,
mrcPixelDataHowToGet how);
Inline function Gets Pixel data
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)
Setting Pixel data
Setting Image Information
extern void mrcInfoSet(mrcImage* mrc, FILE* fptIn, FILE* fptOut, mrcImageParaTypeInteger mode);
Setting Pixel Information
extern void mrcImageInfoSet(mrcImage* mrc, FILE* fptIn, FILE* fptOut, long mode);
Setting Pixel data
extern void mrcImageDataSet(mrcImage* out, mrcImage* in, mrcImageParaTypeReal x, mrcImageParaTypeReal y, mrcImageParaTypeReal z, float phi, mrcImageDataSetMode mode);
Setting Pixel data by Pixel
extern double mrcPixelDataSet(mrcImage* mrc, mrcImageParaTypeReal x /* Pixel Unit */, mrcImageParaTypeReal y /* Pixel Unit */, mrcImageParaTypeReal z /* Pixel Unit */, double data, mrcPixelDataType mode);
Setting Pixel data by Angstrom
extern double mrcImageDataSetbyAU(mrcImage* mrc, mrcImageParaTypeReal x /* Angstrom */, mrcImageParaTypeReal y /* Angstrom */, mrcImageParaTypeReal z /* Angstrom */, double data, mrcPixelDataType mode);
Inline function Sets Pixel data
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)
Statistics processing of Pixel data
Calculate Max, Min, Mean(Store mrc's Header Information)
extern void mrcStatDataSet(mrcImage* mrc, mrcImageParaTypeInteger mode);
Library of General image processing
Operation image(mrcImageOperation)
Unary operation
Add
void lmrcImageAddedByReal(mrcImage* img, double d); img := img+d
Subtraction
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
Devide
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
Absolute value
void ImageAbs(mrcImage* out ,mrcImage* in); out := fabs(in);
Square, Root
void lmrcImageSquare(mrcImage* in); in := in*in void lmrcImageRoot(mrcImage* in ,double eps); in := sqrt(in), if in>eps else in:=0
Dyadic operation
Addition
void lmrcImageAdd(mrcImage* img2, mrcImage* img1, long* number); img2 := img2 + img1, number++
Square Add
void lmrcSQRImageAdd(mrcImage* img2, mrcImage* img1, long* number); img2 := img2 + img1*img1, number++
Subtraction
void lmrcImageSubtractionCalc(mrcImage* out, mrcImage* in1, mrcImage* in2) out := in1 - in2 void llmrcImageSub(mrcImage*out ,mrcImage* in1 ,mrcImage* in2) out : = in1 - in2(上記と同じ機能)
Convolution
extern void lmrcImageConvolution(mrcImage* out, mrcImage* in, mrcImage* kernel, int mode);
Statistics
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.
Relation to Endian
extern int mrcImageByteSwap(mrcImage* mrc, long mode);
Projection
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);
Histogram
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);
Get Statistics data
Getting from mrcImage to Statistics data of image.
extern void lmrcImageInformation(mrcImageInformation* info, mrcImage* img);
Convert pixel data
Converting from pixel data to int type.
extern void lmrcImageToIntImage(mrcImage* dst, mrcImage* src, mrcImageParaTypeInteger mode);
Relation to 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);
Correlation of image data
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);
Error Process
extern mrcStatusType mrcError(char* message, char* inRtnName, char* callRtnName, mrcStatusType status); extern mrcStatusType mrcErrorMsg(FILE* fpt, char* message, char* inRtnName, char* callRtnName, mrcStatusType status);
Process each command
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
extern void lmrcImageCheckFFT(mrcImage* in, mrcImage* ref);
lmrcImageSmoothing
Use setting data as lmrcImageSmoothingInfo.
extern void lmrcImageSmoothingModeInfo(FILE* fpt); extern void lmrcImageSmoothing(mrcImage* dst, mrcImage* src, lmrcImageSmoothingInfo* info, long mode);
lmrcImageCVE
Use setting data as lmrcImageCVEInfo.
extern void lmrcImageCVE(mrcImage* dst, mrcImage* src, lmrcImageCVEInfo* info);
lmrcImageTfunction
Use setting data as lmrcImageTfunctionInfo.
extern void lmrcImageTfunction(mrcImage* dst, mrcImage* src, lmrcImageTfunctionInfo* info, long mode);
lmrcImageHighlighting
Use setting data as lmrcImageHighlightInfo.
extern void lmrcImageHighlightingInfoPrint(FILE* fpt); extern void lmrcImageHighlighting(mrcImage* dst, mrcImage* src, lmrcImageHighlightInfo* info);
lmrcImageLowPassFilter
Use setting data as lmrcImageLowPassFilterInfo.
extern void lmrcImageLowPassFilter(mrcImage* dst, mrcImage* src, lmrcImageLowPassFilterInfo* info, long mode);
lmrcImageHighPassFilter
Use setting data as lmrcImageHighPassFilterInfo.
extern void lmrcImageHighPassFilter(mrcImage* dst, mrcImage* src, lmrcImageHighPassFilterInfo* info, long mode);
lmrcImageBandPassFilter
Use setting data as 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
Use setting data as 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
Use setting data as lmrcImageCTFSNInfo.
extern void lmrcImageCTFSN(mrcImage *outMrc, const mrcImage *inMrc, lmrcImageCTFSNInfo *info, long mode);
lmrcImageFourierPowerSpectrum
Use setting data as 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); 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);