Esempio n. 1
0
double Block::GetDistanceTo(Block& block)
{
    double rDistance = 0.0;
    double gDistance = 0.0;
    double bDistance = 0.0;
    
    for (int i = 0; i < Block::P; ++i)
    {
        for (int j = 0; j < Block::Q; ++j)
        {
            rDistance += std::abs((double)(this->block[i][j].GetR() - block.GetBlockPixel(i,j).GetR()));
            gDistance += std::abs((double)(this->block[i][j].GetG() - block.GetBlockPixel(i,j).GetG()));
            bDistance += std::abs((double)(this->block[i][j].GetB() - block.GetBlockPixel(i,j).GetB()));
        }
    }
    
    /*cout << "rDist = " << rDistance << " / P=" << Block::P << " / Q=" << Block::Q << endl;
    cout << "gDist = " << gDistance << " / P=" << Block::P << " / Q=" << Block::Q << endl;
    cout << "bDist = " << bDistance << " / P=" << Block::P << " / Q=" << Block::Q << endl;*/
    
    rDistance /= (Block::P * Block::Q);
    gDistance /= (Block::P * Block::Q);
    bDistance /= (Block::P * Block::Q);
    
    //cout << "Distance is: " << (rDistance + gDistance + bDistance) / 3 << endl;
    
    return (rDistance + gDistance + bDistance) / 3;
}
Esempio n. 2
0
void Huffman::GenerateIndexFromCodes(GHT& ght, Image& image)
{
    Node *root = new Node();
    
    for (int i = 0; i < this->codes.size(); ++i)
    {
        this->CreateHuffmanTreeFromCodes(root, i, 0);
    }
    
    int sIterator = 0;
    int codeIterator = 0;
    while (codeIterator < this->compressedCode.size())
    {
        this->GetHuffmanIndex(root, codeIterator, sIterator, ght);
        ++sIterator;
    }
    
    int sIndex = 0;
    for (int imageX = 0; imageX < image.GetImageSizeI(); imageX += Block::P)
    {
        for (int imageY = 0; imageY < image.GetImageSizeJ(); imageY += Block::Q)
        {
            int blockIndex = ght.GetS(sIndex++);
            Block block = ght.GetBlockFromC(blockIndex);
            
            for (int u = 0; u < Block::P; ++u)
            {
                for (int v = 0; v < Block::Q; ++v)
                {
                    Pixel pixel = block.GetBlockPixel(u,v);
                    image.SetImagePixel(imageX + u, imageY + v, pixel);
                }
            }
        }
    }
    
    delete root;
}