Matlab 按特定顺序将图像(3D阵列)转换为2D矩阵
假设你有一个200像素的图像。它将是一个10 x 20 x 3的数组,其中页面是颜色层(红色、绿色和蓝色)。如何将其转换为3(行)xn(列,如2000),以便每行表示颜色(行1为红色,行2为绿色等),列表示像素 我尝试过重塑形状,但我得到了一个3×N矩阵,它向下而不是水平地填充行(因此每行都是颜色的混合,而不是特定的颜色)。您使用的想法是正确的,但正如您自己发现的,数组维度的顺序很重要。幸运的是,您可以使用。因此,在您的情况下,“颜色信息”,即第三维度,应设置为第一维度,以便Matlab 按特定顺序将图像(3D阵列)转换为2D矩阵,matlab,Matlab,假设你有一个200像素的图像。它将是一个10 x 20 x 3的数组,其中页面是颜色层(红色、绿色和蓝色)。如何将其转换为3(行)xn(列,如2000),以便每行表示颜色(行1为红色,行2为绿色等),列表示像素 我尝试过重塑形状,但我得到了一个3×N矩阵,它向下而不是水平地填充行(因此每行都是颜色的混合,而不是特定的颜色)。您使用的想法是正确的,但正如您自己发现的,数组维度的顺序很重要。幸运的是,您可以使用。因此,在您的情况下,“颜色信息”,即第三维度,应设置为第一维度,以便重塑按预期工作 让我
重塑
按预期工作
让我们看一下这段代码片段:
%设置维度
行=10;
cols=20;
%生成人工图像
img=uint8(255*rand(行、列、3));
%独立获取每个通道的颜色
r=重塑(img(:,:,1),1,行*cols);
g=重塑(img(:,:,2),1,行*cols);
b=重塑(img(:,:,3),1,行*cols);
%使用上一个维度置换重塑图像
img2=重塑(排列(img,[3 1 2]),3,行*列);
%比较结果
rOK=(和(r==img2(1,:)==rows*cols)
gOK=(总和(g==img2(2,:)==rows*cols)
bOK=(和(b==img2(3,:)==rows*cols)
为了进行简单的比较,我分别获取了“颜色信息”,参见向量r
、g
、和b
。然后,我按照上述方式排列原始的img
,根据需要将其重塑为3xn
矩阵,并将每一行与r
、g
和b
进行比较
希望有帮助 您使用的想法是正确的,但是您自己发现,数组维度的顺序很重要。幸运的是,您可以使用。因此,在您的情况下,“颜色信息”,即第三维度,应设置为第一维度,以便重塑
按预期工作
让我们看一下这段代码片段:
%设置维度
行=10;
cols=20;
%生成人工图像
img=uint8(255*rand(行、列、3));
%独立获取每个通道的颜色
r=重塑(img(:,:,1),1,行*cols);
g=重塑(img(:,:,2),1,行*cols);
b=重塑(img(:,:,3),1,行*cols);
%使用上一个维度置换重塑图像
img2=重塑(排列(img,[3 1 2]),3,行*列);
%比较结果
rOK=(和(r==img2(1,:)==rows*cols)
gOK=(总和(g==img2(2,:)==rows*cols)
bOK=(和(b==img2(3,:)==rows*cols)
为了进行简单的比较,我分别获取了“颜色信息”,参见向量r
、g
、和b
。然后,我按照上述方式排列原始的img
,根据需要将其重塑为3xn
矩阵,并将每一行与r
、g
和b
进行比较
希望有帮助