如何将图像matlab划分为重叠块

时间:2013-03-04 05:19:11

标签: matlab block overlapping

我需要使用matlab将图像512 * 512划分为41 * 41重叠。换句话说,我想首先采用以q为中心的41 * 41块,然后我移动一个像素,我采取41 * 41以q + 1为中心,依此类推。我不能使用Blockproc,因为它给出了一个不重叠的块。

感谢帮助我

4 个答案:

答案 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;`