how can i use dct2 function in blockproc to avoid the following error 'cant convert struct from double'?

5 views (last 30 days)
> I = rgb2gray(image1.png);
> myfun= @dct2;
> B = blockproc(I,[8 8],myfun);
These are the errors I get:
> Error using double
> Conversion to double from struct is not possible.
> Error in dct (line 28)
> a = double(a);
> Error in dct2 (line 68)
> b = dct(a, mpad);
> Error in blockprocFunDispatcher (line 14)
> output_block = fun(block_struct);
> Error in blockprocInMemory (line 81)
> [ul_output fun_nargout] =
> blockprocFunDispatcher(fun,block_struct,...
>
> Error in blockproc (line 237)
> result_image = blockprocInMemory(source,fun,options);
Can someone explain why these errors??

Accepted Answer

Daniel Burke
Daniel Burke on 28 Jul 2017
I was able to re-create your issue however the first step
I = rgb2gray(image1.png);
I was not able to convert directly from a png file with rgb2gray but rather I had to do
J = imread(image1.png)
I = rgb2gray(J);
Assuming your first 2 inputs are formatted how you want them, looking at the blockproc documentation:
It seems your issue is with the function handle input for dct2, according to the documentation the function input for blockproc should be a “Function handle to a function that accepts a block struct as input and returns a matrix, vector, or scalar.” Looking at the first example on the blockproc documentation page you should try something like this.
myfun = @(block_struct) dct2(block_struct.data);
Using this format fixed the ‘can’t convert struct from double’ error on my end.

More Answers (0)

Tags

No tags entered yet.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!