@EitanTが指摘したようblockproc
に、画像のバッチブロック処理に使用できますがJ.
、関数ハンドルを次のように定義する必要があります
fun = @(block_struct) fft2(block_struct.data);
B = blockproc(J, [64 10], fun);
[2000 x 500]
行列の場合、これは[2000 x 500]
複素フーリエ値の出力を提供し、ローカル サポート (FFT への入力のサイズ) を持つサブサンプリングされたピクセル位置で評価されます[64 x 10]
。ここで、これらの値を 1 つの値 (たとえばピークの対数振幅) に置き換えるには、さらに指定できます。
fun = @(block_struct) max(max(log(abs(fft2(block_struct.data)))));
B = blockproc(J, [64 10], fun);
出力は、ブロックパッチ値の [2000/64 x 500/10] 出力であり、これは、最近傍補間 (またはより滑らかなバージョンの場合は別のもの) によって、目的の [2000 x 500] 元のサイズにサイズ変更できます。
C = imresize(B, [2000 500], 'nearest');
さらに役立つ場合は、実際の画像の例を含めることができます。
更新:オーバーラップ ブロックを取得するには、サイズの最終的なウィンドウのサイズが [64, 10] のままになるようにオーバーラップを設定する'Bordersize'
オプションを使用できます。例:blockproc
[V H]
[M + 2*V, N + 2*H]
fun = @(block_struct) log(abs(fft2(block_struct.data)));
V = 16; H = 3; % overlap values
overlap = [V H];
M = 32; N = 4; % non-overlapping values
B1 = blockproc(J, [M N], fun, 'BorderSize', overlap); % final windows are 64 x 10
ただし、これは上記の単一値バージョンではなく、完全なフーリエ応答を維持することで機能しmax(max())
ます。
blockproc:
「本当に大きい」画像の取り扱い: ブロック処理を使用したフィルタリングについては、この記事も参照してください。