当我在MATLAB
中阅读某些图片时,我们是说这个图片也是数据矩阵,还是两个不同的东西?如果它们不同,我们如何将图像转换为MATLAB
?
据我所知,图像是一个像素矩阵,不是吗?
答案 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)
到此为止,一切顺利,如果我尝试使用通常的索引来访问此矩阵的元素:
D(5, 10);
我得到值1,正如预期的那样,行的索引(第一个)小于列的一个。
现在,如果我使用交互式工具获取图像上的点坐标,请点击鼠标(我先选择左边的):
imshow(D);
[x y]=getpts;
返回以下坐标:(7,16)和(93,17)。
图像被视为具有从左到右的x轴和从上到下的y轴。
答案 3 :(得分:0)
取决于。
Matlab中有(至少)四种图像:
灰度图像:在这种情况下是,图像只是一个矩阵。每个矩阵条目代表相应像素的灰度级。
索引彩色图像:图像由矩阵和色彩图描述。色图的每一行是定义颜色的三元素矢量(就三种基色而言,例如R,G,B)。每个矩阵条目都包含一个数字,该数字是指向色彩映射的指针。具体来说,它包含一个colormap的行号,这样该像素的颜色就由colormap的相应行描述。
带有透明度信息的索引彩色图像:图像描述为案例2,但此外还有透明度(alpha)矩阵,需要将其考虑在内以呈现实际颜色。
非索引彩色图像:图像表示为大小为MxNx3的3D数组,其中MxN是图像大小。前两个索引指定一个像素,第三个指向每个原色,通常是R,G,B。例如,条目(m,n,1)表示(m,n)像素包含多少红色
根据您拥有的图像文件格式以及如何将其读入Matlab,您可能会获得以下四种类型中的一种。此外,您可能会在矩阵/ 3D数组中获得double
或uint8
个值。有关详细信息,请参阅imread
documentation。