我需要使用matlab将图像512 * 512划分为41 * 41重叠。换句话说,我想首先采用以q为中心的41 * 41块,然后我移动一个像素,我采取41 * 41以q + 1为中心,依此类推。我不能使用Blockproc,因为它给出了一个不重叠的块。
感谢帮助我
答案 0 :(得分:3)
您可以使用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
答案 1 :(得分: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
添加边境检查标准等
答案 2 :(得分:0)
获取重叠块的最简单方法是使用im2col()和'滑动'选项。
%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
答案 3 :(得分:-1)
首先声明一个变量(Var)来存储blocksize 41 * 41的图像块。然后使用两个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;`