如何用matlab将图像转换成二值矩阵?

如何用matlab将图像转换成二值矩阵?,matlab,image-processing,Matlab,Image Processing,这是我的代码,所以问题是文件不是我需要的格式,我需要一个矩阵,矩阵的每个像素都有R,G和B的值。我还尝试使用-mat作为格式 %Read the image im = imread('my_image.png'); %Write to file save('my_image.txt','-ascii','im') 我需要以下格式的矩阵:三列,每列分别代表R、G和B,以及MxN行,每列都是图像的不同像素。值必须是介于0和255之间的数字,但以8位格式写入,用于将矩阵作为ASCII分隔文件写入

这是我的代码,所以问题是文件不是我需要的格式,我需要一个矩阵,矩阵的每个像素都有R,G和B的值。我还尝试使用-mat作为格式

%Read the image
im = imread('my_image.png');

%Write to file
save('my_image.txt','-ascii','im')

我需要以下格式的矩阵:三列,每列分别代表R、G和B,以及MxN行,每列都是图像的不同像素。值必须是介于0和255之间的数字,但以8位格式写入,用于将矩阵作为ASCII分隔文件写入

%Create a matrix of size 4x5x3 with random integers between 1 and 10
>> a = randi([1 10], 4,5,3)

a(:,:,1) =

 5     6     1     9     7
 2     5     1     9     6
10     1     6     8    10
 8     7     1     2     7


a(:,:,2) =

 9     1     9     6     3
 5     2     9     5     5
 5     2     1     7     1
 9     4     4     7    10


a(:,:,3) =

 2     5     1     6     4
 2     4     8    10     8
 4    10     3     5     7
 2    10     5    10     6


%Write the matrix to file
>> dlmwrite('f1.txt', a);
文件内容
f1.txt

5,6,1,9,7,9,1,9,6,3,2,5,1,6,4
2,5,1,9,6,5,2,9,5,5,2,4,8,10,8
10,1,6,8,10,5,2,1,7,1,4,10,3,5,7
8,7,1,2,7,9,4,4,7,10,2,10,5,10,6
5,6,1,9,7
2,5,1,9,6
10,1,6,8,10
8,7,1,2,7
9,1,9,6,3
5,2,9,5,5
5,2,1,7,1
9,4,4,7,10
2,5,1,6,4
2,4,8,10,8
4,10,3,5,7
2,10,5,10,6
5,9,2
2,5,2
10,5,4
8,9,2
6,1,5
5,2,4
1,2,10
7,4,10
1,9,1
1,9,8
6,1,3
1,4,5
9,6,6
9,5,10
8,7,5
2,7,10
7,3,4
6,5,8
10,1,7
7,10,6
00000101 00001001 00000010
00000010 00000101 00000010
00001010 00000101 00000100
00001000 00001001 00000010
00000110 00000001 00000101
00000101 00000010 00000100
00000001 00000010 00001010
00000111 00000100 00001010
00000001 00001001 00000001
00000001 00001001 00001000
00000110 00000001 00000011
00000001 00000100 00000101
00001001 00000110 00000110
00001001 00000101 00001010
00001000 00000111 00000101
00000010 00000111 00001010
00000111 00000011 00000100
00000110 00000101 00001000
00001010 00000001 00000111
00000111 00001010 00000110
如果您想要不同的顺序,例如,分别针对组R、g和B,您可以执行以下操作:

>> dlmwrite('f2.txt', a(:,:,1))
>> dlmwrite('f2.txt', a(:,:,2),'-append')
>> dlmwrite('f2.txt', a(:,:,3),'-append')
文件内容
f2.txt

5,6,1,9,7,9,1,9,6,3,2,5,1,6,4
2,5,1,9,6,5,2,9,5,5,2,4,8,10,8
10,1,6,8,10,5,2,1,7,1,4,10,3,5,7
8,7,1,2,7,9,4,4,7,10,2,10,5,10,6
5,6,1,9,7
2,5,1,9,6
10,1,6,8,10
8,7,1,2,7
9,1,9,6,3
5,2,9,5,5
5,2,1,7,1
9,4,4,7,10
2,5,1,6,4
2,4,8,10,8
4,10,3,5,7
2,10,5,10,6
5,9,2
2,5,2
10,5,4
8,9,2
6,1,5
5,2,4
1,2,10
7,4,10
1,9,1
1,9,8
6,1,3
1,4,5
9,6,6
9,5,10
8,7,5
2,7,10
7,3,4
6,5,8
10,1,7
7,10,6
00000101 00001001 00000010
00000010 00000101 00000010
00001010 00000101 00000100
00001000 00001001 00000010
00000110 00000001 00000101
00000101 00000010 00000100
00000001 00000010 00001010
00000111 00000100 00001010
00000001 00001001 00000001
00000001 00001001 00001000
00000110 00000001 00000011
00000001 00000100 00000101
00001001 00000110 00000110
00001001 00000101 00001010
00001000 00000111 00000101
00000010 00000111 00001010
00000111 00000011 00000100
00000110 00000101 00001000
00001010 00000001 00000111
00000111 00001010 00000110
编辑1 正如Suever所说,除非将3D矩阵展平为2D,否则无法将其存储在ASCII文件中

