Обнаружение острых краев Java
Еще раз я в беде. Я использую sobel edgedetector, чтобы получить края изображения. Я использую алгоритм Bresenhams, чтобы нарисовать на другом конце. Но чтобы это произошло, мне нужны четкие координаты.
Мой sobel возвращает 2 0 для каждого края, и я просто не могу понять, почему. Если бы изображение было в два раза больше, это имело бы смысл, но это не так.
В PAINT я сделал изображение размером 50x50 пикселей с квадратом одного пикселя, которое возвращает массив 48x48 int, выглядящий следующим образом. 48x48 я понимаю, но 2 0 я не понимаю.
255 255 255 255 255 255 255 255 255 255 255
255 255 255 255 255 255 255 255 255 255 255
255 255 255 255 255 255 255 255 255 255 255
255 255 255 0 0 0 0 0 0 0 0
255 255 255 0 0 0 0 0 0 0 0
255 255 255 0 0 255 255 255 255 255 255
255 255 255 0 0 255 255 255 255 255 255
255 255 255 0 0 255 255 255 255 255 255
255 255 255 0 0 255 255 255 255 255 255
255 255 255 0 0 255 255 255 255 255 255
трезвый, который я использую, происходит от метода, называемого массивом величин
public int[][] getMagnitudeArray() {
int[][] filter1 = {
{-1, 0, 1},
{-2, 0, 2},
{-1, 0, 1}
};
int[][] filter2 = {
{1, 2, 1},
{0, 0, 0},
{-1, -2, -1}
};
Picture picture0 = new Picture(imagePath);
int width = picture0.width()-2;
int height = picture0.height()-2;
int[][] arrayRepresentation = new int[width][height];
for (int y = 0; y < height ; y++) {
for (int x = 0; x < width ; x++) {
// get 3-by-3 array of colors in neighborhood
int[][] gray = new int[3][3];
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
gray[i][j] = (int) Luminance.intensity(picture0.get(x + i, y + j));
}
}
// apply filter
int gray1 = 0, gray2 = 0;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
gray1 += gray[i][j] * filter1[i][j];
gray2 += gray[i][j] * filter2[i][j];
}
}
// int magnitude = 255 - truncate(Math.abs(gray1) + Math.abs(gray2));
int magnitude = 255 - binaryTruncate((int) Math.sqrt(gray1 * gray1 + gray2 * gray2));
arrayRepresentation[x][y] = magnitude;
}
}
return arrayRepresentation;
} `
Есть ли кто-нибудь, кто может сказать мне, почему этот метод возвращает 2 0 и как я могу изменить его, чтобы вернуть только 1, 0?
Я попытался "исправить" его после того, как он вернул массив со множеством операторов if, но он не выглядит очень элегантным и эффективным.
Благодарю.