【发布时间】:2014-12-21 22:02:51
【问题描述】:
上周五,我有个可笑的疯狂线性代数教授,他要求我们用 Java 开发一个程序,该程序可以加载单色图片,然后对其应用边缘检测过滤器。 问题是我班上没有人知道怎么做,我只有一周的时间来完成它。 由于我仍在努力解决它并从头开始,有没有人准备好寄给我的东西,以便我可以研究它并节省我的学期? 任何努力都将不胜感激。
【问题讨论】:
标签: java image-processing filter edge-detection
上周五,我有个可笑的疯狂线性代数教授,他要求我们用 Java 开发一个程序,该程序可以加载单色图片,然后对其应用边缘检测过滤器。 问题是我班上没有人知道怎么做,我只有一周的时间来完成它。 由于我仍在努力解决它并从头开始,有没有人准备好寄给我的东西,以便我可以研究它并节省我的学期? 任何努力都将不胜感激。
【问题讨论】:
标签: java image-processing filter edge-detection
这是您可以采用的一种非常基本的方法:
1) 什么是单色图像的边缘?可以说这是一个陡峭的强度梯度。如果你从黑色变为白色,那就是边缘,反之亦然。
2) 基于此思想的一个非常简单的过滤操作是 Sobel 算子。在此处阅读:Wikipedia。
3) 您会偶然发现 2 个您可能不熟悉的术语:内核和卷积。内核基本上是一个在每个像素上移动的窗口,对像素的环境执行操作。对于 Sobel 3x3 内核,您可以根据像素的直接邻居为过滤后的图像分配一个新值。卷积运算可以被认为是 - 除其他外 - 一个将内核移动到图像中每个像素的操作(注意:这是一个让您入门的严重过度简化并且在技术上不正确。但是,它应该给您正确的想法)
4) 现在,将 Sobel 内核应用于 BufferedImage 的最简单方法是使用 ConvolveOp 类。它是一个预构建的 Java 类,它采用内核,将其应用于给定图像并返回过滤后的图像。但是,如果这是针对类的,您可能需要自己实现。
【讨论】: