standard deviation of image
Afficher commentaires plus anciens
I have a 3-dimensional image (image1) and a 2-dimensional image (image2) with values from 1 to 7 and want to find the standard deviation for specific values. I'm using the following code to calculate the mean value but dont know how to calculate the standard deviation. Any suggestion please?
for i=1:3
x=image1(:,:,i)
for j=1:7
L = bwlabel(image2==j);
STATS = regionprops(L,x,'MeanIntensity','Area','PixelValues');
n_stats = size(STATS,1);
area_=zeros(n_stats,1);
mean_=zeros(n_stats,1);
[m1,n1] = find(cat(1,STATS.Area) >=5);
for ii=1:n_stats
mean_(ii)=STATS(ii,:).MeanIntensity;
end
mean1=mean_(m1);
mean2(j,i)=mean(mean1);
end
Réponses (2)
Sean de Wolski
le 9 Déc 2011
You can use regionprops to calculate the various fields requested of each label in a label image, e.g.:
A = uint8(rand(10)*10); %random label image
STATS = regionprops(A,'area');
areas = [STATS(:).Area]
And I don't understand what you want the standard deviation of. If youu want it of all objects with the same value, won't it be zero? Clarify your goal, I guess. (and look at stdfilt)
4 commentaires
Walter Roberson
le 9 Déc 2011
Ah, that confused me as well, but I now see that the "2-dimensional image with values from 1 to 7" does not necessarily imply that the original image is solid color in those areas. Each of the areas in the 2D image acts as a mask to be applied to the 3D image.
Image Analyst
le 9 Déc 2011
No it won't be zero because he's passing in the (badly named) original image x, so the pixel values of the blob will be those of the original image, not the labeled binary image.
Hassan
le 10 Déc 2011
Hassan
le 10 Déc 2011
Image Analyst
le 9 Déc 2011
I don't have MATLAB on this computer so I can't test but I believe it would be something like
pixelValues = [STATS(k).PixelValues];
sd = std(pixelValues(:)); % StDev of kth blob
or something like that.
3 commentaires
Hassan
le 10 Déc 2011
Image Analyst
le 10 Déc 2011
That's the kth region. You'd have it in a loop over all k, all possible blob numbers, like
[labeledImage, numberOfBlobs] = bwlabel(binaryImage, grayImage, 'PixelValues');
sd = zeros(1, numberOfBlobs);
for k = 1 : numberOfBlobs
pixelValues = [STATS(k).PixelValues];
sd(k) = std(pixelValues(:)); % StDev of kth blob
end
Hassan
le 10 Déc 2011
Catégories
En savoir plus sur Image Arithmetic dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!