向量的小波分解

wavelet decomposition of a vector

如果我有一个大小为“m x n x p”的高光谱数据立方体,其中 m 是行大小,n 表示列大小,而 p 是波段总数。

让我们用 A 表示高光谱数据立方体。在这种情况下,A的每个像素对应一个大小为p x 1.

的向量

确定从 A 绘制一个像素,我们可以这样做:

specific_pixel = squeeze(A(x,y,:)); % Extracting a pixel located in the position x and y of A
plot(specific_pixel), ylabel('The specific pixel');

我有两个问题:

1) 我知道如何像上面那样分别绘制每个像素,但如何同时创建所有像素的图?例如,如果我们有一个 2D 图像,我们可以简单地写 plot(image)。但是对于一个数据立方体,我们该怎么做呢?

2)如果我将3级的一维小波haar应用于上面的特定像素:

[c,s] = wavedec(A, 3, 'haar');
approxi = appcoef(c, s, 'haar', 3);
details3 = detcoef(c, s, 3);
details2 = detcoef(c, s, 2);
details1 = detcoef(c, s, 1);

如何绘制 approxi 和三个细节的串联?

任何帮助将不胜感激。

如果我没理解错的话,您希望绘制 3D 数据。您可以使用 scatter3 or plot3 来实现您想要的。

使用 plot3,执行:

plot(A(:,:,1), A(:,:,2), A(:,:,3), 'b.', 'MarkerSize', 10);

scatter3做:

scatter3(A(:,:,1), A(:,:,2), A(:,:,3), 10, 'b');

以上代码以 3D space 大小 10 和蓝色绘制每个点。

对于第二个问题,假设输出也是3D的,你可以将立方体横向cat拼接起来,然后重复上面的代码。

像这样:

out = cat(2, approxi, details1, details2, details3);

plot(out(:,:,1), out(:,:,2), out(:,:,3), 'b.', 'MarkerSize', 10);
%// or
%// scatter3(out(:,:,1), out(:,:,2), out(:,:,3), 10, 'b');

cat 中的 2 参数水平连接,因此您将 4 个立方体水平拼接在一起,但在第三个维度中仍保持相同数量的维度,然后仅绘制所有他们同时。