【问题标题】:Block wise processing of an image in matlabmatlab中图像的分块处理
【发布时间】:2012-06-08 13:37:03
【问题描述】:

我有一个大小为 256*256 的图像,我想要对该图像进行分块处理。为此,我想获得 64*64=4096 个块,每个块 16 个像素。我是 Matlab 的新手,所以我发现很难找到具体的命令来做到这一点。到目前为止,我所拥有的是,

    I=imread('kidneyimage.jpg');
    I=rgb2gray(I);
    % block wise processing needed.

非常感谢任何有关命令的帮助。

【问题讨论】:

    标签: image matlab image-processing


    【解决方案1】:

    为此,您可以使用函数im2col

    http://www.mathworks.fr/help/toolbox/images/ref/im2col.html

    【讨论】:

    • 感谢您的回复。实际上我想要的是对每个块进行 haar 小波变换并获得特征 [Ca,Ch,Cv,Cd]。我知道 haar 变换的命令 [Ca,Ch,Cv,Cd] = dwt2(I,'haar');但是如何传递块而不是整个图像并分别为每个块获取 [Ca,Ch,Cv,Cd]?
    【解决方案2】:

    如果您刚开始使用 Matlab,请尝试最简单的方法:使用两个嵌套的 for 循环来迭代和操作每个块。查看imread 的帮助页面,此功能为您提供了一个填充了每个像素颜色的矩阵。 Matlab 具有使用colon (:) operator 提取部分矩阵的特殊符号,因此您可以轻松地逐个修改图像块。

    【讨论】:

    • 我实际上建议任何人(尤其是初学者)习惯于解决问题没有 for循环,并以正确的方式进行。
    • @EitanT 据我所知,Matlab 中的 for 循环是一个性能问题。对吗?
    • @Krishan 是的,在 MATLAB 中,您应该始终尝试不使用它们。
    • @Krishan 从性能的角度来看,使用 Matlab 而不是 C/C++ 是一个性能问题 :) 如果您的代码必须非常快,请仅使用 Matlab 来创建草案解决方案,然后重新实现它使用 C/C++ 数值库。无论如何,Matlab 循环在 90 年代一直很慢,但在最新版本的 Matlab 中它们变得更快。
    【解决方案3】:

    看来函数B =blockproc(A, [M N], fun) 正是你所需要的。它为每个图像块 A 应用函数 fun,然后连接结果。还有直接从文件中读取图像的选项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 2014-03-18
      相关资源
      最近更新 更多