Combined morphological dilatation and erosion using Marvin led to the following result:

Source:
package characterRestoration; import marvin.image.MarvinColorModelConverter; import marvin.image.MarvinImage; import marvin.io.MarvinImageIO; import marvin.plugin.MarvinImagePlugin; import marvin.util.MarvinPluginLoader; public class CharacterRestoration { MarvinImage image = MarvinImageIO.loadImage("./res/character_in.png"); private MarvinImagePlugin dilation = MarvinPluginLoader.loadImagePlugin("org.marvinproject.image.morphological.dilation"); private MarvinImagePlugin erosion = MarvinPluginLoader.loadImagePlugin("org.marvinproject.image.morphological.erosion"); private boolean[][] matrixD = new boolean[][]{ {false,false,false,false,false,false,false,false,false}, {false,false,false,false,false,false,false,false,false}, {false,false,false,false,false,false,false,false,false}, {false,false,true,true,true,true,true,true,true}, {false,false,true,true,true,true,true,true,true}, {false,false,true,true,true,true,true,true,true}, {false,false,false,false,false,false,false,false,false}, {false,false,false,false,false,false,false,false,false}, }; private boolean[][] matrixE = new boolean[][]{ {true,true,true}, {true,true,true}, {true,true,true} }; public CharacterRestoration(){
}