mrcImage(API)

提供: Eospedia
2014年5月9日 (金) 05:56時点におけるKinoshita (トーク | 投稿記録)による版

移動: 案内検索

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.