【问题标题】:Divide an image into non-overlapping blocks and applying the 2D DWT on each block将图像划分为不重叠的块并在每个块上应用 2D DWT
【发布时间】:2019-03-24 14:46:52
【问题描述】:

我正在开发一个图像拼接检测软件,所以我需要将图像分成不重叠的块,并在图像的每个块上应用离散迈耶小波变换

我已尝试使用 blockproc 函数来执行此操作,但没有得到任何结果:

I = imread('pears.png');

fun = @(block_struct)...
    dwt2(block_struct.data,'dmey');

C = blockproc(I,[64 64],fun);

那么如何使用上面的代码访问dwt2[cA,cH,cV,cD]?

【问题讨论】:

    标签: image matlab image-processing dwt


    【解决方案1】:

    blockproc 假定您正在输出实际图像。您不能将其用于多个输出。如果您真的希望它与blockproc 一起工作,那么不幸的是,您需要调用blockproc 四次,每次都为方向提取不同的系数集。另请注意,2D DWT 仅适用于 灰度 图像,因此您需要在实际进行任何处理之前转换为灰度。您选择的梨图像是彩色/RGB 图像。

    我想参考这篇文章,了解如何在给定输入函数的情况下选择Nth 输出:How do I get the second return value from a function without using temporary variables?。您需要将此代码保存到名为nth_output.m 的文件中,该文件允许您以编程方式从函数中提取所有输出变量并仅选择一个输出。

    function value = nth_output(N,fcn,varargin)
      [value{1:N}] = fcn(varargin{:});
      value = value{N};
    end
    

    调用函数时只需省略额外的输出参数只会给您第一个输出,这就是您的blockproc 代码正在执行的操作。一旦你这样做了,就需要创建 4 个匿名函数来捕获来自 dwt2 的每个输出,并运行 blockproc 4 次。确保为每个匿名函数指定所需的输出,因此 14 并且除了输入函数的输入参数之外,您只需提供要运行的函数的句柄。

    因此,请尝试以下操作:

    I = rgb2gray(imread('pears.png'));
    fun1 = @(block_struct) nth_output(1, @dwt2, block_struct.data,'dmey');
    fun2 = @(block_struct) nth_output(2, @dwt2, block_struct.data,'dmey');
    fun3 = @(block_struct) nth_output(3, @dwt2, block_struct.data,'dmey');
    fun4 = @(block_struct) nth_output(4, @dwt2, block_struct.data,'dmey');
    I = rgb2gray(I);
    cA = blockproc(I,[64 64],fun1);
    cH = blockproc(I,[64 64],fun2);
    cV = blockproc(I,[64 64],fun3);
    cD = blockproc(I,[64 64],fun4);
    

    cAcHcVcD 包含每组方向所需的 DWT 系数。

    【讨论】:

    • 所以我需要应用 2 级 dwt 我将代码编写为 cA2 = blockproc(cA,[64 64],fun1); cH2 = blockproc(cH,[64 64],fun2); cV2 = blockproc(cV,[64 64],fun3); cD2 = blockproc(cD,[64 64],fun4);如果这是真的,我可以将两个级别的所有8个子带四舍五入到最接近的整数并取其绝对值
    • @MohammedKassem 是的,您必须重复该过程以进行 2 级分解。我不确定你最后评论的绝对值是什么意思。
    • @MohammedKassem 我回答你的问题了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    • 2020-02-05
    • 1970-01-01
    相关资源
    最近更新 更多