I have written a python script which uses the Noise2Noise: Learning Image Restoration without Clean Data implementation of the Auto Encoder which is useful to remove noise from images. In the original paper implementation they were using full images so there were no border artifacts.

I want to use my script on raw images from long exposures and high ISO to remove the noise. For this purpose, I fragment the image into small fractions which are run through the Auto Encoder network. After prediction, original image is reconstructed. However, the problem is with the border connections between slices (As showed in the images below). Do you have any suggestions what would be the best idea to "fix" it? I would be more than grateful!

Noise2Noise After Slicing


One simple way to solve it is using Overlapping Patches.

Let's say you have image which is $ 20 \times 20 $ and you work on patches of the size $ 5 \times 5 $.
As I understand from your description you do 16 times denoising of $ 5 \times 5 $ patches.

What you should do is run the patches mask like in convolution. So each pixels (Ignoring boundaries) will be filtered in 25 different patches.

Now you have 25 different estimates for each pixel.
The trivial solution is to use their mean.
More advanced methods will use some prior on how to create a good weighted combination as output.
One prior could be keeping the composition of the image as smooth as possible.
Other methods could be built around estimation of the noise in each patch.

  • $\begingroup$ This is really good idea, thanks! I will try it and see how this improves the final image. $\endgroup$ – Dawid Apr 23 at 11:32

Your Answer

