mrcImage(API)

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

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

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

定数

構造体

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.