「lmrcImagePad(API)」の版間の差分
提供: Eospedia
(→API) |
(→API) |
||
| 行164: | 行164: | ||
inより外のデータをinfo->Valueにします。 | inより外のデータをinfo->Valueにします。 | ||
extern void __lmrcImagePad5(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode); | extern void __lmrcImagePad5(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode); | ||
| + | extern void __lmrcImagePad9(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode); | ||
| + | 上記の2つはほとんど同じ。<br> | ||
<table border="1"> | <table border="1"> | ||
<tr> | <tr> | ||
| 行251: | 行253: | ||
<br> | <br> | ||
| − | + | ==== 計算した統計データによるパディング ==== | |
| + | *期待値を使ってマスク処理をする | ||
extern void __lmrcImagePad10(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode); | extern void __lmrcImagePad10(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode); | ||
| + | *(I(x,y)-avg(bg))/avg(bg))をパディング値とする | ||
extern void __lmrcImagePad11(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode); | extern void __lmrcImagePad11(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode); | ||
| + | *(I(x,y)-avg(I))/sqrt(var(I)))をパディング値とする | ||
extern void __lmrcImagePad12(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode); | extern void __lmrcImagePad12(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode); | ||
| + | *(I(x,y)-avg(bg))/sqrt(var(bg)))をパディング値とする | ||
extern void __lmrcImagePad13(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode); | extern void __lmrcImagePad13(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode); | ||
| + | *(I(x,y)-avg(bg))/(avg(I)-avg(bg))をパディング値とする | ||
extern void __lmrcImagePad14(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode); | extern void __lmrcImagePad14(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode); | ||
| + | *円のパディングを傾斜させる | ||
extern void __lmrcImagePadTiltImage(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode); | extern void __lmrcImagePadTiltImage(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode); | ||
2015年1月30日 (金) 07:59時点における最新版
DataManip/mrcImage/src/lmrcImagePadはmrcImagePadのためのAPI です。
目次
定数
lmrcImagePadのmodeで使用します。
typedef enum lmrcImagePadMode {
lmrcImagePadModeAverage = 0,
lmrcImagePadModeAveragedYAxis = 1,
lmrcImagePadModeDynamicAveragedYAxis = 2,
lmrcImagePadModeAveragedEdge = 3,
lmrcImagePadModeBottomLeft = 4,
lmrcImagePadModeCenterWithoutAveraging = 5,
lmrcImagePadModeBottomLeftWithoutAveraging= 6,
lmrcImagePadModeAveragedOutsideCircle = 7,
lmrcImagePadModeAveragedOutsideRing = 8,
lmrcImagePadModeByValue = 9,
lmrcImagePadModePeripheryMaskingByValue = 10,
lmrcImagePadModeNormalizedByBgAvgAndBgAvgOffset = 11,
lmrcImagePadModeNormalizedByImgVarAndImgAvgOffset = 12,
lmrcImagePadModeNormalizedByBgVarAndBgAvgOffset = 13,
lmrcImagePadModeNormalizedByDifferenceBeteweenImgAvgAndBgAvg = 14,
lmrcImagePadModeTiltedImageCircleAverage = 15
} lmrcImagePadMode;
構造体
APIを使用するときの設定データとして使用します。
typedef struct lmrcImagePadInfo {
mrcImageParaTypeInteger Width;
mrcImageParaTypeInteger Height;
mrcImageParaTypeReal Value;
mrcImageParaTypeReal AWSize;
mrcImageParaTypeReal AWMin;
mrcImageParaTypeReal AWMax;
mrcImageParaTypeReal ExpectedValue;
int flagExpectedValue;
mrcImageParaTypeReal TiltAxisAngle;
mrcImageParaTypeReal TiltAngle;
} lmrcImagePadInfo;
API
パディング
メイン
extern void lmrcImagePad(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, lmrcImagePadMode mode);
outのヘッダはinと同じに、サイズは(info->Width, info->Height)として設定します。
引数のmodeによって、以下の中から処理のいずれかが実行されます。
mode=XX: __lmrcImagePadXX を実行します。
mode=15: __lmrcImagePadTiltImageを実行します。
平均値でパディング
inの平均値でパディングします。
extern void __lmrcImagePad0(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode);
| 出力画像outの要素 | 処理結果 |
|---|---|
| 入力画像inの配置 | 中央配置 |
| in内のデータ | + info->Value - (inの平均値) |
| in外のデータ | info->Value |
inの左右端の平均値でパディングします。
extern void __lmrcImagePad1(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode);
| 出力画像outの要素 | 処理結果 |
|---|---|
| 入力画像inの配置 | 中央配置 |
| in内のデータ | + info->Value - (inの左右端の平均値) |
| in外のデータ | info->Value |
指定した範囲での左右端の平均値を使い、左右の位置に応じた重みを付けてパディングします。
extern void __lmrcImagePad2(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode);
inのデータ座標(x, y)に対し、
各yについてinfo->AWSize[A]で指定した範囲での左右端の平均値をそれぞれ算出し、
各xについて左右端との距離の比に応じた割合平均値でパディングします。
| 出力画像outの要素 | 処理結果 |
|---|---|
| 入力画像inの配置 | 中央配置 |
| in内のデータ | + info->Value - (inの左右端の割合平均値) |
| in外のデータ | info->Value |
inの周辺の平均値でパディングします。
extern void __lmrcImagePad3(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode);
| 出力画像outの要素 | 処理結果 |
|---|---|
| 入力画像inの配置 | 中央配置 |
| in内のデータ | + info->Value - (inの周辺の平均値) |
| in外のデータ | info->Value |
inの平均値でパディングします。(左下寄せ)
extern void __lmrcImagePad4(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode);
| 出力画像outの要素 | 処理結果 |
|---|---|
| 入力画像inの配置 | 左下寄せ |
| in内のデータ | + info->Value - (inの平均値) |
| in外のデータ | info->Value |
外のデータを定数で埋める
inより外のデータをinfo->Valueにします。
extern void __lmrcImagePad5(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode); extern void __lmrcImagePad9(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode);
上記の2つはほとんど同じ。
| 出力画像outの要素 | 処理結果 |
|---|---|
| 入力画像inの配置 | 中央配置 |
| in内のデータ | そのまま |
| in外のデータ | info->Value |
inより外のデータをinfo->Valueにします。(左下寄せ)
extern void __lmrcImagePad6(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode);
| 出力画像outの要素 | 処理結果 |
|---|---|
| 入力画像inの配置 | 左下寄せ |
| in内のデータ | そのまま |
| in外のデータ | info->Value |
円・楕円内のパディング
入力画像inのNx, Nyを軸とする楕円について平均値を算出してパディングします。
extern void __lmrcImagePad7(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode);
| 出力画像outの要素 | 処理結果 |
|---|---|
| 入力画像inの配置 | 中央配置 |
| 楕円内のデータ | - (inの楕円内の平均値) |
| 楕円外のデータ | info->Value |
入力画像inに対し、半径info->AWMinの内円と、半径info->AWMaxの外円の間での平均値を算出し、内円に対してパディングを行います。
extern void __lmrcImagePad8(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode);
| 出力画像outの要素 | 処理結果 |
|---|---|
| 入力画像inの配置 | 中央配置 |
| 内円内のデータ | - (inの内外円間の平均値) |
| 内円外のデータ | info->Value |
計算した統計データによるパディング
- 期待値を使ってマスク処理をする
extern void __lmrcImagePad10(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode);
- (I(x,y)-avg(bg))/avg(bg))をパディング値とする
extern void __lmrcImagePad11(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode);
- (I(x,y)-avg(I))/sqrt(var(I)))をパディング値とする
extern void __lmrcImagePad12(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode);
- (I(x,y)-avg(bg))/sqrt(var(bg)))をパディング値とする
extern void __lmrcImagePad13(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode);
- (I(x,y)-avg(bg))/(avg(I)-avg(bg))をパディング値とする
extern void __lmrcImagePad14(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode);
- 円のパディングを傾斜させる
extern void __lmrcImagePadTiltImage(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode);
API情報の出力
APIで使用するのモード説明を出力します。
extern void lmrcImagePadModePrint(FILE* fpt);