我试图了解如何手动处理图像。这是一个学校项目,所以我将无法使用ConvolveOp。我正在尝试手动完成它的工作。
根据我的阅读,锐化内核是这样的:
-1 -1 -1
-1 9 -1
-1 -1 -1
这意味着新像素的值将是(9 * pixel - sum_of_neighbors)/ 9。如果我错了,请纠正我。但是我遇到了这种方法的问题。我认为这是因为我获得像素值的方式。
我试过更改使用的“内核”。但我要么在原始图像上获得一堆像素或红色像素。
我显然做了一件非常错误的事情。可能是我不应该使用.getRGB或者我不完全理解这种类型的图像处理是如何工作的。
更新:
感谢您指点Steffen。根据你的建议,我创建了一个三维数组。我使用3'rd维度来跟踪rgb值
感谢您指出这个错误。
答案 0 :(得分:2)
您不应直接乘以RGB值。请检查此答案:Understanding BufferedImage.getRGB output values
您可以将图像分解为3个阵列(r,g,b),进行卷积,然后从单个通道构建3通道图像。
您的锐化内核是边缘过滤器和身份过滤器的补充:
身份是:
[ 0,0,0;
0,1,0;
0,0,0];
边缘过滤器是:
[ -1,-1,-1;
-1, 8,-1;
-1,-1,-1];
如果要缩放锐化的强度,则可以通过除以某个值来缩放边缘滤镜。但只有边缘过滤器。不是身份。所以,你的假设“(9 * pixel - sum_of_neighbors)/ 9”是不正确的。它将是“(1 *像素+(8 *像素+ sum_of_neigbors)/ some_value)”。 some_value可以是9,也可以是任何其他值。