我需要使用 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()。
%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
首先声明一个变量(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;`