如何创建一个非常基本的Java边缘检测器

如何创建一个非常基本的Java边缘检测器,java,edge-detection,Java,Edge Detection,我的计算机科学老师为我们的第二个Java作业分发了这个问题。我有Java的基本知识,但不知道如何创建边缘检测器 编写一个程序,读取图像文件,检测图像中的边缘,并输出一个新图像,其中边缘部分的像素为黑色,其他像素为白色。判断像素是否为边缘部分的一个简单方法是计算 梯度=abs(im(x+1,y)-im(x-1,y))+abs(im(x,y+1)-im(x,y-1)) 并将其与阈值进行比较。对所有颜色通道的梯度求和。“ 一个非常基本的边缘检测器的例子非常好,这样我就可以看到边缘检测器是如何工作的 请

我的计算机科学老师为我们的第二个Java作业分发了这个问题。我有Java的基本知识,但不知道如何创建边缘检测器

编写一个程序,读取图像文件,检测图像中的边缘,并输出一个新图像,其中边缘部分的像素为黑色,其他像素为白色。判断像素是否为边缘部分的一个简单方法是计算 梯度=abs(im(x+1,y)-im(x-1,y))+abs(im(x,y+1)-im(x,y-1)) 并将其与阈值进行比较。对所有颜色通道的梯度求和。“

一个非常基本的边缘检测器的例子非常好,这样我就可以看到边缘检测器是如何工作的

请不要链接到Canny或Sobel边缘检测器;我需要自己创建这个程序,只需使用他给出的公式和阈值

另外,我不确定他所说的所有颜色通道的梯度总和是什么意思。他说的是RGB吗


我已经能够将我的图像放入我的GUI中,并且我知道如何使用绘画功能。我遇到的问题是,我的老师没有向我们解释如何创建边缘检测器。这是课程的开始,所以我很困惑。我只是想弄清楚如何使用他给我们的公式来处理BuffereImage。

作业总是将多个方面/编程函数合并到一个程序中。所以,你可以用谷歌搜索整个问题的答案,你通常找不到答案

从头开始。您要扫描图像。谷歌如何做到这一点:

你的老师想让你把图像变成一个带黑色边缘的白色正方形。在你写的时候,他给了你一个函数,可以检测出要用哪种颜色绘制的像素。这是你的课程,所以你应该能解决这个问题

最后一部分是将图像实际更改为所需的输出。为此,您需要进行绘制。看看如何画简单的东西,比如有边框的正方形

当然,解决这些问题还有很多其他方法

编辑:阅读注释后:Java允许您获取组件的宽度和高度。从结果中减去2个像素,以确定要将什么画成黑色。休息变成白色


你试过什么?从简单开始,试着加载你的图像,然后你所需要做的就是浏览整个图像并进行计算。我已经创建了一个GUI,导入一个缓冲图像,然后在此基础上创建一个图像图标以显示在GUI上。我已经让我的图像正确显示,我只是不知道如何创建一个边缘检测器来更改图像。我已经能够将我的图像放入我的GUI,我知道如何使用绘画功能。我遇到的问题是,我的老师没有向我们解释如何创建边缘检测器。这是课程的开始,所以我很困惑。我只是想弄清楚如何使用他给我们的公式来处理BuffereImage。@Techgeekster如果你不知道如何使用公式,请使用宽度和高度将外部像素涂成黑色,其余像素涂成白色。您可以对边框X+使用fillRect,y+1,宽度-1,高度-1。然后对边框x、y、宽度和高度使用drawRect。可能使用JButton和ActionListener来执行操作。您所说的外部像素是什么意思?这个公式在哪里起作用?我的老师说用这个公式来检测边缘在阈值内的位置。是否有我应该为像素导入的包?您有一个预定义大小的图像(BuffereImage参数)。比如说,600宽,300高。这意味着图像边框是0、0、600、300。这意味着您希望1、1599和299之间的像素为白色,0,0到600,0、0.0到0.300、0.300到600.300以及600.0到600.300之间的像素为黑色。这将生成一个带有1px黑色边框的白色正方形。我不理解函数本身,因为我不是数学专业的学生,也不是数学方向的学生,但我很确定结果会相似。我会尝试实现这个,谢谢你的帮助。我祈祷这就是我需要的,让它工作。非常感谢。