图像和数据矩阵

时间:2014-01-01 18:52:58

标签: image matlab matrix

当我在MATLAB中阅读某些图片时,我们是说这个图片也是数据矩阵,还是两个不同的东西?如果它们不同,我们如何将图像转换为MATLAB

中的数据矩阵

据我所知,图像是一个像素矩阵,不是吗?

4 个答案:

答案 0 :(得分:1)

加载图像时,它会自动表示为矩阵。

>> A = imread('example.jpeg');
>> size(A)
ans = 512   512     3

所以A是512-512-3阵列 - 代表RGB图像!

要理解RGB表示,请尝试以下剪辑,它应该为您提供见解:

I = imread('example.jpeg');

%Red
R = I(:,:,1);
image(R), colormap([[0:1/255:1]', zeros(256,1), zeros(256,1)]), colorbar;
%Blue
B = I(:,:,3);
figure;
image(B), colormap([zeros(256,1), zeros(256,1), [0:1/255:1]']), colorbar;
%Green
G = I(:,:,2);
figure;
image(G), colormap([zeros(256,1),[0:1/255:1]', zeros(256,1)]), colorbar;

答案 1 :(得分:1)

这是一个数据矩阵。大多数时候,加载图像时格式为uint8格式,有时为三维(RGB,HSV ...),有时为二维(灰度)。要在矩阵之间获得更多操作,最好的方法是将数据转换为双精度格式(只需使用double)。

代码示例:

I=imread('img1.jpg');
I=double(I);
J=imread('img2.jpg');
J=double(J);

%你可以实现各种数组操作,例如乘法,点积,幂,......仅举几例

K = I.*J;
K1 = I.*(J<240);
K2 = J.^(0.5);

答案 2 :(得分:0)

图像被视为数据矩阵,是的。您应该注意的一件事是,MATLAB以不同的方式处理矩阵和图像的坐标

请参阅: http://www.mathworks.com/help/images/image-coordinate-systems.html

起初感到困惑,但你已经习惯了。如果有的话,最好使用图像处理工具箱的功能。

例:

让我们创建一个大小为(100x100)的上三角矩阵并将其显示为二进制图像:

D=triu(ones(100,100));
imshow(D)

Upper triangular matrix displayed

到此为止,一切顺利,如果我尝试使用通常的索引来访问此矩阵的元素:

D(5, 10);

我得到值1,正如预期的那样,行的索引(第一个)小于列的一个。

现在,如果我使用交互式工具获取图像上的点坐标,请点击鼠标(我先选择左边的):

imshow(D);
[x y]=getpts;

Selected points

返回以下坐标:(7,16)和(93,17)。

图像被视为具有从左到右的x轴和从上到下的y轴。

答案 3 :(得分:0)

取决于。

Matlab中有(至少)四种图像:

  1. 灰度图像:在这种情况下是,图像只是一个矩阵。每个矩阵条目代表相应像素的灰度级。

  2. 索引彩色图像:图像由矩阵和色彩图描述。色图的每一行是定义颜色的三元素矢量(就三种基色而言,例如R,G,B)。每个矩阵条目都包含一个数字,该数字是指向色彩映射的指针。具体来说,它包含一个colormap的行号,这样该像素的颜色就由colormap的相应行描述。

  3. 带有透明度信息的索引彩色图像:图像描述为案例2,但此外还有透明度(alpha)矩阵,需要将其考虑在内以呈现实际颜色。

  4. 非索引彩色图像:图像表示为大小为MxNx3的3D数组,其中MxN是图像大小。前两个索引指定一个像素,第三个指向每个原色,通常是R,G,B。例如,条目(m,n,1)表示(m,n)像素包含多少红色

  5. 根据您拥有的图像文件格式以及如何将其读入Matlab,您可能会获得以下四种类型中的一种。此外,您可能会在矩阵/ 3D数组中获得doubleuint8个值。有关详细信息,请参阅imread documentation