image - 包含 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它会像在链接中一样正常工作,但我使用错了吗?
解决方案
您是否考虑到指定 BorderSize 时,您的块大小在函数 dct 的定义中会更大?您的函数将收到一个 12x12 块,在我看来,就像矩阵中的大小不匹配乘以 T 和 T'。您是否需要将 T 的定义更改为:
T = dctmx(12)
?
推荐阅读
- python - 粗体文本最后一行破折号数据表
- javascript - Javascript 高级字符串搜索,找到右花括号
- flutter - 如何使用 Flutter 从图像中提取 RGB 颜色值?
- html - 为什么我的 ajax GET 请求返回一个空数组?
- python - 删除目录中所有txt文件名的最后10个字符(Python)
- javascript - 使用 alasql 时如何将数据包装到列宽?
- extjs - 在 Ext JS 中的无线电组上添加事件处理程序
- python - 将变量的引用替换为稍后在 Python 文件中完成的赋值
- php - 在 Laravel 中设置单例服务类有意义吗?
- python - 安装json5库失败