我正在尝试编写访问图像中每个块的函数false
,保留前2000个元素并将其余元素设置为零。但每次我这样做,我都会发现此错误消息:
@Html.ValidationMessageFor(m => m.buildingName)
这是replace
函数的代码:
Error using blockproc>parse_inputs (line 997)
Invalid block function. BLOCKPROC expects the user function, FUN, to be a valid function handle.
Error in blockproc (line 219)
[source,fun,options] = parse_inputs(source,block_size,fun,varargin{:});
Error in blk2 (line 6)
J3 = blockproc(I3,[8 8],'dct2',f);
我的脚本使用replace
,function features = replace(block)
for( i = 2000:length(block.data) )
% set each element to 0
block.data(i) = 0
end
和replace
:
dct2
答案 0 :(得分:0)
在获得正在运行的代码之前,您应该更改一些内容。首先,您应该在replace
函数中进行一些更改,因为在您的函数中未定义输出。此外,输入参数应更改为data
,因为您将block.data
传递给它,这是一个矩阵:
function data = replace(data)
data(2000:end) = 0;
也就是说,这个函数在你的例子中没有任何作用,因为你正在制作8x8块。
如果我理解正确,您需要在将replace
应用于该块后对每个块应用二维离散余弦变换。如果你看一下blockproc
,你会发现第三个输入参数应该是一个函数句柄。在您的情况下,f
是函数句柄的示例,但不完全是您想要的。您可以将其与dct2
结合使用,然后将函数句柄传递给blockproc
:
f = @(block) dct2(replace(block.data));
J3 = blockproc(double(I3),[8 8], f);
注意:您不必将图像转换为double
,但如果不这样做,则会丢失更多信息。