>我正在创建一个图像拼接检测软件,所以我需要将图像划分为非重叠的块,并在图像的每个块上应用离散迈耶小波变换
我已经尝试了blockproc
函数来做到这一点,但我没有得到任何结果:
I = imread('pears.png');
fun = @(block_struct)...
dwt2(block_struct.data,'dmey');
C = blockproc(I,[64 64],fun);
那么如何使用上面的代码访问dwt2
的[cA,cH,cV,cD
]呢?
blockproc
假设您正在输出实际图像。 您不能将其用于多个输出。 如果你真的希望它适用于blockproc
,不幸的是,你需要调用blockproc
四次,每次都提取不同的方向系数集。 另请注意,2D DWT 仅适用于灰度图像,因此您需要在实际执行任何处理之前转换为灰度。 您选择的梨图像是彩色/RGB图像。
我想参考这篇文章,了解如何在给定输入函数的情况下选择第N
个输出:如何在不使用临时变量的情况下从函数中获取第二个返回值? 您需要将此代码保存到名为nth_output.m
的文件中,该文件允许您以编程方式从函数中提取所有输出变量并仅选择一个输出。
function value = nth_output(N,fcn,varargin)
[value{1:N}] = fcn(varargin{:});
value = value{N};
end
调用函数时,只需省略额外的输出参数,只会为您提供第一个输出,这就是blockproc
代码正在执行的操作。 一旦你这样做了,就要创建 4 个匿名函数来捕获dwt2
的每个输出,并运行 4 次blockproc
。 请确保为每个匿名函数指定所需的输出,以便最多1
4
,并且除了进入函数的输入参数之外,只需为要运行的函数提供句柄。
因此,请尝试如下操作:
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);
cA
、cH
、cV
和cD
包含每组方向所需的 DWT 系数。