计算图像的每个块内的方差

时间:2013-11-16 06:36:22

标签: matlab

当我尝试计算图像中每个块的方差时,与我尝试计算平均值的方式相同,它会抛出如下错误:

??? 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

2 个答案:

答案 0 :(得分:0)

您正在使用x(:)这是一个单元格。尝试使用[x{:}]

你的代码没有运行,mat2cell-line包含两个[而没有]所以我没试过。

答案 1 :(得分:0)

您的图片a属于uint8,因此var失败。尝试通过doubleim2double将图片转换为double(a)/255

顺便说一句,您为什么不使用blockprocnlfilt2或类似的功能?