Я пишу программное обеспечение, которое обнаруживает контур изображения, уменьшает его до «одного пикселя», а затем выполняет операции над результирующим контуром. Моя надежда состоит в том, чтобы в конечном итоге получить следующее:Thinning a line
Я написал программное обеспечение, которое автоматически определяет RGBA цвета, преобразует его в HSB, просит предел, который устанавливает пиксель является ли план или нет (как правило, некоторые значение около 0,25 и проверку значения B (яркости), а затем сохраняет true или false в двумерном массиве логических значений (true - контур, false - нет). Это доводит меня до стадии 2 просто отлично. В настоящее время я застрял на этапе 3, и в настоящее время пытаюсь добиться следующим:
Вот мой текущий код, где переменной outline[][]
оригинального 2d массив истин/falses (этап 2) и thinned[][]
является план на стадии 3.
public void thinOutline() {
thinned = new boolean[outline.length][outline[0].length];
for (int x = 0; x < thinned.length; x++)
for (int y = 0; y < thinned[0].length; y++) {
if (x > 0 && x < thinned.length - 1 && y > 0 && y < thinned[0].length - 1)
if (!thinned[x + 1][y] && !thinned[x - 1][y] && !thinned[x][y + 1] && !thinned[x][y - 1] && outline[x][y])
thinned[x][y] = true;
else
thinned[x][y] = false;
else
thinned[x][y] = outline[x][y];
}
}
Это не скрипт, который находит границы, а затем удаляет их. Если это так, вы можете просто запустить этот сценарий много раз, пока он больше не найдет границ, и при этом вы должны иметь этот желаемый эффект. –