首页 > 解决方案 > 包含 BorderSize 参数时的 Blockproc 错误

问题描述

我正在使用 Matlab 在 dct https://www.mathworks.com/help/images/discrete-cosine-transform.html上进行练习

我运行了以下代码:

I = imread('cameraman.tif'); 
I = im2double(I);
imshow(I)

T = dctmtx(8);
dct = @(block_struct) T * block_struct.data * T';
B = blockproc(I,[8 8],dct,'BorderSize',[4 4],'Trim',false) %modification made here

代码来自上面的链接,但我包含了“BorderSize”标准以允许块重叠。运行代码后,我收到错误消息:

Error using blockprocFunDispatcher
BLOCKPROC encountered an error while evaluating the user-supplied function handle,FUN.

Error in blockprocInMemory
[u1_output fun_nargout] = blockprocFunDispatcher(fun,block_struct,...

Error in blockproc
    result_image = blockprocInMemory(source,fun,options);

导致上述错误消息的问题可能是什么?如果我删除 'BorderSize',[4 4], 'Trim',false它会像在链接中一样正常工作,但我使用错了吗?

标签: imagematlabimage-processing

解决方案


您是否考虑到指定 BorderSize 时,您的块大小在函数 dct 的定义中会更大?您的函数将收到一个 12x12 块,在我看来,就像矩阵中的大小不匹配乘以 T 和 T'。您是否需要将 T 的定义更改为:

T = dctmx(12)

?


推荐阅读