Hallo Fans,
nach langer Zeit des Wartens mal wieder ein Beitrag von mir zum Thema.
Diesmal mit neuem Ansatz. ... Ich kann euch die Tür nur zeigen, hindurch gehen müsst ihr selbst
Ansatz:
Eigentlich wollte ich mal schauen wie gut oder schlecht die Filme auf der Festplatte so sind, weil es mich aufgeregt hat, immer wieder schlechte Filme zu sehen. ...
Aber die Filme zu sortieren wollte ich nicht per Hand. Vor allem, wenn man jemanden kennt, der einen kennt, der schon mal davon gehört hat ...
Wir reden hier von gut einem Terrabye Filme aus den verschiedensten Kathegorien und in unterschiedlichster Qualität.
Also wie auch immer.
Mein Anastz:
Ich nehme mir eine beliebige (festlegbar und einstellbar) Anzahl von Bildern aus dem Video/Film (der Videodatei) und analysiere die Bilder.
Die Bilder werden zufällig über aus der ganzen Länge gewählt.
Je nach dem, wie genau man die Analyse betreiben will, nimmt man mehr oder weniger Bilder ... (Nicht dass man durch Zufall genau ein sehr schlechtes Bild genau vor dem nächsten I-Frame aufgreift)
Oder das Bild einfach mal wegen Szenewechsel schwarz war oder man hat den Abspann bzw. Vospann erwischt.
::: Ich hab also nun Bilder zu analysieren.
Sicherlich ist die Dimension schon entscheident, aber es gibt ja auch gut gerippte (hab ich gehört, das es sowas geben soll) SVCDs / MDVDs oder eben schlecht aufgenommene (illegal) abgefilmte Videos bei gleicher Auflösung.
....
Was ist Qualität?
Ich würde sagen Filme, die nicht zu hell und nicht zu dunkel sind. Filme, die nicht blau oder rot stichig sind. Also alles in allem gut ausgewogene Farben haben. >> Einen grpßen Dynamikbereich
-----------------------------------------------------------------------
Mein Programm macht nichts weiter als ein Histogramm.
Also noch nichts wildes. Zieht einfach mal verschiedene Bilder auf die Exe.
(zweites Fenster kann neben her geöffnet werden)
Verändert ruhig mit einem Bildbearbeitungsprogramm den Kontrast oder Färbt es ein oder setzt es auf Schwarzweiß. Spielt ein bisschen mit der Gradiation und der Helligkeit und auch der Sättigung.
Bei nachträglicher Kontrastastveränderung kann man das zum Beispiel am Histogramm erkennen. Denn da sind wie bei MP3 zu WAVE ...
Kleine Zacken in der Kurve. (Kaum sichtbar für's Auge)
>>>>>>>>>>>>>>>>>>>>>>>>>
Was hab ich vor (mit eurer Unterstützung)?
Das Programm kann erkennen, ob ein Bild gut oder schlecht aussieht.
Und Spekulationen machen, was drauf zu sehen ist.
Webcam-Aufnahme, High-Key/Low-Key, Amateur-Foto, Profifoto, Gegenlichtaufnahme, Tag oder Nachtaufnahme, ...
Schwarzweiß-Aufnahme ...
Bild wurde nachträglich bearbeitet ... wenn ja wie ...
Vielleicht kann man auch bei bestimmten Häufigkeiten auf bestimmte Motive schließen:
Blaues Wasser, Weißer Schnee, grüne Wiese, viel nackte Haut, ...
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Wenn man danach noch die Schärfe eines Bildes ermitteln kann
(ähnlich wie bei vorrübergehendem Code ... )
dürfte einer halbwegs einfachen, schnellen und guten Videoanalyse nichts im Wege stehen und man kann wenigstens sagen:
Gute Qualität oder Miese Qualität
Und mit Kombination der Objekterkennung kann man vielleicht sogar schon genaueres sagen, worum es im Film gehen könnte.
Vielleicht um leicht bekleidete Mädels am Wasser oder im Wald
PURE BASIC V.4.x
Code: Alles auswählen
; Folker Linstedt, 22.08.2006, Farbfilter
#Image=1
#Datei=2
#Fenster=3
#Bild=4
#Histogramm=5
UseJPEGImageDecoder()
Procedure RefreshWindow(NewSizeW,ThumbH)
StartDrawing(WindowOutput(#Fenster))
DrawImage(ImageID(#Image),10,10,NewSizeW,ThumbH)
DrawImage(ImageID(#Histogramm),10,ThumbH+20)
StopDrawing()
EndProcedure
OpenWindow(#Fenster,10,10,400,550,":: FL BildANALyse :: > Histogramm RGB <",#PB_Window_SystemMenu)
;Inpu.s=Input()
;Eingabe.l=Val(Inpu)
Anzahl=CountProgramParameters()
For Index = 0 To Anzahl-1
Dim F.l(2,255)
Dim S.l(2,255)
;CreateGadgetList(WindowID(#Fenster))
LoadImage(#Image,ProgramParameter(Index))
;ImageGadget(#Bild,10,10,80,80,ImageID(#Image))
ScaleH=200
CreateImage(#Histogramm,256,ScaleH)
ThumbH.l=160
NewSizeW.l=Round((ImageWidth(#Image)/ImageHeight(#Image)*ThumbH),0)
RefreshWindow(NewSizeW,ThumbH)
StartDrawing(ImageOutput(#Image))
For y=0 To ImageHeight(#Image)-1 ; Erstellt Histogramm
For x=0 To (ImageWidth(#Image)-1)
RR.l : GG.l : BB.l : p.l : R.l : G.l : B.l : Z.l
p=Point(x,y) ; Später ersetzen durch Buffer
R=Red(p)
G=Green(p)
B=Blue(p)
F(0,R)+1
F(1,G)+1
F(2,B)+1
Next
Next
StopDrawing()
For t=0 To 255 ; Erstellt Kopie vom Histogramm
S(0,t)=F(0,t)
S(1,t)=F(1,t)
S(2,t)=F(2,t)
Next
SortArray(S(),1)
MaxH=Round(S(0,0)/ScaleH,0)
StartDrawing(ImageOutput(#Histogramm))
For t=0 To 255
;PH=Round((F(0,t)+F(1,t)+F(2,t))/3/MaxH,0)
LineXY(t,ScaleH-1,t,Round(ScaleH-F(0,t)/MaxH,0),RGB(255,0,0))
LineXY(t,ScaleH-1,t,Round(ScaleH-F(1,t)/MaxH,0),RGB(0,255,0))
LineXY(t,ScaleH-1,t,Round(ScaleH-F(2,t)/MaxH,0),RGB(0,0,255))
Next
StopDrawing()
Next
Repeat
RefreshWindow(NewSizeW,ThumbH)
Event=WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
CloseWindow(#Fenster)
http://de.wikipedia.org/wiki/Histogramm
Freue mich auf eure Unterstützung, vielleicht gibt es ja auch schon sowas in besser oder sogar als PB-Code.
Schreibt ruhig mal den Link. Danke, Gruß, Folker
