Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 图像和数据矩阵_Image_Matlab_Matrix - Fatal编程技术网

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;