Here is my demo. It is NOT efficient and I am looking forward to better solutions.
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
import cv2
myImage = cv2.imread(sys.argv[1])
(my_h, my_w, _) = myImage.shape
gray = cv2.cvtColor(myImage, cv2.COLOR_BGR2GRAY)
for h in range(my_h-3):
for w in range(my_w-3):
slice=gray[h:h+3, w:w+3]
if (slice[0,0]==255 and slice[0,1]==255 and slice[0,2]==255 \
and slice[1,0]==255 and slice[1,1]< 255 and slice[1,2]==255 \
and slice[2,0]==255 and slice[2,1]==255 and slice[2,2]==255 ):
myImage[h+1,w+1]=[255,255,255]
cv2.imwrite(sys.argv[1]+".denoise.png", myImage)
I tried imagemagick
with no luck.
From left to right:
#sample.png
python denoise.py sample.png #sample.png.denoise.png
magick sample.png -morphology Erode Ring:1.5 sample.Erode.png
magick sample.png -morphology Dilate Ring:1.5 sample.Dilate.png
magick sample.png -morphology Open Ring:1.5 sample.Open.png
magick sample.png -morphology Close Ring:1.5 sample.Close.png
magick sample.png -morphology Smooth Ring:1.5 sample.Smooth.png