Averaging Overlapping Pixels in Sliding Window Operation
18 views (last 30 days)
I'm looking for an efficient way to average overlapping pixels which are result of sliding window operation.
To explain my self, imagine we have a 2D matrix (Image) - I. We operate a sliding window operation of window size of 5x5. Each window undergoes a transform, operation and then back.
Now, a certain pixel, I(i, j) appears in many windows (Actually 25).
I want to average all those 25 pixels (Same pixel just the result using different window).
This is for example a step in the BM3D algorithm.
Does anyone knows about efficient way to this in MATLAB?
The structure should be something like:
- Create the patches of the image (im2col can do that).
- Apply the operation in the patches.
- Average the same pixels from all patches it was involved in.
Matt J on 3 Oct 2014
Edited: Matt J on 3 Oct 2014
Use accumarray(subs,val,,@mean). I can't specify any further how to construct subs and val, because I don't know in what form your block data exists now. But basically "subs" will contain a list of the pixel positions and "val" the value associated with that pixel. You can have multiple occurrences of the same pixel location listed in subs each with a different val inherited from the different blocks.
More Answers (2)
Image Analyst on 3 Oct 2014
There can be 25 window locations that contain pixel at location (i,j). Each of those windows has one output value and is placed into an output image at different locations corresponding to the center of the window. To average those output values, you'd use imfilter() or conv2() operating on the output image (not the input image).