当我尝试计算图像中每个块的方差时,与我尝试计算平均值的方式相同,它会抛出如下错误:
??? Error using ==> var at 56
First argument must be single or double.
Error in ==> @(x)var(x(:))
Error in ==> assignemt at 19
varValues = cellfun(@(x) var(x(:)),b);
在这方面有人可以提供帮助吗?
我写的代码是
clc;
close all;
d=8;
a=imread('lena.jpg');
figure();
imshow(a);
b=mat2cell(a,[16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16[16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]);
[m,n]=size(b);
[m,n]=size(a);
%calculate mean for host image
% for i=1:m
% for j=1:n
% meanValues = cellfun(@(x) mean(x(:)),b);
% end
% end
% calculate variance for host image
for i=1:m
for j=1:n
varValues = cellfun(@(x) var(x(:)),b);
end
end
答案 0 :(得分:0)
您正在使用x(:)
这是一个单元格。尝试使用[x{:}]
你的代码没有运行,mat2cell-line包含两个[
而没有]
所以我没试过。
答案 1 :(得分:0)
您的图片a
属于uint8
,因此var
失败。尝试通过double
或im2double
将图片转换为double(a)/255
。
顺便说一句,您为什么不使用blockproc
,nlfilt2
或类似的功能?