Forum: PC-Programmierung VC++ 6.0 - Histogramm


von hsch (Gast)


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?

von hsch (Gast)


Angehängte Dateien:

Lesenswert?

Ein Auschnitt vom VC++ 6.0 Sourcecode befindet sich im Dateianhang.

von Jörg (Gast)


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

von hsch (Gast)


Angehängte Dateien:

Lesenswert?

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

von hsch (Gast)


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;

von Jörg (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.