What is a vectorized way to calculate variance of an image patch
Show older comments
I have a 560*560*3 image file, I want to divide the image into many small 8*8 patches, then calculate variance of each patch. What is a vectorized way to calculate variance of each image patch ?
2 Comments
Walter Roberson
on 30 May 2015
How do you want to calculate variance of color? If you have an 8 x 8 x 3 subsection, S, representing color, do you want var(S(:)), which treats all the pixel components equally? Or do you want variance of the grayscale equivalent, and thus variance of brightness? Or do you want to convert to HSL and do variance of Hue? Or.... ?
Victor Yi
on 31 May 2015
Accepted Answer
More Answers (2)
Image Analyst
on 31 May 2015
1 vote
You can use blockproc() (in the Image Processing Toolbox) to calculate the variance of each small tile of an image in a line or two of code since the function is meant for this purpose. Run my attached demos for an example.
1 Comment
Victor Yi
on 31 May 2015
Matt J
on 31 May 2015
1 vote
Another approach to consider is stdfilt(), which will compute standard deviation in a sliding window fashion rather than a tiled fashion. This is more computation than you need. However, if stdfilt is sufficiently code-optimized, it might be worth it.
3 Comments
Victor Yi
on 1 Jun 2015
Image Analyst
on 1 Jun 2015
And, if you want to do your own custom function with whatever crazy thing you can imagine, then you can use nlfilter(). It's like conv2(), imfilter(), stdfilt(), entropyfilt(), etc. except that you get to define your own custom code to apply at each filter window location.
GAURA YADAV
on 19 Jun 2020
Thanks.
Categories
Find more on Image Arithmetic in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!