0

我是 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

但我不完全确定我应该如何在图像上获得这些线条。我已经用谷歌搜索过了,但没有一个符合我想要得到的。任何人都可以证明这是如何完成的吗?

4

2 回答 2

1

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

例如,第二个 12x12 块是

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

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

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

如果您确实确实需要显式生成子块,请参阅mat2cell以及这个 SO question

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

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

于 2019-08-04T18:27:53.293 回答
0

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

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])
于 2019-08-04T16:04:26.120 回答