【问题标题】:Splitting an image into blocks in Matlab在 Matlab 中将图像分割成块
【发布时间】:2019-08-04 09:11:07
【问题描述】:

我是 Matlab 新手,现在我正在尝试将图像拆分为 NxN 块,如下面的示例所示。

在matlab中,我目前正在尝试一些东西:

my_image = imread('cat.jpg')
figure, imshow(my_image)

nrow = 12; %12 by 12 blocks as shown in the example above.
ncol = 12;

for i =1:nrow
    for j=2:ncol
       block = ...
    end
end

但我不完全确定我应该如何在图像上获得这些线条。我已经用谷歌搜索过了,但没有一个符合我想要得到的。谁能演示一下这是如何完成的?

【问题讨论】:

  • 所以你想在图像上显示一个网格,而不是实际分割你的图像?一个简单的hold on 将为您保存绘图,允许在图像顶部绘制线条
  • @Adriaan 大发现。显然,上面显示的图片只是被分割成 NxN 块的过程背后的图像的视觉表示。如果是这样,我如何实际将图像拆分为 NxN 块,以便我可以独立处理每个块?我写的代码部分代码走对了吗?
  • 您的代码模糊且笼统,足以说明是的,它在正确的轨道上。

标签: matlab image-processing


【解决方案1】:

你不需要做任何事情。 Matlab 的数组索引已经支持检索和修改子块。

例如,第二个 12x12 块是

my_image(1:12,13:24,:)

(我假设颜色有 1 个额外维度。我会让你处理颜色。)

您不想重新创建块,除非您需要原始块和分区块进行计算。尽可能让 Matlab 处理复制和内存分配。

如果您确实需要显式生成子块,请参阅 mat2cellthis SO question

我已经用谷歌搜索过,但没有一个符合我想要得到的。

当您 Google 时,您希望 Google 最通用和最核心的概念。 Matlab中的图像是什么?它是一个矩阵。您需要的是搜索如何将矩阵拆分为子块。沿着这条线,搜索任何可能描述该概念的短语,您会在搜索结果中看到大量示例。

【讨论】:

    【解决方案2】:

    我相信你可以在没有第三维的情况下使用下面的想法。

    M = magic(4);
    
    N = 2;
    
    x = 1:N;
    y = 1:N;
    
    [ X, Y] = meshgrid( x, y);
    
    X = X(:);
    Y = Y(:);
    
    ind = sub2ind( size(M), X, Y);
    ind = sort(ind);
    
    subM = M(ind);
    subM = reshape( subM, [N N])
    

    【讨论】:

      猜你喜欢
      • 2014-04-11
      • 2013-12-05
      • 1970-01-01
      • 1970-01-01
      • 2016-05-16
      • 1970-01-01
      • 1970-01-01
      • 2012-11-13
      • 2017-05-24
      相关资源
      最近更新 更多