Many modern Image Processing algorithms use patches are their basic element to work on.
For instance one could denoise patches (See BM3D Algorithm).
Yet when building the image form the processed patches we have many results for the same pixel.
One way to deal with it is taking the average (Empirical Mean) of all values of the same pixel.
The following code shows how to break an image into patches and them reconstruct the image from patches using the average by using
numRows = 5; numCols = 5; numRowsPatch = 3; numColsPatch = 3; % The Image mI = rand([numRows, numCols]); % Decomposing into Patches - Each pixel is part of many patches (Neglecting % boundariwes, each pixel is part of (numRowsPatch * numColsPatch) patches). mY = ImageToColumnsSliding(mI, [numRowsPatch, numColsPatch]); % Here one would apply some operation which work on patches % Creating image of the index of each pixel mPxIdx = reshape(1:(numRows * numCols), [numRows, numCols]); % Creating patches of the same indices mSubsAccu = ImageToColumnsSliding(mPxIdx, [numRowsPatch, numColsPatch]); % Reconstruct the image - Option A mO = accumarray(mSubsAccu(:), mY(:)) ./ accumarray(mSubsAccu(:), 1); % Reconstruct the image - Option B mO = accumarray(mSubsAccu, mY(:), [(numRows * numCols), 1], @(x) mean(x)); % Rehsape the Vector into the Image mO = reshape(mO, [numRows, numCols]);