如何在java.awt.image.BufferedImage中应用更柔和的锐度

时间:2016-07-19 11:21:28

标签: java image filter convolution

由于这个javascript代码,我知道如何提高图像的清晰度。 但结果对我来说太陡了。 你知道如何应用更柔和的锐度,例如锐度因子吗?

事实上,我想了解这种敏锐度如何通过这个内核运行

ScreenCapture = new Robot().createScreenCapture(new Rectangle(x1, y1, x2, y2));
float[]  data = [-1, -1, -1, -1, 9, -1, -1, -1, -1];
Kernel kernel = new Kernel(3, 3, data);
BufferedImageOp convolve = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null);
bufferedImage = convolve.filter(ScreenCapture, null); 
File file = new File(imagetemp);
ImageIO.write(bufferedImage, "jpg", file);

这个内核似乎更软了,但这仍然是:

float[]  data= [0.0f, -1.0f, 0.0f, -1.0f, 5.0f, -1.0f, 0.0f, -1.0f, 0.0f ];

感谢您的关注

original in pdf print

screen capture sharpen result

1 个答案:

答案 0 :(得分:3)

卷积内核对像素及其周围像素进行操作。给定权重矩阵(其中心是像素),它计算像素和周围像素的加权和。

使用3x3矩阵,9个内核值是左上,上,右上,左,中(目标像素本身),右,左下,下,右下的权重像素。 原始内核表明原始像素乘以9并且所有周围像素都减去(-1),从而提高了像素的清晰度。

你正在寻找的是一个类似的内核,它不会增加太多。

中性内核将是[0,0,0,0,1,0,0,0,0](目标像素=源像素),因此您可以通过您喜欢的任何因素将内核与中性内核混合。

半锐的内核将是[0.5,0.5,0.5,0.5,4.5,0.5,0.5,0.5,0.5](每个内核的两半之和)。

请注意,内核规范化:权重之和始终为1:如果不同,则图像会变亮(> 1)或变暗(<1)。< / p>