我的matlab代码中的blockproc函数有什么问题?

时间:2016-09-20 00:33:19

标签: matlab image-processing

我正在尝试编写访问图像中每个块的函数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);

我的脚本使用replacefunction features = replace(block) for( i = 2000:length(block.data) ) % set each element to 0 block.data(i) = 0 end replace

dct2

the input image

1 个答案:

答案 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,但如果不这样做,则会丢失更多信息。