>> a1 = reshape(a(:,:,1), [],1)
>> a2 = reshape(a(:,:,2), [],1)
>> a3 = reshape(a(:,:,3), [],1)
>> a4 = horzcat(a1, a2, a3)

a4 =

 5     9     2
 2     5     2
10     5     4
 8     9     2
 6     1     5
 5     2     4
 1     2    10
 7     4    10
 1     9     1
 1     9     8
 6     1     3
 1     4     5
 9     6     6
 9     5    10
 8     7     5
 2     7    10
 7     3     4
 6     5     8
10     1     7
 7    10     6

>> dlmwrite('f3.txt', a4)
文件内容
f3.txt

5,6,1,9,7,9,1,9,6,3,2,5,1,6,4
2,5,1,9,6,5,2,9,5,5,2,4,8,10,8
10,1,6,8,10,5,2,1,7,1,4,10,3,5,7
8,7,1,2,7,9,4,4,7,10,2,10,5,10,6
5,6,1,9,7
2,5,1,9,6
10,1,6,8,10
8,7,1,2,7
9,1,9,6,3
5,2,9,5,5
5,2,1,7,1
9,4,4,7,10
2,5,1,6,4
2,4,8,10,8
4,10,3,5,7
2,10,5,10,6
5,9,2
2,5,2
10,5,4
8,9,2
6,1,5
5,2,4
1,2,10
7,4,10
1,9,1
1,9,8
6,1,3
1,4,5
9,6,6
9,5,10
8,7,5
2,7,10
7,3,4
6,5,8
10,1,7
7,10,6
00000101 00001001 00000010
00000010 00000101 00000010
00001010 00000101 00000100
00001000 00001001 00000010
00000110 00000001 00000101
00000101 00000010 00000100
00000001 00000010 00001010
00000111 00000100 00001010
00000001 00001001 00000001
00000001 00001001 00001000
00000110 00000001 00000011
00000001 00000100 00000101
00001001 00000110 00000110
00001001 00000101 00001010
00001000 00000111 00000101
00000010 00000111 00001010
00000111 00000011 00000100
00000110 00000101 00001000
00001010 00000001 00000111
00000111 00001010 00000110
编辑2 要以8位格式写入数字:

%Convert decimal to 8-bit binary
>> b1 = dec2bin(a1, 8);
>> b2 = dec2bin(a2, 8);
>> b3 = dec2bin(a3, 8);

%Create array of blank characters to serve as delimiter
>> delim = blanks(size(b1,1))';

%Horizontal concatenation
>> b4 = horzcat(b1, delim, b2, delim, b3)

b4 =

00000101 00001001 00000010
00000010 00000101 00000010
00001010 00000101 00000100
00001000 00001001 00000010
00000110 00000001 00000101
00000101 00000010 00000100
00000001 00000010 00001010
00000111 00000100 00001010
00000001 00001001 00000001
00000001 00001001 00001000
00000110 00000001 00000011
00000001 00000100 00000101
00001001 00000110 00000110
00001001 00000101 00001010
00001000 00000111 00000101
00000010 00000111 00001010
00000111 00000011 00000100
00000110 00000101 00001000
00001010 00000001 00000111
00000111 00001010 00000110

%Write to file without the default ',' delimiter
>> dlmwrite('f4.txt', b4, '')
f4.txt的内容

5,6,1,9,7,9,1,9,6,3,2,5,1,6,4
2,5,1,9,6,5,2,9,5,5,2,4,8,10,8
10,1,6,8,10,5,2,1,7,1,4,10,3,5,7
8,7,1,2,7,9,4,4,7,10,2,10,5,10,6
5,6,1,9,7
2,5,1,9,6
10,1,6,8,10
8,7,1,2,7
9,1,9,6,3
5,2,9,5,5
5,2,1,7,1
9,4,4,7,10
2,5,1,6,4
2,4,8,10,8
4,10,3,5,7
2,10,5,10,6
5,9,2
2,5,2
10,5,4
8,9,2
6,1,5
5,2,4
1,2,10
7,4,10
1,9,1
1,9,8
6,1,3
1,4,5
9,6,6
9,5,10
8,7,5
2,7,10
7,3,4
6,5,8
10,1,7
7,10,6
00000101 00001001 00000010
00000010 00000101 00000010
00001010 00000101 00000100
00001000 00001001 00000010
00000110 00000001 00000101
00000101 00000010 00000100
00000001 00000010 00001010
00000111 00000100 00001010
00000001 00001001 00000001
00000001 00001001 00001000
00000110 00000001 00000011
00000001 00000100 00000101
00001001 00000110 00000110
00001001 00000101 00001010
00001000 00000111 00000101
00000010 00000111 00001010
00000111 00000011 00000100
00000110 00000101 00001000
00001010 00000001 00000111
00000111 00001010 00000110

加载图像会导致
mxnx3
3D矩阵,该矩阵不能用ASCII表示。您希望输出格式是什么样的?您应该显示一个示例我需要以下格式的矩阵:三列,每列分别表示R、G和B,以及MxN行,每列都是图像的不同像素。值必须是介于0和255之间的数字,但以8位格式写入。感谢您的帮助,我实际上使用了昨天刚找到的另一种方法,但我非常感谢您的帮助!没问题:)想把你的方法作为答案吗?