【问题标题】:MATLAB get xyrgb pixel valuesMATLAB 获取 xyrgb 像素值
【发布时间】:2016-10-02 22:08:25
【问题描述】:

我正在尝试为图像中的每个像素获取一个包含一行的五列矩阵。前两列是像素的位置 (x,y),其余列是像素的 RGB 值。

我可以使用循环来创建这个矩阵,但是为了提高效率我想对这个操作进行矢量化。我可以分别用 img(:,:,1)、img(:,:,2) 和 img(:,:,3) 获得 RGB 值,但我不知道如何获得 x 和 y 值矢量化时关联的像素。

【问题讨论】:

    标签: matlab computer-vision


    【解决方案1】:

    您可以使用meshgrid 获取所有xy 坐标,然后将它们附加到您的数据中,从而生成N x 5 矩阵。

    [x, y] = meshgrid(1:size(img, 2), 1:size(img, 1));
    out = cat(2, x(:), y(:), reshape(img, [], 3));
    

    【讨论】:

      【解决方案2】:

      Find 是查询坐标的一种方式。

      您可以分离RGB通道,找到坐标然后连接结果:

      imgR = img(:, :, 1);
      imgG = img(:, :, 2);
      imgB = img(:, :, 3);
      [rows, cols] = find(imgR + 1); % +1 to avoid zeros!
      M = [rows, cols, imgR(:), imgG(:), imgB(:)];
      

      【讨论】:

      • find 的速度并不快,尤其是在将所有索引制成表格时。
      • 另外find的输出分别是行和列,所以真的是[y, x] = find(imgR)如果有的话
      • @AndrasDeak 关于你说得对的速度,我实际上与meshgrid 进行了比较,find 的结果更好,但仅适用于小图像。
      • @Suever 我避免了零的问题,感谢您的注意。 xy 的定义是一个偏好问题,两者都可以。但既然我们谈论的是在图像中协调,我更喜欢我的。
      • @erfan 数学家自己注意到row/column and x/y indexing 之间的区别。 x 被广泛认为是列。至少,将find 的输出标记为[rows, columns] 或类似名称,以免混淆。
      猜你喜欢
      • 2018-04-25
      • 2016-09-25
      • 2014-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多