adding a condition to blkproc()
Show older comments
I use the following code to find the mean value of non-zero values of each block of an array. I wonder how I can add a condition to have a mean value if the number of non-zero values are bigger than 75% of the size of the block. I apperciate your help.
mean_wout_zeros = blkproc(Myarray,[block block],@(x)sum(x(:))./(sum(logical(x(:)))));
Answers (1)
Sean de Wolski
on 8 Jul 2011
Just use this as your function
function out = meanZ75(in)
%mean sans zeros if there are 25% or more zeros
%pure mean if there are < 25% zeros
%SCd 07/11/2011
%
in = in(:);
if nnz(in) >= 0.25*length(in);
out = mean(in(~~in));
else
out = mean(in);
end
4 Comments
Hassan
on 9 Jul 2011
Ashish Uthama
on 11 Jul 2011
Hassan, use meanZ75 as the input function handle: meanOut = blkproc(Myarray, [b b], @meanZ75);
Hassan
on 15 Jul 2011
Sean de Wolski
on 15 Jul 2011
save
function out = meanZ75 etc.
to 'meanZ75.m' in your MATLAB folder in your documents. Then use it as the function for blkproc
blkoproc(new_array2(:,:,iu),[10 10],'meanZ75');
Categories
Find more on Blocked Images in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!