5

私はblockproc画像をブロック単位で処理するために使用しています。残念ながら、blockprocこれは私がパソコンに持っていない画像処理ツールボックスの一部です。

ベースMatlabに、代わりに使用できる関数の組み合わせはありblockprocますか?


私の最初の推測は、im2col各ブロックを列に変換してから、arrayfun各列を処理するために使用することでした。それから、それもImage Processing Toolboxの一部であることに気づいたので、それではim2col問題は解決しません。

4

2 に答える 2

8

以下は MAT2CELL を使用した例です。画像を N 行 M 列のタイルに分割し、画像サイズがタイルの数で割り切れない場合を処理します。

%# 2D grayscale image
I = imread('coins.png');

%# desird number of horizontal/vertical tiles to divide the image into
numBlkH = 4;
numBlkW = 4;

%# compute size of each tile in pixels
[imgH,imgW,~] = size(I);
szBlkH = [repmat(fix(imgH/numBlkH),1,numBlkH-1) imgH-fix(imgH/numBlkH)*(numBlkH-1)];
szBlkW = [repmat(fix(imgW/numBlkW),1,numBlkW-1) imgW-fix(imgW/numBlkW)*(numBlkW-1)];

%# divide into tiles, and linearize using a row-major order
C = mat2cell(I, szBlkH, szBlkW)';
C = C(:);

%# display tiles i subplots
figure, imshow(I)
figure
for i=1:numBlkH*numBlkW
    subplot(numBlkH,numBlkW,i), imshow( C{i} )
end

入力画像と結果のタイル:

入力画像 タイル

于 2012-06-29T15:20:27.240 に答える
2

一緒にmat2tilesを使用cellfunし、cell2mat多かれ少なかれ何をblockprocしますか?

と同じ引数を使用するラッパーを自分で作成することもできますが、blockprocそれほど難しいことではないと思います。

于 2012-06-28T08:52:48.160 に答える