matlabを使用して画像512*512を41*41オーバーラップに分割する必要があります。つまり、最初にqを中心とする41 * 41ブロックを取得し、次にピクセル単位でシフトして、qを中心とする41*41を取得します。 +1など..Blockprocは重複しないブロックを提供するため、使用できません。
私を助けてくれてありがとう
matlabを使用して画像512*512を41*41オーバーラップに分割する必要があります。つまり、最初にqを中心とする41 * 41ブロックを取得し、次にピクセル単位でシフトして、qを中心とする41*41を取得します。 +1など..Blockprocは重複しないブロックを提供するため、使用できません。
私を助けてくれてありがとう
BLOCKPROC を使用できます。それは少し自明ではありません。
ブロック サイズを [1 1] に設定し、 'Border' パラメーターを使用して、各ピクセルの周りに必要なブロックの大きさを指定します。
>> a
a =
8 1 6
3 5 7
4 9 2
>> blockproc(a, [1 1], @(bs)disp(bs.data),'BorderSize', [1 1 ])
0 0 0
0 8 1
0 3 5
0 0 0
1 6 0
5 7 0
0 3 5
0 4 9
0 0 0
5 7 0
9 2 0
0 0 0
0 0 0
8 1 6
3 5 7
0 8 1
0 3 5
0 4 9
8 1 6
3 5 7
4 9 2
3 5 7
4 9 2
0 0 0
1 6 0
5 7 0
9 2 0
でループする
block_size = 41;
row_startpos = 1;
col_startpos = 1;
Img = imread('your_image.jpg');
>Loop Begins here
a = Img(row_startpos:block_size,col_startpos:block_size);
row_startpos = row_startpos+row_overlap;
col_startpos = col_startpos+col_overlap;
>Loop Ends here
国境チェック基準などを追加
重なり合うブロックを取得する最も簡単な方法は、im2col() を 'sliding' オプションとともに使用することです。
%Read images one at a time , get overlapping patches of size sz,sz and concatenate it to columns of a matrix.
% LOOP HERE
f=imread([inp_dir files(k).name]);
% extract patches of image
P=[P im2col(f,[sz sz],'sliding')];
% END LOOP HERE
まず、ブロックサイズ 41*41 の画像ブロックを格納する変数 (Var) を宣言します。次に、2 つの for ループを使用して画像のブロックを抽出します。コードは次のとおりです。
I = imread('cameraman.tif');
[row,col] = size(I);
window = 41;
Var = zeros(1:window,1:window);
for i = 21:row-window
for j= 21:col-window
Var = I(i-20:i+20,j-20:j+20);
end;
end;`