VC++ 6.0 - Histogramm

Gast #954716
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?
Gast #954760
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
Gast #954797
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;
Gast #954828
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren