我在uni上有一个荒谬的疯狂线性代数教授,他在上周五要求我们开发Java程序来加载单色图片,然后在其上应用边缘检测滤镜。
问题是我班上没人能做到这一点,我只有一周的时间来完成。
由于我仍在努力寻找解决方法并从头开始,是否有人准备发送给我,以便我可以学习并保存我的学期?
任何努力将不胜感激。
最佳答案
您可以使用以下非常基本的方法:
1)什么是单色图像中的边缘?可以说这是一个陡峭的强度梯度。如果您从黑变白,这是一个优势,反之亦然。
2)基于此思想的非常简单的过滤器操作是Sobel运算符。在这里阅读:Wikipedia。
3)您会偶然发现两个您可能不熟悉的术语:内核和卷积。内核基本上是在每个像素上移动的窗口,在像素的环境上执行操作。对于Sobel 3x3内核,您可以根据像素的直接邻居为过滤后的图像分配一个新值。卷积运算可以被认为是(其中包括)使内核在图像中的每个像素上移动的运算(请注意:这是过于简单的入门,从技术上来说是不正确的。但是,它应该给您正确的选择)理念)
4)现在,将Sobel内核应用于BufferedImage的最简单方法是使用ConvolveOp类。它是一个预构建的Java类,它使用内核,将其应用于给定的图像并返回过滤后的图像。但是,如果这是针对类的,则可能要自己实现。