首页>Program>source

我有一个256x256的图像,我想将其划分为4个128x128的块,并将它们寻址为A1到A4.现在,我想分别调用它们并对其进行一些操作.我知道可以使用 blkproc 功能-但究竟如何?

我给维兹威兹打电话吗 这样吗?

blkproc

我用什么代替"?",如何处理创建的4个块?

B=blkproc(I,[4 4],?)
最新回答
  • 2021-1-8
    1 #

    blockproc起 (以及已弃用的 blkproc )都是Image Processing Toolbox中的功能,我想我会添加一个基本的MATLAB解决方案,不需要其他工具箱...

    如果要将矩阵划分为子矩阵,一种方法是使用 mat2cell 分解矩阵并将每个子矩阵存储在单元阵列的单元中.对于您的情况,语法如下所示:

    C = mat2cell(I, [128 128], [128 128]);
    

    C 现在是2 x 2单元格阵列,每个单元格存储 I的128 x 128子矩阵 .如果要对每个单元执行操作,则可以使用功能 cellfun .例如,如果要取每个子矩阵中值的平均值,则可以执行以下操作:

    meanValues = cellfun(@(x) mean(x(:)), C);
    

    第一个参数是匿名函数的函数句柄,该函数首先将每个子矩阵整形为列向量,然后取均值.输出是每个子矩阵的平均值的2×2矩阵.如果您将函数传递给 cellfun 为每个单元创建不同大小或类型的输出,然后 cellfun 连接它们会遇到问题,并会引发错误:

    ??? Error using ==> cellfun
    Non-scalar in Uniform output, at index 1, output 1.
    Set 'UniformOutput' to false.
    

    如果添加 ..., 'UniformOutput', false);cellfun的通话结束 ,则在上述情况下的输出将改为2 x 2单元格数组,其中包含对每个子矩阵执行操作的结果。

  • 2021-1-8
    2 #

    blockprocblkproc的新名称 (已弃用).它可用于将功能应用于图像中的每个块.例如,如果您想将矩阵I划分为8x8的块并计算每个块的平均值,则可以这样做:

    B=blockproc(I, [8 8], @(x) mean(x.data(:)));
    
    然后

    B是一个包含块均值的矩阵。

    这里要注意两件事:

      The specifier [8 8] 指定块的size,而不是块的number

      在传递给 blockproc的函数之外,您无法访问自身的块 .如果您自己需要块,则必须按照Adrien的建议进行操作:

      A1=I(1:128, 1:128);
      A2=I(129:256, 1:128);
      A3=I(1:128, 129:256);
      A4=I(129:256, 129:256);
      

      当然,在实际程序中,您可能应该使用循环来完成此操作。

      p

      如果 myImage 是您的256x256图片,不是吗

      image_top_left = myImage(1:128,1:128);
      image_top_right = myImage(1:128,129:256);
      image_bottom_left = myImage(129:256,1:128);
      image_bottom_right = myImage(129:256,129:256);
      

  • 2021-1-8
    3 #

    最好让您的程序适用于所有尺寸的图像,而不仅仅是256 * 256。

    [row, col]=size(your_image); mr = round(row/2); % median of rows mc = round(col/2); % median of columns % Now divide your image and call each of them separately and do what ever you want top_left = your_image(1:mr , 1:mc); top_right = your_image(1:mr , (mc+1):col); bot_left = your_image((mr+1):row , 1:mc); bot_right = your_image((mr+1):row , (mc+1):col); % final stage is to combining these parts again to return to its original shape Back_to_original = [top_left,top_right ; bot_left,bot_right];

    %hope这将对您有用.

  • c++:STL删除不能按预期工作吗?
  • iphone:如何从我的应用程序打开"设置"应用程序?