Image 图像和数据矩阵
当我在Image 图像和数据矩阵,image,matlab,matrix,Image,Matlab,Matrix,当我在MATLAB中阅读一些图像时,我们是说这个图像也是一个数据矩阵,还是说它们是两个不同的东西?如果它们不同,我们如何在MATLAB中将图像转换为数据矩阵 据我所知,图像是像素矩阵,不是吗?加载图像时,它会自动表示为矩阵 >> A = imread('example.jpeg'); >> size(A) ans = 512 512 3 所以A是一个512-512-3数组-它代表一个RGB图像 要理解RGB表示法,请尝试以下截图,它将为您提供见解: I =
MATLAB
中阅读一些图像时,我们是说这个图像也是一个数据矩阵,还是说它们是两个不同的东西?如果它们不同,我们如何在MATLAB
中将图像转换为数据矩阵
据我所知,图像是像素矩阵,不是吗?加载图像时,它会自动表示为矩阵
>> 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;
这是一个数据矩阵。大多数情况下,加载图像时是
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);
K=I*J;
K1=I.*(J图像被视为数据矩阵,是的。有一件事你应该知道,MATLAB对矩阵和图像的坐标处理不同
见:
一开始令人困惑,但你已经习惯了。如果你有图像处理工具箱,最好使用它的功能
例如:
让我们创建一个大小为(100x100)的上三角矩阵,并将其显示为二进制图像:
D=triu(ones(100,100));
imshow(D)
到目前为止,如果我尝试使用常规索引访问此矩阵的元素,一切都很好:
D(5, 10);
我得到的值是1,与预期值一样,因为行(第一行)的索引小于列的索引
现在,如果我使用交互式工具获取图像上点的坐标,用鼠标单击,如下所示(我先选择了左一个):
它返回以下坐标:(7,16)和(93,17)
图像被视为具有从左到右的x轴和从上到下的y轴。视情况而定
Matlab中有(至少)四种图像:
灰度图像:在本例中,是的,图像只是一个矩阵。每个矩阵项表示对应像素的灰度
索引彩色图像:图像由矩阵和颜色映射描述。颜色映射的每一行是定义颜色的三元素向量(以三种原色表示,如R、G、B)。每个矩阵项都包含一个数字,该数字是指向colormap的指针。具体而言,它包含colormap的行号,因此该像素的颜色由colormap的相应行描述
带透明度信息的索引彩色图像:图像描述如案例2所示,但另外还有一个透明度(alpha)矩阵,在渲染实际颜色时需要考虑该矩阵
非索引彩色图像:图像表示为大小为MxNx3的3D数组,其中MxN为图像大小。前两个索引指定一个像素,第三个索引指的是每种原色,通常为R、G、B。例如,条目(m、n、1)表示(m、n)像素包含多少红色
根据您拥有的图像文件格式以及如何将其读入Matlab,您可能会得到这四种类型中的一种。此外,您可能会在矩阵/3D数组中获得double
或uint8
值。有关详细信息,请参阅。@Ashleyedway感谢您的建议!添加了示例代码。Matlab=矩阵实验室。任何东西都是矩阵的一种,它只是标量、对象、字符等的多维数组。Image也不例外。它是uint8数据类型的三维数组。
imshow(D);
[x y]=getpts;