После отладки буквально с воскресенья того же кода, я официально сдался и думаю, что пришло время взглянуть на кого-то другого. Я провел часы и часы и не могу представить, что не так с моим кодом. Это немного долго, но за ним легко следовать, и я был бы очень признателен за любую помощь - ты единственный выбор, который я получил сейчас.
То, что я пытаюсь сделать, это реализовать несколько функций, которые в совокупности делают это: учитывая четырехугольное дерево, где каждый лист представляет 1 пиксель изображения, обрежьте дерево, чтобы удалить или объединить похожие цвета. Каждое дерево имеет узел root
с 4 дочерними элементами и т. Д. Каждый узел имеет x,y,width,height, and element
, где ширина и высота представляют блок пикселей, который представляет эту область, а x, y представляют пиксель нижнего левого угла узла, а элемент является пикселем типа. Каждый неконечный узел хранит средний цвет всех своих дочерних узлов. Если разница в цвете определенного неконечного узла myNode
с одним из его дочерних листовых узлов больше, чем параметр tol(or tolerance)
, то вы не можете обрезать. Если таких случаев нет, то вы сокращаете, что означает, что вы удалите все дочерние элементы myNode
, а myNode
будет просто хранить среднее значение всех узлов, которые он только что удалил (что должно быть просто автоматически, когда среднее значение рассчитывается в коде изначально).
Итак, вот мой кодовый поток:
- Сначала я вычисляю и сохраняю
среднее каждого узла в его элемент
пиксельное поле.
- Теперь внешняя функция вызывает pruneSize для некоторого дерева. pruneSize на самом деле не обрезает, а просто возвращает количество листьев, которые остались бы в дереве, если бы вы обрезали.
- Оттуда код комментируется. По сути, в более глубокой и сигнальной функции я попытался сделать так, чтобы, если по какой-либо причине не удалось удалить orig, нужно теперь проверять детей orig, чтобы убедиться, что их можно удалить, и так далее.
Проблема в том, что я не получаю правильный вывод при запуске. Это выключено. Я надеюсь, что ошибку будет легко заметить опытный среди вас.
(Кроме того, класс quadtree реализован отлично. Все остальное было протестировано и работает нормально, так что это что-то с моим средним калькулятором или pruneSize.)