Тематическое задание 12.7. Квантование цвета методом октодерева Уровень сложности III.

Напишите программу, которая позволит вам экспериментировать с методом квантования цвета с помощью октодерева. Напишите соответствующий алгоритм сами, скачайте код, выполняющий данный алгоритм, из Интернета, или возьмите из книг (например, [Lindley, 132]). Из файла читается полноцветное изображение. Затем пользователь выбирает допустимое число различных цветов К. Программа сканирует изображение, строит октодерево с К цветами-представителями, после чего просматривает дерево для присвоения индекса каждому его листу. Затем изображение просматривается повторно, для

12.7. Тематические задания каждого пиксела в дереве находится индекс и-отображается соответствующий цвет. На экране изображаются рядом две версии этого изображения: слева - полноцветная, а справа - после квантования. Вам может понадобиться следующий тип данных для узла октодерева:

class Node{
public:

int isLeaf: // 1 if this node is a leaf // 1. если данный узел является листом

int whichLevel: // the level this node is at // уровень, на котором находится данный узел

int index: // its LUT index - assigned in pass 2 // его индекс в таблице LUT - присваивается // при втором проходе

int numChildren: // number of children this node has // число потомков данного узла

long numTimes: // # colors seen in this sub-block // число цветов, представленных в данном подблоке

long Rsum. Gsum. BSum; // sum of color values accumulated // сумма накопленных значений цветов

Node* nextCand: // candidate for reducing at this level // кандидат на отсечение на данном уровне

Node* child[8]: // the 8 children of this node // 8 потомков данного узла }: Ниже приводятся скелеты некоторых основных подпрограмм метода:

insertTree(Node& node. BYTE rgb[]) {
// insert 24-bit color rgb into subtree

// добавляем 24-битовый цвет rgb в поддерево

if(node - NULL)

makeNewNode(node): // make & initialize a new node // создаем и инициализируем новый узел

if(node.isLeaf)
{

node.numTimes++: // inc # of pixels represented // увеличиваем число представленных цветов


⇐ Предыдущая| |Следующая ⇒