Partant d'images 128x128 pour arriver à 1024x1024, j'ai essayé trois moyens. Le premier, renderingHint :
Le deuxième en utilisant un noyau de convolution :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 g.setRenderingHint(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_QUALITY); g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON); g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BICUBIC);
Le dernier avec Image.getScaleInstance() :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Kernel k = new Kernel(5, 5, new float[] { .0036f, .0146f, .0256f, .0146f, .0036f, .0146f, .0586f, .09523f, .0586f, .0146f, .00256f, .09523f, .015f, .09523f, .0256f , .0036f, .0146f, .0256f, .0146f, .0036f, .0146f, .0586f, .09523f, .0586f, .0146f}); ConvolveOp op = new ConvolveOp(k); BufferedImage blurry = op.filter(image, null);
J'ai lu que ce dernier bien que déprécié était meilleur mais aussi plus lent.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Image Image_finale = image.getScaledInstance(1024, 1024, Image.SCALE_SMOOTH);
Le résultat est affligeant. Le dernier ne semblant même pas interpolé. Sinon cela donne une bouillie, une sorte de pixellisation lissée, laissant des "îlots". Mauvaise utilisation, trop grand suréchantillonnage, noyau trop petit ?
J'allais oublier de préciser que nous utilisons une lookup table qui accentue le phénomène avec des contrastes importants.
Partager