【问题标题】:How to create an image using a matrix?如何使用矩阵创建图像?
【发布时间】:2016-03-06 23:54:17
【问题描述】:

我想知道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. 我们可以只写一个矩阵来创建图像吗?

【问题讨论】:

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

标签: image matlab image-processing matrix


【解决方案1】:

试试

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);

【讨论】:

    猜你喜欢
    • 2018-04-24
    • 2020-10-11
    • 1970-01-01
    • 2019-07-11
    • 1970-01-01
    • 2020-07-09
    • 2018-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多