Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 16 bis 30 von 40

Thema: Dateisortierung - nur etwas umständlicher

  1. #16
    fühlt sich hier wohl
    Registriert seit
    25.11.11
    Beiträge
    73

    AW: Dateisortierung - nur etwas umständlicher

    ot:

    zum PS:
    Vielleicht ideone zumindest kann man da auch C# auswählen.

  2.   Anzeige

     
  3. #17
    assimiliert Avatar von Palladin007
    Registriert seit
    19.08.11
    Ort
    NRW
    Beiträge
    2.244

    AW: Dateisortierung - nur etwas umständlicher

    Das ist eine interessante Seite, da hab ich was um mit in Info die zeit zu vertreiben, danke
    Und syntax highlighting kapiert die Seite auch, das ist ja schon mal gut. ^^


    Aber sowas wie das Problem hier kann man da leider nicht compilieren, wäre auch zu schön um war zu sein
    Ideone.com | Online C# Compiler & Debugging Tool

  4. #18
    Außer Betrieb Avatar von QuHno
    Registriert seit
    15.05.02
    Ort
    "Provinz voll Leben"
    Beiträge
    8.856

    AW: Dateisortierung - nur etwas umständlicher

    Abgesehen davon, dass ich es toll finde, dass der Code geposted wurde (Danke! Direkt kopiert) verwende ich zur suche von Doubletten und auch von ähnlichen Bildern die eingebaute Suche bei XNView mit einstellbarer Ähnlichkeitssuche. Ist zwar relativ langsam, wenn man nicht auf genau gleiche Dateien unabhängig von der Bezeichnung geht (da verwendet XNView auch den hash), aber manchmal die einzige Art, viele ähnliche Bilder in einem Ordner zu versammeln, ohne sich selbst die Augen verbiegen zu müssen ...

    Funktioniert auch rekursiv über mehrere Ordner.

  5. #19
    assimiliert Avatar von Palladin007
    Registriert seit
    19.08.11
    Ort
    NRW
    Beiträge
    2.244

    AW: Dateisortierung - nur etwas umständlicher

    Das ist alles auch nicht weiter DAS Problem. ^^

    Hab überlegt, ob ich mir da auch was suche, habs dann aber raus gelassen, weil Fernaless geschrieben hat, die Bilder seien exakt gleich.

    Wenn ihr mir etwas Zeit gebt, kann ich auch mal schauen, ob ich ein umfangreicheres Programm dafür baue und das dann auch mehrere Ordner durchsucht, das wärde in der Zeile
    PHP-Code:
    string[] files Directory.GetFiles(OrdnerPfad
    nur so geändert werden müssen:
    PHP-Code:
    string[] files Directory.GetFiles(OrdnerPfad"*.*"SearchOption.AllDirectories
    Der erste Parameter ist immer noch der Pfad des Ordners, der Zweite enthält eine Suchzeichenfolge, die ich hier mit "*.*" bezeichne, da der Stern für alle Zeichen steht und so alle Datei-Namen und Endungen akzeptiert werden. Der Dritte Parameter ist ein Wert des Enums SearchOption, welches zwei Konstanten bereit stellt:
    • TopDirectoryOnly -> Schließt nur das aktuelle Verzeichnis in einem Suchvorgang ein.
    • AllDirectories -> Schließt das aktuelle Verzeichnis und alle Unterverzeichnisse in einem Suchvorgang ein.Diese Option schließt Analysepunkte wie umschlossenes Laufwerk und symbolische Links in der Suche.



    Ich würde dann auch eine einfache grafische Oberfläche bauen, aber das kostet dann wieder mehr Zeit.
    Auch den Quell-Code würde ich einfügen, damit hab ich kein Problem ^^


    Edit:
    Hab da jetzt eine Bibliothek gefunden, die da scheinbar ganz gute Funktionen für den ganzen Breiten Themen-Bereich zur Verfügung stellt.
    Ich würde zwar versuchen, das alleine zu schreiben, aber je mehr ich darüber lese, um so mehr Respekt bekomme ich auch vor dem Umfang und der Komplexität der Aufgabe
    Schöne Diskussion dazu: http://www.mycsharp.de/wbb2/thread.php?threadid=100695

    Dort hab ich auch den Code her, den ich dann für diese Methode verwendet habe:
    PHP-Code:
    static Bitmap verkleinern(Bitmap imageint width 25int hight 25)
    {
          
    Bitmap bmpOutput = new Bitmap (widthhightPixelFormat.Format24bppRgb);
          
    Graphics gOutput Graphics.FromImage (bmpOutput);
          
    Rectangle rectOutput = new Rectangle (00bmpOutput.WidthbmpOutput.Height);

          
    ImageAttributes ia = new ImageAttributes();
          
    ia.SetWrapMode (WrapMode.TileFlipXY);

          
    gOutput.InterpolationMode InterpolationMode.HighQualityBilinear;
          
    gOutput.PixelOffsetMode PixelOffsetMode.Half;
          
    gOutput.CompositingMode CompositingMode.SourceCopy;

          
    gOutput.DrawImage (imagerectOutput00image.Widthimage.HeightGraphicsUnit.Pixelia);
          
    bmpOutput.Save ("output.bmp"ImageFormat.Bmp);
          
          return 
    bmpOutput;

    Die Methode verkleinert einfach ein Bild, das brauch ich dann für die Bestimmung, ob das Bild zu einem Anderen ähnlich ist. Da bin ich aber noch am knobeln und außerdem brauch ich dafür noch einen Grenz-Wert, der dann angibt, wie verschieden ein Bild zum Anderen sein darf, die Frage ist nur, wo dieser Wert liegt.
    Ich schau erst mal, ob ich die Methode hin kriege und würde euch dann bitten, mir beim Ermitteln dieses Wertes zu helfen, dass dabei ein paar Werte heraus kommen, die ich dann ja in ein Enum einbauen kann. Also dann z.B. die Konstanten: NichtÄhnlich, Ähnlich, SehrÄhnlich, Gleich
    Oder irgendwie so
    Geändert von Palladin007 (09.01.13 um 10:49 Uhr)

  6. #20
    Schon lange hier Avatar von Fernaless
    Registriert seit
    18.01.09
    Ort
    Schwarzach a. Main
    Beiträge
    3.112

    AW: Dateisortierung - nur etwas umständlicher

    *push*

  7. #21
    assimiliert Avatar von Palladin007
    Registriert seit
    19.08.11
    Ort
    NRW
    Beiträge
    2.244

    AW: Dateisortierung - nur etwas umständlicher

    push?


    Ja, sorry, ich hab auch noch Schule
    Das andere Programm, was ich da geschrieben habe, zu den Datei-Zeiten, ist ja nicht sooo viel, aber das hier ist da schon etwas komplizierter.
    Ich danke mal, ich setz mich am Wochenende noch mal ran. ^^
    Vielleicht auch heute, mal schauen, vielleicht auch heute, hängt davon ab, wie lange ich wach bleiben kann

  8. #22
    assimiliert Avatar von Palladin007
    Registriert seit
    19.08.11
    Ort
    NRW
    Beiträge
    2.244

    AW: Dateisortierung - nur etwas umständlicher

    Ok, ich hab mich jetzt nochmal ran gesetzt und das kleine Tool geschrieben, mit dem ich hoffe, die passenden Vergleichswerte zu "erforschen".

    Dazu brauche ich dann aber Hilfe von möglichst vielen Leuten, denn der Grenzwert, ab dem zwei Bilder nicht mehr ähnlich sind, der muss durch Tests bestimmt werden.


    Das ist der Code:
    PHP-Code:
            static void Main(string[] args)
            {
                List<
    stringleft = new List<string>();
                List<
    stringright = new List<string>();

                var list = 
    File.ReadAllLines("BilderListe.txt");
                for (
    int i 0< list.Count(); i++)
                {
                    if (
    == File.ReadAllLines("BilderListe.txt").Count() - && (2) * == i) break;
                    if (
    == 0) { left.Add(list[i]); continue; }
                    if ((
    2) * == ileft.Add(list[i]);
                    else 
    right.Add(list[i]);
                }

                
    double ergebnis 0;
                for (
    int i 0left.Counti++)
                    
    ergebnis += IstÄhnlich((Bitmap)Image.FromFile(left[i]), (Bitmap)Image.FromFile(right[i]));
                if (
    ergebnis == 0)
                {
                    
    Console.WriteLine("Keine Dateien angegeben.");
                    
    Console.Read();
                    return;
                }
                else
                {
                    
    ergebnis /= left.Count;
                    
    Console.WriteLine(ergebnis);
                    
    Console.Read();
                }
            }
            static 
    int IstÄhnlich(Bitmap _img1Bitmap _img2)
            {
                
    int width 25;
                
    int hight 25;

                
    Bitmap img1 verkleinern(_img1widthhight);
                
    Bitmap img2 verkleinern(_img2widthhight);

                
    int sum 0;
                for (
    int y 0highty++)
                    for (
    int x 0widthx++)
                        
    sum += (int)(Math.Pow(img1.GetPixel(xy).img2.GetPixel(xy).R2) +
                            
    Math.Pow(img1.GetPixel(xy).img2.GetPixel(xy).G2) +
                            
    Math.Pow(img1.GetPixel(xy).img2.GetPixel(xy).B2));
                return 
    sum;
            }
            static 
    Bitmap verkleinern(Bitmap imageint width 25int hight 25)
            {
                
    Bitmap bmpOutput = new Bitmap(widthhightPixelFormat.Format24bppRgb);
                
    Graphics gOutput Graphics.FromImage(bmpOutput);
                
    Rectangle rectOutput = new Rectangle(00bmpOutput.WidthbmpOutput.Height);

                
    ImageAttributes ia = new ImageAttributes();
                
    ia.SetWrapMode(WrapMode.TileFlipXY);

                
    gOutput.InterpolationMode InterpolationMode.HighQualityBilinear;
                
    gOutput.PixelOffsetMode PixelOffsetMode.Half;
                
    gOutput.CompositingMode CompositingMode.SourceCopy;

                
    gOutput.DrawImage(imagerectOutput00image.Widthimage.HeightGraphicsUnit.Pixelia);
                
    bmpOutput.Save("output.bmp"ImageFormat.Bmp);

                return 
    bmpOutput;
            } 



    Das kleine Programm tut folgendes:

    Es liest aus einer Datei zeilenweise Pfade heraus und teilt sie dann wechselseitig in Listen auf, aus denen die Bilder dann verglichen werden sollen. In der Datei "BilderListe.txt" müssen also vollständige Pfade zu Bildern sein. Es wird das Erste mit dem Zweiten verglichen, dann das Dritte mit dem Vierten, und so weiter.
    Der Vergleich arbeitet wie folgt:
    Die zu vergleichenden Bilder werden auf die Größe 25x25 gebracht. Dann wird diese Formel für die RGB-Werte von jedem Pixel berechnet: (R1-R2)^2 + (G1-G2)^2 + (B1-B2)^2.
    Die Ergebnisse kommen dann auf eine Summe, ein Wert, der sozusagen die Gleichheit beider Bilder beschreibt.

    Nun muss ich wissen, wie groß dieser Wert werden darf (je größer, um so verschiedener die Farbwerte), damit die Bilder noch als ähnlich anerkannt werden.
    Dafür das Programm hier, es rechnet die Werte aus, berechnet den Querschnitt und gibt diesen dann aus und den brauche ich.



    Am besten wäre es, wenn die Tester dann unterschiedliche Testreihen durch führen, wo die Bilder aufsteigend verschieden sind.
    So kann ich dann die Konstanten zusammen stellen, womit dann der Grad der Ähnlichkeit einfach geändert werden kann.

    Also ich denke, 5 Testreihen mit Bildern, die kaum ähnlich, ein bisschen ähnlich, ähnlich, etwas mehr ähnlich, sehr ähnlich sind
    Oder irgendwie so, würde mich da auch über einen geeigneten Vorschlag für die Konstanten freuen ^^


    Gruß
    Angehängte Dateien Angehängte Dateien

  9. #23
    Schon lange hier Avatar von Fernaless
    Registriert seit
    18.01.09
    Ort
    Schwarzach a. Main
    Beiträge
    3.112

    AW: Dateisortierung - nur etwas umständlicher

    Sorry für die blöde Frage, aber von welcher Programmiersprache ist dieser Code?

    EDIT: C#.

  10. #24
    assimiliert Avatar von Palladin007
    Registriert seit
    19.08.11
    Ort
    NRW
    Beiträge
    2.244

    AW: Dateisortierung - nur etwas umständlicher



    Ja, C# ^^


    Hast du mal getestet? Du hast ja die 800 Bilder :P

    Ich hab kaum Bilder und von denen sind kaum welche ähnlich.

  11. #25
    Schon lange hier Avatar von Fernaless
    Registriert seit
    18.01.09
    Ort
    Schwarzach a. Main
    Beiträge
    3.112

    AW: Dateisortierung - nur etwas umständlicher

    Bei mir kommt folgender Fehler:

    Klicke auf die Grafik für eine größere Ansicht

Name:	Unbenannt.png
Hits:	79
Größe:	42,6 KB
ID:	69673

  12. #26
    assimiliert Avatar von Palladin007
    Registriert seit
    19.08.11
    Ort
    NRW
    Beiträge
    2.244

    AW: Dateisortierung - nur etwas umständlicher

    Achso, ja, du hast also die exe-Datei in dem Ordner "C:\Skyrim-Wallpaper" oder so gestartet.

    Du musst dem aber noch sagen, welche Bilder deiner Meinung nach ähnlich sind und dazu musst du die BilderListe.txt im selben Ordner erstellen.
    Und da kopierst du die Pfade deiner Bilder rein, die müssten aber eigentlich auch relative Pfade sein, also nur die Dateinamen und die Endung der Bilder, die im selben Ordner liegen, sicher bin ich mir aber nicht.

    Es geht halt darum, dass das Programm die Liste auf teilt und dann immer ein Bild mit dem Folgenden vergleicht, also so:

    Bild11
    Bild12
    Bild21
    Bild22
    Bild31
    Bild32
    .
    .
    .

    Dann vergleicht er Bil11 mit Bild12, Bild21 mit Bild22, Bild31 mit Bild32, und so weiter.

  13. #27
    Schon lange hier Avatar von Fernaless
    Registriert seit
    18.01.09
    Ort
    Schwarzach a. Main
    Beiträge
    3.112

    AW: Dateisortierung - nur etwas umständlicher

    Also muss ich für jedes der 800 Bilder den Pfad reinkopieren... Oder nur den Pfad vom Ordner?

  14. #28
    assimiliert Avatar von Palladin007
    Registriert seit
    19.08.11
    Ort
    NRW
    Beiträge
    2.244

    AW: Dateisortierung - nur etwas umständlicher

    Nicht für alle 800 Bilder.

    Ich brauche nur einen Wert, der ungefähr die "Gleichheit" einiger Bilder dar stellt.

    Suche dir also Bilder raus, deren "Gleichheit" ungefähr gleich ist. Den errechneten Wert werde ich dann nutzen, vielleicht ein bisschen höher.
    Aber damit werden dann die von dir genutzten Bilder als ähnlich anerkannt, wenn du sie testen lässt. Und andere Bilder, deren "Gleichheit" ähnlich ist, werden auch als ähnlich erkannt.


    Das liegt an dem Algorithmus, der das berechnet.
    Ich vergleiche immer Pixel1 von beiden Bildern, also nehme immer ein Pixel von dem einen Bild und ein Pixel von dem anderen Bild, aber auf den genau selben Koordinaten.
    Dann nehme ich die RGB-Werte. Der R-Wert vom 2. Bild minus dem vom 1. Bild, das gleiche auf für die G- und B-Werte. Die Differenzen werden dann zum Quadrat und zusammen gerechnet. Das passiert dann mit jedem Pixel und dem Gegenstück im anderen Bild.
    Logisch dabei ist: Wenn ein Pixel mit dem anderen exakt gleich ist, dann müssen auch die RGB-Werte exakt gleich sein. Da sich die Differenz so dann aber auflöst, ist das Ergebnis 0. Wenn das nun mit jedem Pixel passiert, ist das Gesamt-Ergebnis auch 0, also sind beide Bilder gleich. Wenn nun aber nicht alle Pixel gleich sind, wenn also ein Pixel anderen Farb-Werte haben, dann unterschieden sich die RGB-Werte, die Differenz ist nicht gleich 0, also auch das Ergebnis. Das spiegelt sich dann im Endergebnis wieder.
    Je größer das Endergebnis also ist, desto mehr Unterschiede gibt es in den Farb-Werten der Bilder.

    Dann wird nur noch das Endergebnis genommen und mit fixen Vorgaben verglichen. Wenn es kleiner ist, als die Vorgabe für "Sehr ähnlich", dann werden die Bilder als "sehr ähnlich" angegeben.


    Aber diese fixen Werte brauche ich, möglichst zu unterschiedlichen Stufen, dass man Bilder, die nur unterschiedlicher Größe sind, suchen kann, oder Bilder, die nur grobe Ähnlichkeit auf weisen.
    Wie viele Bilder du da nun testest, ist deine Sache, ich kenne sie nicht. ^^

  15. #29
    assimiliert Avatar von Palladin007
    Registriert seit
    19.08.11
    Ort
    NRW
    Beiträge
    2.244

    AW: Dateisortierung - nur etwas umständlicher

    Ok, hier scheint ja nix mehr zu kommen, daher hab ich die Methode wegen der Ähnlichkeit von Bildern mal so umgeschrieben, dass sie auch richtig genutzt werden kann:

    PHP-Code:
            static bool IstÄhnlich(Bitmap _img1Bitmap _img2int grenzwert)
            {
                
    // größere Kantenlängen bewirken eine genauere Rechnung, da mit jedem Pixel kleinere Bildbereiche abgetastet werden
                // Allerdings ist das sehr Performancelastig und größere Kantenlängen verlangsamen die Methode
                
    int width 25;
                
    int hight 25;

                
    Bitmap img1 verkleinern(_img1widthhight);
                
    Bitmap img2 verkleinern(_img2widthhight);

                
    int sum 0;
                for (
    int y 0highty++)
                    for (
    int x 0widthx++)
                        
    sum += (int)(Math.Pow(img1.GetPixel(xy).img2.GetPixel(xy).R2) +
                            
    Math.Pow(img1.GetPixel(xy).img2.GetPixel(xy).G2) +
                            
    Math.Pow(img1.GetPixel(xy).img2.GetPixel(xy).B2));

                return 
    sum grenzwert || grenzwert == 0;
            }

            
    // Diese Methode verkleinert die Bilder auf eine gleiche Größe, sodass Kanten verwischen und
            // die Bilder auch Abweichungen aufweisen können.
            
    static Bitmap verkleinern(Bitmap imageint width 25int hight 25)
            {
                
    Bitmap bmpOutput = new Bitmap(widthhightPixelFormat.Format24bppRgb);
                
    Graphics gOutput Graphics.FromImage(bmpOutput);
                
    Rectangle rectOutput = new Rectangle(00bmpOutput.WidthbmpOutput.Height);

                
    ImageAttributes ia = new ImageAttributes();
                
    ia.SetWrapMode(WrapMode.TileFlipXY);

                
    gOutput.InterpolationMode InterpolationMode.HighQualityBilinear;
                
    gOutput.PixelOffsetMode PixelOffsetMode.Half;
                
    gOutput.CompositingMode CompositingMode.SourceCopy;

                
    gOutput.DrawImage(imagerectOutput00image.Widthimage.HeightGraphicsUnit.Pixelia);
                
    bmpOutput.Save("output.bmp"ImageFormat.Bmp);

                return 
    bmpOutput;
            } 
    "grenzwert" ist der Parameter, dem dann der Wert übergeben muss, der aus der Rechnung ausgehend nicht überschritten werden darf.
    Wie der genutzt wird ist ganz simpel, nämlich in der letzten Zeile der Methode: return sum < grenzwert;
    Geändert von Palladin007 (17.01.13 um 22:57 Uhr)

  16. #30
    Schon lange hier Avatar von Fernaless
    Registriert seit
    18.01.09
    Ort
    Schwarzach a. Main
    Beiträge
    3.112

    AW: Dateisortierung - nur etwas umständlicher

    Derzeit scheitert es an meiner Zeit.

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Ähnliche Themen

  1. So etwas gibt es nur in China
    Von RollerChris im Forum Boardsofa
    Antworten: 28
    Letzter Beitrag: 10.04.06, 20:20
  2. Antworten: 3
    Letzter Beitrag: 26.07.05, 20:18
  3. Der etwas andere AK
    Von Brummelchen im Forum Comedy & Spiele
    Antworten: 7
    Letzter Beitrag: 05.07.05, 20:35
  4. etwas anspruchsvolle Physikaufgaben
    Von ToSo im Forum Comedy & Spiele
    Antworten: 4
    Letzter Beitrag: 17.10.02, 15:17

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •