JPEG Bilder die 2te



  • Man geht als Standard davon aus, dass man ++i nutzt. i++ nutzt man nur dann wenn mans wirklich braucht, weil es halt teurer ist.



  • Skym0sh0 schrieb:

    Man geht als Standard davon aus, dass man ++i nutzt. i++ nutzt man nur dann wenn mans wirklich braucht, weil es halt teurer ist.

    Was meisnt du den jetzt mit teurer?? XD



  • Langsamer und speicherintensiver



  • Enno schrieb:

    Wenn du das meinst oder auch alle anderen. Ich hab schon extrem viel an diesem Projekt gelernt und gebe trotzdem nicht auf egal wie oft ihr meint ich schaff das nicht. Mir macht es Spaß und es interessiert mich!
    Mach es dann lieber wie die anderen und sei einfach leise. Ich versteh einfach diese Einstellung nicht. -.- Ich versuch das alles zu lernen und die meisten von euch reden das nur schlecht.

    Ich denke nicht, dass das von den meisten so gemeint ist, wie du das interpretierst. Ich finde es zb. schön, dass du das alles lernen willst, und würde das auch unterstützen. Ich würde dir auch nie empfehlen, aufzugeben. Stattdessen würde ich dir empfehlen erstmal die Grundlagen zu lernen und das Projekt dann fortzuführen, weil ich denke, dass du dann in weniger Zeit mehr lernen würdest und mehr Spaß dabei hättest.
    Falls das jetzt aber immernoch missverständlich von mir ausgedrückt war:
    Wenn beim Turnen jemand zu mir kommt und möchte, dass ich ihm dabei helfe Schraubensalto zu lernen, dafür aber meiner Meinung nach absolut noch nicht weit genug ist (Er kann noch gar keinen Salto ohne Schraube.), erkläre ich ihm, dass er erstmal einen guten normalen Salto lernen soll, um dann darauf sein Schraubending aufzubauen, weil es so einfach schneller geht, er nicht so oft auf den Kopf fällt und die Schraube hinterher schöner aussehen wird.
    Es geht nicht darum, jemanden von seinem Ziel abzubringen, sondern darum, ihm einen besseren Weg zu diesem Ziel zu zeigen. Verstehst du, was ich meine? 🙂



  • Dobi schrieb:

    Enno schrieb:

    Wenn du das meinst oder auch alle anderen. Ich hab schon extrem viel an diesem Projekt gelernt und gebe trotzdem nicht auf egal wie oft ihr meint ich schaff das nicht. Mir macht es Spaß und es interessiert mich!
    Mach es dann lieber wie die anderen und sei einfach leise. Ich versteh einfach diese Einstellung nicht. -.- Ich versuch das alles zu lernen und die meisten von euch reden das nur schlecht.

    Ich denke nicht, dass das von den meisten so gemeint ist, wie du das interpretierst. Ich finde es zb. schön, dass du das alles lernen willst, und würde das auch unterstützen. Ich würde dir auch nie empfehlen, aufzugeben. Stattdessen würde ich dir empfehlen erstmal die Grundlagen zu lernen und das Projekt dann fortzuführen, weil ich denke, dass du dann in weniger Zeit mehr lernen würdest und mehr Spaß dabei hättest.
    Falls das jetzt aber immernoch missverständlich von mir ausgedrückt war:
    Wenn beim Turnen jemand zu mir kommt und möchte, dass ich ihm dabei helfe Schraubensalto zu lernen, dafür aber meiner Meinung nach absolut noch nicht weit genug ist (Er kann noch gar keinen Salto ohne Schraube.), erkläre ich ihm, dass er erstmal einen guten normalen Salto lernen soll, um dann darauf sein Schraubending aufzubauen, weil es so einfach schneller geht, er nicht so oft auf den Kopf fällt und die Schraube hinterher schöner aussehen wird.
    Es geht nicht darum, jemanden von seinem Ziel abzubringen, sondern darum, ihm einen besseren Weg zu diesem Ziel zu zeigen. Verstehst du, was ich meine? 🙂

    Das ist nett geschrieben! 🙂
    Ich verstehe das auch voll und ganz. Trotzdem hab ich denke ich oft genug klar gemacht das ich nun mal mein Schraubending direkt zu lernen. Ich weiß ist vielleicht nicht das beste aber ich hab ziemlich bock auf dieses Projekt. 😉


  • Mod

    Enno schrieb:

    Trotzdem hab ich denke ich oft genug klar gemacht das ich nun mal mein Schraubending direkt zu lernen.

    Allerdings wirst du hier wohl niemanden finden, der das Coachen dafür übernimmt (jedenfalls nicht ohne entsprechende pekuniäre Kompensation).



  • camper schrieb:

    Enno schrieb:

    Trotzdem hab ich denke ich oft genug klar gemacht das ich nun mal mein Schraubending direkt zu lernen.

    Allerdings wirst du hier wohl niemanden finden, der das Coachen dafür übernimmt (jedenfalls nicht ohne entsprechende pekuniäre Kompensation).

    Das kann sein, trotzdem Fragen kostet ja nichts und man darf ruhig mehr auf die Fragen eingehen. Wenn man dazu keine lust hat kann man sich die Kommentare auch sparen.



  • ...



  • So ich hab mal wieder was fertig, ok ich hab noch mehr fertig aber das hier wollte ich zeigen. 🙂 (Seit nicht zu böse mit mir! 😃 ) Das ganz soll mir die Huffman Codewörter bauen nach diesem Prinzip:
    1. Symbole nach aufsteigender länge sotieren.
    2. Erstes auf "0" setzen(alle Stellen).
    3. Inkrementieren und nächstem Symbol zuweisen.
    4. Nullen auffüllen bis zur nächsten Länge.
    5. Wenn noch Codewörter da sind bei 3. fortfahren.

    /*
     * function to save the hufftree codewords
     */
    void Huffman::Codewords(const char* dhtpre){ 
      int buff = -1; 
      int dhtint;
      for(int i=5; i<21; ++i){  //for loop from 1-16
        dhtint = (int)dhtpre[i]; //pointer of dht (casted in int)
        for(int j=0; j<dhtint; j++){ //for loop if dhtint is not 0
          buff++; 
          hftree.codeword = buff; 
          hftree.length = (i-4);
          hf.push_back(hftree); //put the struct with codeword and the length in vector hf
    
        }
        if(buff > 0){  //shift buff binär for 1 to the left (fill it up with 0)
          buff = buff << 1;
        }
      }
    }
    
    FF C4 00 29 10 01 00 02 01 03 03 03 04 02 03 00 00 00 00 00 00
    

    Der Pointer dhtpre liegt immer auf dem FF. Es geht hier um die letzten 16 Zeichen, die die Längen für die Codewörter angeben.



  • Enno schrieb:

    Meine Aufgabe ist es JPEG Bilder zu komprimieren.

    Wenn du so etwas sagst, ist es doch kein Wunder, dass man dich fragt, warum du das komplett selbst programmieren willst. libjpeg hat 'ne freie Lizenz.

    Enno schrieb:

    Problem hab ich beim Anfang. Wie schaff ich es, wenn ich das Bild geladen hab (meinetwegen in einem Vektor oder in einem Filestream), das Bild in 8x8 Blöcke zu zerteilen und eine DCT durch zu führen? Das bereitet mir grade am meisten Schwierigkeiten.

    Das ist kein C++ Problem. Es ist ein "Ich habe zu wenig Programmiererfahrung"-Problem, bei dem wir dir nicht wirklich helfen können. Guck dir einfach an, wie andere Leute es gemacht haben. Ich denke, es ist sehr lehrreich, sich mal guten fremden Code anzugucken, der ein JPEG-Bild dekodiert.

    Vergiss nicht, dass man typischerweise bei JPEG in einem YUV-basierten Farbraum arbeitet und eine Farbunterabtastung durchführt. Das Chrominanzsignal wird meist in beiden Richtungen um Faktor 2 dezimiert, weswegen es auch zu 16x16 Pixel Macroblöcken kommt. Das sind 4 8x8 Blöcke für das Helligkeitssignal und ein 8x8 Block jeweils für eines der Farbdifferentiale.

    Das mit dem Huffman geht auch viel eleganter. Es gibt da so einen schönen Algorithmus, der nennt sich "package merge". Er arbeitet nur auf einem int-Array rum und spuckt dir dann die Längen der Codewörter aus. Nix mit dynamisch allozierten Knoten eines Binärbaums. Das coole ist, dass man sogar eine maximale Codewordlänge vorgeben kann.

    Enno schrieb:

    [...] Und ja es ist ein schweres Thema und ich bin Anfänger aber ich kämpf mich da durch.

    Dann musst du Dich wohl durchkämpfen. Aber erwarte nicht, dass da 'was "Ordentliches" bei rauskommt, wenn überhaupt. Du wirst sicherlich wegen der mangelnden Erfahrung so einige Entscheidungen treffen, die sich im Nachhinein als nachteilhaft herausstellen.



  • Hey krümelkacker!
    Viel dank für dein Beitrag.
    Vorweg erstmal soll gesagt sein das ich weiß das da einiges mist sein kann so wie ich es mache. Aber das ist schon ok.

    Zu den Farbräumen. Du meinst wahrscheinlich YCbCr ?? Dadran abreite ich grade. Also Unterabtastung und was dazu gehört. Danke für deine Tipps.


Anmelden zum Antworten