利用java打开一张图片,并提取其边缘。功能有打开文件,以及提取边缘。
算法原理
由于边缘提取的算法有很多种,而提取的精度在相同阈值的情况下也会有不同的结果。
这次我的边缘提取使用索贝尔算子(Sobel operator)。
该算子会把图像每一点的灰度矢量计算出来。而分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。
算法核心:
public int getGrayPoint(int x, int y) {
return grayData[y * width + x];
}
protected final int GradientX(int x, int y) {
return getGrayPoint(x - 1, y - 1) + 2*getGrayPoint(x - 1, y)+ getGrayPoint(x - 1, y + 1) - getGrayPoint(x + 1, y - 1)- 2*getGrayPoint(x + 1, y) - getGrayPoint(x + 1, y + 1);
}
protected final int GradientY(int x, int y) {
return getGrayPoint(x - 1, y - 1) + 2*getGrayPoint(x, y - 1)+ getGrayPoint(x + 1, y - 1) - getGrayPoint(x - 1, y + 1)- 2*getGrayPoint(x, y + 1) - getGrayPoint(x + 1, y + 1);
而利用JAVA 的GUI界面将图