仕組みと計算式

このページでは、K-Space Paint が画面の裏で行っている計算を、実際のプログラムと同じ定義で説明します。

K-Space Paint は、フーリエ変換と k空間の関係を学ぶための教材です。MRI 装置の信号収集や画像再構成を再現するものではなく、医療上の判断には使用できません(下の「実際の MRI との違い」を参照)。

1. 格子と座標

実空間(画像)と k空間は、どちらも N×N の格子(N=256)です。

2. フーリエ変換

実空間に描く(順変換)

描いた画像 f(x,y)(白 = 1、黒 = 0)の 2次元離散フーリエ変換を計算します。

F(u,v)= ∑x=0N−1 ∑y=0N−1 f(x,y) e−i2π(ux+vy)/N

k空間に描く(逆変換)

描いた k空間 F(u,v)(複素数)の 2次元逆離散フーリエ変換を計算します。

f(x,y)= ∑u=−128127 ∑v=−128127 F(u,v) e+i2π(ux+vy)/N

正規化係数 1/N2 は省いています。表示のときに最大値で割るので、画面の見た目は係数があってもなくても同じです。計算には高速フーリエ変換(FFT、基数2)を使っていますが、結果は上の定義式と同じです(「6. 検証」を参照)。

どちらの変換も離散的なので、画像は周期的につながっています。画像の上端と下端、左端と右端は隣どうしとして扱われます。

3. 画面に表示するときの処理

計算結果をそのまま表示すると見づらいため、次の処理をしてから 0〜1 の明るさにしています。表示は計算結果を加工したものなので、明るさは値の大きさに比例しません。

表示するもの表示する値
再構成画像 I=(|f(x,y)|max|f|)0.85
絶対値(振幅)を最大値で割り、少し明るく持ち上げます(ガンマ 0.85)。
k空間(フーリエ変換の結果、取り込んだ k空間) L=ln(1+1000⋅|F|/max|F|)ln(1001)
中心(直流成分)だけが突出して他が見えなくなるのを防ぐため、対数で圧縮します(「対数表示」と書いてある画面)。位相は表示していません。
自分で描いた k空間 |F(u,v)| をそのまま表示します(0〜1)。
k空間の、1〜4マスだけの小さな点 256×256 の1マスは画面上で数ピクセルにしかならず見落としやすいため、値のあるマスが上下左右・斜めにつながったかたまりのうち4マス以下で、まわり2マス以内にほかの点や線がないものは、表示のときだけ各マスを 5×5 マスの大きさで描きます(プリセットの「中心の1点」「対称な2点」「ランダム」など)。計算に使うデータはそのままで、再構成画像には影響しません。

例:「対称な2点」で縞が細かく見える理由

プリセット「対称な2点」は (u,v)=(10,4) と (−10,−4) に値 1 を置きます。このとき f=2cos(2π(10x+4y)/N) になります。画面に出しているのは絶対値 |f| なので、負の部分も明るく表示され、明るい縞の数は余弦波の周期の2倍に見えます。

4. ブラシ

1回のブラシで、指(マウス)の位置を中心に、なめらかなガウス関数の形の値を足します。中心から (dx,dy) 離れたマスに足す量は次のとおりです。

Δ=s⋅ exp(−dx2+dy22r2)
描く場所とツール値の変え方
実空間・ペン / 消しゴムf←min(1,max(0,f+Δ))
k空間・ペン実部に Δ を足します。振幅が 1 を超えたら、位相を保ったまま振幅を 1 にします。
k空間・消しゴムF←F⋅max(0,|F|+Δ)|F|
位相を保ったまま振幅だけを減らします。

対称モード(エルミート対称)

「対称」をオンにすると、(u,v) に描いたのと同じ量を、中心について点対称な (−u,−v) にも描きます。対称モードのまま描いた k空間(と、画像から取り込んだ k空間)は

F(−u,−v)=F(u,v)‾

(複素共役)を満たすので、逆変換した f(x,y) は実数になります。実在する物体の画像に近い、自然な見た目になります。ただし、u=−128 の列と v=−128 の行(画面の左端・上端)は、対になる相手が格子の外なので、自分自身と対になります。

5. 画像の取り込み

6. 検証

プログラムの FFT の結果を、上の定義式をそのまま足し算で計算した値と突き合わせて確認しています(2026年10月3日)。

7. 実際の MRI との違い

K-Space Paint の「k空間」は、画像の 2次元離散フーリエ変換そのものです。実際の MRI では、次のような点が異なります。

最終更新:2026年10月3日