如何使用矩阵创建图像?

时间:2016-03-06 14:30:47

标签: image matlab image-processing matrix

我想知道RGB [228,198,208]的颜色是什么,所以我写了这个函数:

function showColor()
im = ones(500, 500, 3);
color = ones(500, 500);
R = color * 228;
G = color * 198;
B = color * 208;
im(:, :, 1) = R;
im(:, :, 2) = G;
im(:, :, 3) = B;
imshow(im);

结果是白色的,看起来并不正确。

然后我尝试了这个:

function showColor2()
im = imread('pic.jpg'); %It's a 2448*3264 picture
color = ones(2448, 3264);
R = color * 228;
G = color * 198;
B = color * 208;
im(:, :, 1) = R;
im(:, :, 2) = G;
im(:, :, 3) = B;
imshow(im);

此功能显示正确的颜色,但它看起来就像第一个(图像尺寸除外)。

所以我的问题是:

  1. 我们创建的矩阵和我们从imread()得到的矩阵有什么区别吗?

    为什么第二个功能运作良好?

  2. 我们可以通过编写矩阵来创建图像吗?

1 个答案:

答案 0 :(得分:4)

尝试

im = ones(500, 500, 3,'uint8');
color = ones(500, 500,'uint8');
R = color * 228;
G = color * 198;
B = color * 208;
im(:, :, 1) = R;
im(:, :, 2) = G;
im(:, :, 3) = B;
imshow(im);

Matlab支持两种不同的图像格式。一个基于double数组,其值在0到1.0范围内(这是由ones创建的默认类型。尝试键入class(ones(500,500)))。另一种更有效,基于每维8位。这些数组由ones(N,M,'uint8')创建。

要使用double图像格式,请使用原始代码,但请确保值介于0到1.0之间。所以,在你的情况下:

im = ones(500, 500, 3);
color = ones(500, 500);
R = color * 228/256;
G = color * 198/256;
B = color * 208/256;
im(:, :, 1) = R;
im(:, :, 2) = G;
im(:, :, 3) = B;
imshow(im);