【问题标题】:How to divide image matlab into overlapping block如何将图像matlab划分为重叠块
【发布时间】:2014-04-11 12:11:57
【问题描述】:

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

谢谢你的帮助

【问题讨论】:

    标签: matlab block overlapping


    【解决方案1】:

    您可以使用 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
    

    【讨论】:

    • 我看到如果可以显示每个块的数据,那么可以对数据的处理方式进行一些控制。我的问题不是图像的分割方式,而是数据在输出中的连接方式。无法控制它,如果需要以特定格式输出每个块。我可以将块单独保存在一个单元格中吗?然后单独处理每个块,然后连接结果?这会给我更多的控制权。
    • 我还有一个关于我的上述问题的问题:stackoverflow.com/questions/29109241/…我很感激您的意见。谢谢
    【解决方案2】:

    循环使用

    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
    

    添加边界检查条件等

    【讨论】:

      【解决方案3】:

      获取重叠块的最简单方法是使用带有“滑动”选项的 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
      

      【讨论】:

        【解决方案4】:

        首先声明一个变量(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;`
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-04-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-03
          • 2017-11-20
          • 1970-01-01
          相关资源
          最近更新 更多