# which way is better to calculate var of image with blockproc?

2 views (last 30 days)

Show older comments

hi everyone I have an image and I want to use var,mean,skewnes,... of this image in a 3*3 block.I thought this code is correct:

function [ varianceImage ] = var3dar3( Img )

blockSize = [3 3];

varFilterFunction = @(theBlockStructure)var(double(theBlockStructure.data(:)));

blockyImagevar = blockproc(Img, blockSize, varFilterFunction);

varianceImage=blockyImagevar (:);

end

but when I want to test this code I decide to compare var with this code:

function [varianceImage] = GetvarianceGL(Img)

blockSize = [3 3];

varFilterFunction = @(theBlockStructure) varimg(double(theBlockStructure.data(:)));

blockyImagevar = blockproc(Img, blockSize, varFilterFunction);

varianceImage=blockyImagevar(:);

end

that in this code varimage is this:

function [varianceGL] = varimg(Img)

[pixelCounts,GLs] = imhist(Img); %Gray Levels (the intensity value) and the count of pixels in the image having the gray level.

imshow(imhist(Img))

% Get the number of pixels in the histogram.

numberOfPixels = sum(pixelCounts)

% Get the mean gray lavel.

meanGL = sum(GLs .* pixelCounts) / numberOfPixels

% Get the variance, which is the second central moment.

varianceGL = sum((GLs - meanGL) .^ 2 .* pixelCounts) / (numberOfPixels-1);

end

which one is correct var3dar3 or GetvarianceGL? why the result of var is diffrent between manual way and ready way in matlab toolbox? I need manual way for my future works. Your help would be appreciated "

##### 0 Comments

### Answers (3)

Walter Roberson
on 31 May 2015

In your first code you have

StDevFilterFunction = @(theBlockStructure) var(double(theBlockStructure.data(:)));

but notice you are taking var() there not std(). The rest of your code also thinks it is dealing with std, such as squaring the result to get the variance.

Image Analyst
on 31 May 2015

Morteza Hajitabar Firuzjaei
on 29 Jan 2018

Edited: Walter Roberson
on 29 Jan 2018

This code calculates the variance of a RGB image but it's not standard variance, see below:

%------------------------------------------

close all;

clear all;

clc;

I = imread('b.png');

blockSize = [6 6];

varFilterFunction = @(theBlockStructure) var(double(theBlockStructure.data(:)));

blockyImagevar = blockproc(I, blockSize, varFilterFunction);

varianceImage=blockyImagevar(:);

display(varianceImage);

%---------------------------------------

Morteza Hajitabar Firuzjaei

##### 0 Comments

### See Also

### Categories

### Products

### Community Treasure Hunt

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

Start Hunting!