在Matlab中从文本文件RGB数据创建图像

时间:2014-03-05 01:01:20

标签: image matlab matrix

我有一个带有RGB数据的文本文件,格式为:

[Pixel 0,0] [Pixel 1,0] [Pixel 2,0]...
[Pixel 0,1] [Pixel 1,1] [Pixel 2,2]...
...

输入:

0.0 0.0 0.0 <-- this would be Pixel 0,0
1.0 0.0 0.0
1.0 0.9 0.0

我可以用3x1创建德国国旗:

%load the data to myData
Germany = reshape(myData,3,1,3);
image(Germany)

This is an image

1px宽的图案在图片中显示效果很好,但是,目标是能够创建多个图案,例如3x3的德国国旗,3x3的罗马尼亚国旗或任何长度的任何其他模式,做那个!是我无法找到重塑矩阵的正确方法。

应该创建图中所示第二个示例的输入是:

         |========= Germany Flag ==========| [   Blue  ] [ Yellow  ] [   Red   ]
Black -> 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.9 0.0 1.0 0.0 0.0
Red ->   1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 0.9 0.0 1.0 0.0 0.0
Yellow-> 1.0 0.9 0.0 1.0 0.9 0.0 1.0 0.9 0.0 0.0 0.0 1.0 1.0 0.9 0.0 1.0 0.0 0.0

感谢任何帮助

更新:Marcin提问,输入文件是字面意思,如上所述。 这是GermanyRomania.txt文件的内容:

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.9 0.0 1.0 0.0 0.0
1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 0.9 0.0 1.0 0.0 0.0
1.0 0.9 0.0 1.0 0.9 0.0 1.0 0.9 0.0 0.0 0.0 1.0 1.0 0.9 0.0 1.0 0.0 0.0

使用该文件我必须在图片中创建第二个模式(德语+罗马尼亚标志),这里有所需的所有RGB信息。

1 个答案:

答案 0 :(得分:0)

我认为只需使用reshape功能即可实现您的目标。

我们必须考虑到Matlab以列主要顺序存储矩阵(您可以阅读更多关于它的here)。

因此,在我们使用reshape函数之前,我们必须使用以下格式的数据矩阵:

[Pixel 0,0]
[Pixel 0,1]
...
[Pixel 1,0]
[Pixel 1,1]
...
[Pixel n,n]

这是一个可能的解决方案:

# data stores the input
height = size(data, 1)
width = size(data, 2)
vertical_data_cell = mat2cell(data, height, 3 * ones(1, width / 3))'
vertical_data = cell2mat(vertical_data_cell)
flags = reshape(vertical_data, height, width / 3, 3)
image(flags)

请注意,我们在第4和第5行进行矩阵变换。

以下是您提供的输入结果:

enter image description here

它也适用于不同的高度。 这是德国,阿根廷和葡萄牙国旗的输入。

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.46 0.66 0.85 0.46 0.66 0.85 0.46 0.66 0.85
1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 1.0 1.0 0.98 0.75 0.29 1.0 1.0 1.0
1.0 0.9 0.0 1.0 0.9 0.0 1.0 0.9 0.0 0.46 0.66 0.85 0.46 0.66 0.85 0.46 0.66 0.85
0.0 1.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0
0.0 1.0 0.0 1.0 0.9 0.0 1.0 0.9 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0
0.0 1.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0

这就是结果: enter image description here