www.mikrocontroller.net

Forum: PC-Programmierung VC++ 6.0 - Histogramm


Autor: hsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab mir ein kleines Programm in Visual Studio C++ 6.0 erstellt, 
indem ich zunächst ein Farbbild im Bitmap Format einlese. Dieses 
Farbbild wird dann konvertiert (Graubild). Im Anschluß erzeuge ich das 
Histogramm.
Zur Überprüfung hab ich das Farbbild mit IrfanView in ein Graubild 
umgewandelt. Dieses Graubild lade ich in Matlab mit der Funktion 
I=imread('farbbild.bmp')rein. Mit der Funktion imhist(I) erzeuge ich 
dann in Matlab das Histogramm. Mir ist aufgefallen dass die 
Histogrammwerte zwischen VC++ 6.0 und Matlab nicht übereinstimmen. Woran 
könnte dies liegn?

Autor: hsch (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ein Auschnitt vom VC++ 6.0 Sourcecode befindet sich im Dateianhang.

Autor: Jörg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falls es nur kleine Unterscchiede zwischen den Histogrammen sind:
Du wandelst die Farbwerte erst einzeln in Integer um und addierst
erst dann. Geh doch umgekehrt vor, so hast du weniger
Informationsverlust.
Unterschiede wirst du aber immer haben: Entweder hast du
unterschiedliche Faktoren bei der Graustufenberechnung und.und.und..
Falls es aber sehr grosse/deutliche Unterschiede sind, solltest
du beide Module (wenn möglich) überprüfen.


Gruss

Jörg

Autor: hsch (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab die Bildkonvertierung abgeändert.
Die Werte zwischen schwanken schon. Bin da nicht zufrieden. Woran könnte 
das noch liegen?

Autor: hsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab den Fehler entdeckt. Und zwar ist die Grauwerteberechnung nicht 
korrekt.

Hier ist die richtige Berechnung:
bildgrau[j*infoheader.biHeight+i]=(299*bild[j*infoheader.biHeight+i].rgb 
tRed+587*bild[j*infoheader.biHeight+i].rgbtGreen+114*bild[j*infoheader.b 
iHeight+i].rgbtBlue)/1000;

Autor: Jörg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jetzt hast du aber alle Faktoren (vorher 0.299,0.587,0.114) einfach
mit 1000 multipliziert. Du solltest für ein Histogramm für den
Bereich 0..255 aber mit 255 (nicht 256) multiplizieren, d.h. du
erhälst dann die Faktoren (76.245, 149.685, 29.07).

Gruss

Jörg

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.