「lmrcImagePad(API)」の版間の差分

提供: Eospedia
移動: 案内検索
(ページの作成:「DataManip/mrcImage/src/'''lmrcImagePad'''はmrcImagePadのためのAPI です。 == 定数 == == 構造体 == typedef struct lmrcImagePadInfo { mrcImageParaTypeI...」)
 
(API)
 
(同じ利用者による、間の10版が非表示)
行2: 行2:
  
 
== 定数 ==
 
== 定数 ==
 
+
lmrcImagePadのmodeで使用します。
== 構造体 ==
+
typedef struct lmrcImagePadInfo {
+
mrcImageParaTypeInteger Width;
+
mrcImageParaTypeInteger Height;
+
mrcImageParaTypeReal Value;
+
mrcImageParaTypeReal AWSize;
+
mrcImageParaTypeReal AWMin;
+
mrcImageParaTypeReal AWMax;
+
mrcImageParaTypeReal ExpectedValue;
+
int flagExpectedValue;
+
mrcImageParaTypeReal TiltAxisAngle;
+
mrcImageParaTypeReal TiltAngle;
+
} lmrcImagePadInfo;
+
 
+
 
  typedef enum lmrcImagePadMode {
 
  typedef enum lmrcImagePadMode {
 
  lmrcImagePadModeAverage                  = 0,
 
  lmrcImagePadModeAverage                  = 0,
行35: 行21:
 
  lmrcImagePadModeTiltedImageCircleAverage         = 15  
 
  lmrcImagePadModeTiltedImageCircleAverage         = 15  
 
  } lmrcImagePadMode;
 
  } 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 ==
 
== API ==
 +
===パディング===
 +
==== メイン ====
 
  extern void lmrcImagePad(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, lmrcImagePadMode mode);
 
  extern void lmrcImagePad(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, lmrcImagePadMode mode);
extern void lmrcImagePadModePrint(FILE* fpt);
+
outのヘッダはinと同じに、サイズは(info->Width, info->Height)として設定します。<br>
extern void __lmrcImagePadTiltImage(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode);
+
引数のmodeによって、以下の中から処理のいずれかが実行されます。<br>
 +
mode=XX: __lmrcImagePadXX を実行します。<br>
 +
mode=15: __lmrcImagePadTiltImageを実行します。<br>
 +
<br>
 +
 
 +
==== 平均値でパディング ====
 +
inの平均値でパディングします。
 
  extern void __lmrcImagePad0(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode);
 
  extern void __lmrcImagePad0(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode);
 +
<table border="1">
 +
<tr>
 +
<th>出力画像outの要素</th>
 +
<th>処理結果</th>
 +
</tr>
 +
<tr>
 +
<td>入力画像inの配置</td>
 +
<td>中央配置</td>
 +
</tr>
 +
<tr>
 +
<td>in内のデータ</td>
 +
<td>+ info->Value - (inの平均値)</td>
 +
</tr>
 +
<tr>
 +
<td>in外のデータ</td>
 +
<td>info->Value</td>
 +
</tr>
 +
</table>
 +
<br>
 +
 +
inの左右端の平均値でパディングします。
 
  extern void __lmrcImagePad1(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode);
 
  extern void __lmrcImagePad1(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode);
 +
<table border="1">
 +
<tr>
 +
<th>出力画像outの要素</th>
 +
<th>処理結果</th>
 +
</tr>
 +
<tr>
 +
<td>入力画像inの配置</td>
 +
<td>中央配置</td>
 +
</tr>
 +
<tr>
 +
<td>in内のデータ</td>
 +
<td>+ info->Value - (inの左右端の平均値)</td>
 +
</tr>
 +
<tr>
 +
<td>in外のデータ</td>
 +
<td>info->Value</td>
 +
</tr>
 +
</table>
 +
<br>
 +
 +
指定した範囲での左右端の平均値を使い、左右の位置に応じた重みを付けてパディングします。
 
  extern void __lmrcImagePad2(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode);
 
  extern void __lmrcImagePad2(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode);
 +
inのデータ座標(x, y)に対し、<br>
 +
各yについてinfo->AWSize[A]で指定した範囲での左右端の平均値をそれぞれ算出し、<br>
 +
各xについて左右端との距離の比に応じた割合平均値でパディングします。<br>
 +
<table border="1">
 +
<tr>
 +
<th>出力画像outの要素</th>
 +
<th>処理結果</th>
 +
</tr>
 +
<tr>
 +
<td>入力画像inの配置</td>
 +
<td>中央配置</td>
 +
</tr>
 +
<tr>
 +
<td>in内のデータ</td>
 +
<td>+ info->Value - (inの左右端の割合平均値)</td>
 +
</tr>
 +
<tr>
 +
<td>in外のデータ</td>
 +
<td>info->Value</td>
 +
</tr>
 +
</table>
 +
<br>
 +
 +
inの周辺の平均値でパディングします。
 
  extern void __lmrcImagePad3(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode);
 
  extern void __lmrcImagePad3(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode);
 +
<table border="1">
 +
<tr>
 +
<th>出力画像outの要素</th>
 +
<th>処理結果</th>
 +
</tr>
 +
<tr>
 +
<td>入力画像inの配置</td>
 +
<td>中央配置</td>
 +
</tr>
 +
<tr>
 +
<td>in内のデータ</td>
 +
<td>+ info->Value - (inの周辺の平均値)</td>
 +
</tr>
 +
<tr>
 +
<td>in外のデータ</td>
 +
<td>info->Value</td>
 +
</tr>
 +
</table>
 +
<br>
 +
 +
inの平均値でパディングします。(左下寄せ)
 
  extern void __lmrcImagePad4(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode);
 
  extern void __lmrcImagePad4(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode);
 +
<table border="1">
 +
<tr>
 +
<th>出力画像outの要素</th>
 +
<th>処理結果</th>
 +
</tr>
 +
<tr>
 +
<td>入力画像inの配置</td>
 +
<td>左下寄せ</td>
 +
</tr>
 +
<tr>
 +
<td>in内のデータ</td>
 +
<td>+ info->Value - (inの平均値)</td>
 +
</tr>
 +
<tr>
 +
<td>in外のデータ</td>
 +
<td>info->Value</td>
 +
</tr>
 +
</table>
 +
<br>
 +
 +
=== 外のデータを定数で埋める ===
 +
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">
 +
<tr>
 +
<th>出力画像outの要素</th>
 +
<th>処理結果</th>
 +
</tr>
 +
<tr>
 +
<td>入力画像inの配置</td>
 +
<td>中央配置</td>
 +
</tr>
 +
<tr>
 +
<td>in内のデータ</td>
 +
<td>そのまま</td>
 +
</tr>
 +
<tr>
 +
<td>in外のデータ</td>
 +
<td>info->Value</td>
 +
</tr>
 +
</table>
 +
<br>
 +
 +
inより外のデータをinfo->Valueにします。(左下寄せ)
 
  extern void __lmrcImagePad6(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode);
 
  extern void __lmrcImagePad6(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode);
 +
<table border="1">
 +
<tr>
 +
<th>出力画像outの要素</th>
 +
<th>処理結果</th>
 +
</tr>
 +
<tr>
 +
<td>入力画像inの配置</td>
 +
<td>左下寄せ</td>
 +
</tr>
 +
<tr>
 +
<td>in内のデータ</td>
 +
<td>そのまま</td>
 +
</tr>
 +
<tr>
 +
<td>in外のデータ</td>
 +
<td>info->Value</td>
 +
</tr>
 +
</table>
 +
<br>
 +
 +
=== 円・楕円内のパディング ===
 +
入力画像inのNx, Nyを軸とする楕円について平均値を算出してパディングします。
 
  extern void __lmrcImagePad7(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode);
 
  extern void __lmrcImagePad7(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode);
 +
<table border="1">
 +
<tr>
 +
<th>出力画像outの要素</th>
 +
<th>処理結果</th>
 +
</tr>
 +
<tr>
 +
<td>入力画像inの配置</td>
 +
<td>中央配置</td>
 +
</tr>
 +
<tr>
 +
<td>楕円内のデータ</td>
 +
<td>- (inの楕円内の平均値)</td>
 +
</tr>
 +
<tr>
 +
<td>楕円外のデータ</td>
 +
<td>info->Value</td>
 +
</tr>
 +
</table>
 +
<br>
 +
 +
入力画像inに対し、半径info->AWMinの内円と、半径info->AWMaxの外円の間での平均値を算出し、内円に対してパディングを行います。
 
  extern void __lmrcImagePad8(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode);
 
  extern void __lmrcImagePad8(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode);
extern void __lmrcImagePad9(mrcImage* out, mrcImage* in, lmrcImagePadInfo* info, long mode);
+
<table border="1">
 +
<tr>
 +
<th>出力画像outの要素</th>
 +
<th>処理結果</th>
 +
</tr>
 +
<tr>
 +
<td>入力画像inの配置</td>
 +
<td>中央配置</td>
 +
</tr>
 +
<tr>
 +
<td>内円内のデータ</td>
 +
<td>- (inの内外円間の平均値)</td>
 +
</tr>
 +
<tr>
 +
<td>内円外のデータ</td>
 +
<td>info->Value</td>
 +
</tr>
 +
</table>
 +
<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);
 +
 +
===API情報の出力===
 +
APIで使用するのモード説明を出力します。
 +
extern void lmrcImagePadModePrint(FILE* fpt);

2015年1月30日 (金) 07:59時点における最新版

DataManip/mrcImage/src/lmrcImagePadmrcImagePadのための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);