mrcImage(API)
提供: Eospedia
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
構造体
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;
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 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.