How to find the variance of an image in a special windows? variance(in 3*3 windows)

1 vue (au cours des 30 derniers jours)
sara
sara le 26 Jan 2015
Commenté : Image Analyst le 2 Fév 2015
I obtain mean of image like this
if true
function [ I2] = mean3dar3( m )
h = fspecial('average', [3 3]);
I2 = imfilter(m,h);
end
I want to obtain variance of image in a special windows like mean but I dont know how can I make filter of this... thanks
end

Réponses (3)

Image Analyst
Image Analyst le 26 Jan 2015
You could use the built-in function stdfilt() and square it.
grayImage = imread('cameraman.tif');
subplot(1,3,1);
imshow(grayImage);
fontSize = 20;
title('Original Image', 'FontSize', fontSize);
% Enlarge figure to full screen.
set(gcf, 'Units', 'Normalized', 'Outerposition', [0, 0, 1, 1]);
stdImage = stdfilt(grayImage, true(3));
subplot(1,3, 2);
imshow(stdImage, []);
title('Standard Deviation Image', 'FontSize', fontSize);
varianceImage = stdImage .^2;
subplot(1,3, 3);
imshow(varianceImage, []);
title('Variance Image', 'FontSize', fontSize);
Or you could also do it with blockproc() though it's not so straightforward. Let me know if you want a demo of that method.
  2 commentaires
sara
sara le 31 Jan 2015
thanks.
yes I think about my problem ...I don t want to have overlap.I need blockproc()...can you help me??
Image Analyst
Image Analyst le 31 Jan 2015
Here are my blocproc demos. I show it used in a variety of ways.

Connectez-vous pour commenter.


Alessandro Masullo
Alessandro Masullo le 26 Jan 2015
Modifié(e) : Alessandro Masullo le 26 Jan 2015
You can use the function conv2:
A = imread('foo.bmp');
small_window = ones(3)/9;
A_sq = conv2(A.^2,small_window,'same');
A_m = conv2(A,small_window,'same');
Var = A_sq - A_m.^2;

sara
sara le 30 Jan 2015
thanks IMage Analyst and Alessandro Masullo
Excuse me, Is there any way to do cross correlation in a special windows,too?like stdfilt command??
cross correlation(in 3*3 windows)...
  6 commentaires
sara
sara le 2 Fév 2015
you mean that input block 3*3 and output block is 5*5??
Image Analyst
Image Analyst le 2 Fév 2015
If you correlate a 3x3 window with another 3x3 window, yes, you will get a 5x5 window. You won't get a single number. And since with each 3x3 colored block you show in your image, there are 8 other 3x3 colored blocks surrounding it, you will have eight 5x5 matrices if you do what you said to do.

Connectez-vous pour commenter.

Community Treasure Hunt

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

Start Hunting!

Translated by