首页 文章

如何在MATLAB上对像素对进行分组

提问于
浏览
-2

我有一个使用 imread 函数读入的图像 . 我的目标是在MATLAB中收集图像中的像素对 . 具体来说,我已经阅读了一篇论文,我正在尝试重新创建以下场景:

首先,将原始图像分组为像素值对 . 一对由两个相邻的像素值组成,或者两个具有小的差值 . 配对可以通过将相同行和连续列上的像素配对,或者垂直配对,或者通过基于键的特定模式来水平完成 . 配对可以是图像的所有像素或仅是图像的一部分 .

我希望重新创建水平配对方案 . 我不太确定如何在MATLAB中这样做 .

1 回答

  • 1

    假设您的图像是灰度图像,我们可以使用ndgrid轻松生成坐标的2D网格 . 我们可以使用它们来创建一个网格,然后将水平坐标向右移动以创建另一个网格,然后使用sub2ind将2D网格转换为线性索引 . 我们最终可以使用这些线性索引来创建您在评论中描述的像素配对(您应该将其添加到您的帖子BTW中) . 重要的是,您需要跳过一行中的每个其他列以确保唯一的像素配对 .

    我也会假设你的形象是 grayscale . 如果我们去上色,这会稍微复杂一点,我会把它留给你作为一个学习练习 . 因此,假设您的图像是通过 imread 读入并存储在 im 中,请执行以下操作:

    [rows,cols] = size(im);
    [X,Y] = ndgrid(1:rows,1:2:cols);
    ind = sub2ind(size(im), X, Y);
    ind_shift = sub2ind(size(im), X, Y+1);
    pixels1 = im(ind);
    pixels2 = im(ind_shift);
    pixels = [pixels1(:) pixels2(:)];
    

    pixels 将是一个2D数组,其中每一行都为您提供图像中特定配对的像素强度 . 请记住,我独立处理了每一行 . 因此,只要我们完成一行,我们只需转到下一行并继续执行该过程 . 这也假定您的图像具有 even 列数 . 如果不是,你有决定 . 您需要在末尾用一列填充图像,此列可以是您想要的任何内容,或者您可以在处理之前从图像中删除此列 . 如果要填写此列,可以将其全部设为零,也可以复制最后一列,并将其放在原始图像的最后一列旁边 . 因此,适当的预处理步骤可能如下所示:

    if mod(cols,2) ~= 0
        im = im(:,1:end-1);
    end
    

    如果列数为奇数,上面的代码只删除图像中的最后一列 . 运行此代码后,您可以运行我上面的第一段代码 .


    祝好运!

相关问题