繁体   English   中英

在没有ConvolveOp的情况下在Java中手动锐化图像

[英]Manually Sharpen Image in Java without ConvolveOp

我试图了解如何手动处理图像。 这是一个学校项目,所以我将无法使用ConvolveOp。 我正在尝试手动执行操作。

根据我的阅读,锐化内核是这样的:

-1 -1 -1  
-1  9 -1  
-1 -1 -1  

这意味着新像素的值为(9 * pixel-sum_of_neighbors)/ 9。 如果我错了,请纠正我。 但是,我在使用这种方法时遇到了问题。 我认为这是因为我获得像素值的方式。

我试图改变使用的“内核”。 但是我在原始图像上得到的是一堆像素或红色像素。

我显然做错了什么。 可能是我不应该使用.getRGB或我不完全了解这种图像处理的工作方式。

更新:

谢谢斯蒂芬的指点。 按照您的建议,我创建了一个三维数组。 我使用第3维来跟踪rgb值

感谢您指出该错误。

您不应该直接将RGB值相乘。 检查以下答案: 了解BufferedImage.getRGB输出值

您可以将图像分解为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,也可以是其他任何值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM