Image 如何使用矩阵创建图像?

Image 如何使用矩阵创建图像?,image,matlab,image-processing,matrix,Image,Matlab,Image Processing,Matrix,我想知道RGB[228198208]是什么颜色,所以我写了这个函数: 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

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

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);
此函数显示正确的颜色,但看起来与第一个颜色一样(图像大小除外)

所以我的问题是:

  • 我们创建的矩阵与我们从
    imread()
    中得到的矩阵有什么区别吗

    为什么第二个功能运行良好

  • 我们可以仅仅通过写一个矩阵来创建一个图像吗

  • 试一试

    Matlab支持两种不同的图像格式。一个是基于
    double
    数组的,其中值在0到1.0之间(这是
    ones
    创建的默认类型。请尝试键入
    class(ones(500500))
    )。另一个更有效,基于每个维度8位。这些数组由
    个(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);
    
    试一试

    Matlab支持两种不同的图像格式。一个是基于
    double
    数组的,其中值在0到1.0之间(这是
    ones
    创建的默认类型。请尝试键入
    class(ones(500500))
    )。另一个更有效,基于每个维度8位。这些数组由
    个(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);
    

    默认情况下,image/imshow将浮点数组显示为范围为[0,1]的图像。如果希望图像显示为[0255]范围,则需要将该范围传递到这些函数中。第二种方法有效,因为imread返回本机数据类型,通常是uint8,因此修改后的图像保持为uint8而不是双精度,然后imshow默认情况下将uint8数组显示为范围为[0255]的图像。不需要变量
    color
    ,也可以写入
    im(:,:,1)=228;im(:,:,2)=198;im(:,:,3)=208
    (不是解决问题,只是简化代码或答案中的代码)默认情况下,image/imshow将浮点数组显示为范围为[0,1]的图像。如果希望图像显示为[0255]范围,则需要将该范围传递到这些函数中。第二种方法有效,因为imread返回本机数据类型,通常是uint8,因此修改后的图像保持为uint8而不是双精度,然后imshow默认情况下将uint8数组显示为范围为[0255]的图像。不需要变量
    color
    ,也可以写入
    im(:,:,1)=228;im(:,:,2)=198;im(:,:,3)=208(不是解决问题,只是简化代码或答案中的代码)