Posts

Matlab: Lieder sortieren

( English ) Dieser Beitrag beschreibt ein Matlab Skript in dem Lieder aus einem Ordner in einen anderen Ordner sortiert nach Interpreten gespeichert wird. Funktion: Zu erst wird der Pfad der zu sortierenden Dateien und der Pfad in welche diese sortiert werden ausgewählt. Da manchmal im Ordner versteckte Daten wie ".", ".." oder "Desktop.ini" sind werden diese herausgenommen. Jetzt wird der Dateien Name jeder Musikdatei aufgespalten in Interpret und in Liedname und unnötigt zusätze wie "(Official Video)", "[pleer.com]" weggeschnitten. Jetzt wird für jedes Lied nachgeschaut, ob ein Ordner des Interpreten schon in dem zu speichernden Ordner ist. Wenn es keinen gibt wird einer erstellt mit dem Namen der Interpreten. Dann wird in diesem Ordner überprüft, ob das Lied bereits existiert und wenn dies nicht der Fall ist wird das Lied in den Ordner kopiert. All erfolgreich kopierten Liednamen werden in der Konsole ausgegeben. Dabei kann am...

Matlab: Entfernung von Hintergründen in Bildern

Bild
( English ) Dieser Beitrag ist über eine Matlab Funktion die von Bildern den Hintergrund auswählen kann, um diesen transparent zu entfernen. Dabei kann der Hintergrund aus mehreren Farben bestehen und verschmiert sein! Dies ist praktisch für Präsentationen, damit die Bilder zum Hintergrund passen ohne Ränder zu haben. Prinzip: Dies is eine Interface basierte Funktion bei der man Bilder jedes Typen per Buttom laden kann. Mit dem Buttom "Choose Background" kann in dem auftretenden Bild die Hintergrundfarbe gewählt werden, welche rechts durch die weiße Farbe gekennzeichnet ist, welcher Bereich selektiert ist. Nun kann mit dem Schieber die Differenz zu der Farbe gewählt werden. Beispielsweise sind für die Stellung 10 für die Farbe [50 5 200] alle Farben im Bereich [40 0 190] bis [60 15 210] selektiert. In dem Graphen unten links kann die ausgewählt Hintergrundfarbe überprüft werden. Mit dem Buttom "next BG" kann dann ein weiterer Hintergrund, ebensfall...

Matlab: Bilderkennung von 12 seitigem Würfel mit Zahlen

Bild
( English ) Dieser Beitrag ist ähnlich zu dem Beitrag davor und beschreibt die Identifikation von Zahlen  von 1-12 eines 12-seitigen Würfels. Diese Bilder sind ebenfalls in der automatischen Würfelmschine meines Bruder erzeugt worden. Würfel Identifikation: Zuerst werden alle Bilder in Matlab geladen und auf eine 200x200 Pixel Größe reduziert. Dieses Bild wird nun konvertiert via rgb2gray in ein farbloses Bild. Darauf hin wird der Gradient angewendet und dieses und das graue Bild werden mit einem Treshold in binäres Bilder umgewandelt. Das Gradienten Bild wird mit der morphologischen Operation imclose erweitert und dann mit dem normalen binären Bild multipliziert und dann wird Dilatation angewendet um die Konturen dicker zu machen. Hiernach wird eine große For-Schleife über alle Bilder durchgeführt und die Mitte des Bildes mit meiner Funktion bestimmt (gewichtet alle Stellen die 1 sind und findet die Mitte davon: bestimmt den Mean-Wert aller Zeilen und Spalten an ...

Matlab: Bilderkennung von + und - Würfeln

Bild
( English ) Dieser Eintrag beschreibt die Identifikation von Plus und Minus auf Würfeln. Würfel Identifikation: Mein Bruder hat eine Würfel Roll Maschine gebaut die automatisch würfelt mit zwei Seiten +, eine Seite - und der rest leer und Bilder aufnimmt. Diese Bilder sehen wie die folgenden aus:  Das Plus ist dabei grün und das Minus ist rot. Bildbearbeitung: Zu erst lade ich alle Bilder mit Matlab und schneide sie in eine 200x200 size größe (zweite Zeile). Weiterhin verbesser ich den Kontrast der Bilder durch Erhöhung der RGB-Werte, da diese nur bei 100 von 255 liegen (dritte Zeile). Die einzelnen RGB-Kanäle werden dann aufgeteilt und dadurch ein grüner Kanal rekonsturiert, indem von dem grünen Kanel die hälfte des blauen und roten Kanals (als einfache Matrixsubtraktion) abgezogen wird und demenstprechend für rot. Mit einer Grenze der Double-Werte bei 50 für das grüne Bild (darüber sind die Werte nun 1 und darunter 0) und 20 für das rote Bild wird also ein binäres Bi...

Matlab: Segmentierung Wachstum (Segmentation Growing)

Bild
Segmentierung Wachstum (Segmentation Growing) ( English ) Diese Post ist über ein Verfahren um Objekte aus BIldern zu segmentieren. Dafür wird eine Region gewählt (seed) und mit einem Gewichtungsfaktor, der von der Standartabweichung und der Durchschnittswert der Region und dem Faktor f abhängt, gewählt. Wenn Pixel, die unmittelbar um das seed liegen innerhalb der Grenzen sind, wird dieser dem seed hinzugefügt. Dies wird so lange fortgezetzt, bis kein Wert mehr dem seed hinzugefügt wird. Dann ist das Objekt somit segmentiert. function [region, area, seed, sx1, sx2, sy1, sy2] = Segmentation_Growing(img,sx1,sx2,sy1,sy2,f): Diese Funktion benötigt ein Bild als input. Wird sonst nichts als input angegeben kann mit 2 Markern der Bereich festgelegt werden, in dem der seed ist. Andernfalls wird mit sx1, sy1 die obere linke Ecke und mit sx2, sy2 die untere rechte Ecke definiert. Wird mit den Markern gearbeitet, kann als zweiter input f angegeben werden. Diese Variable beschreibt die Gewi...

Matlab: Dijkstra Methode - große Nachbarschaft

Bild
Die Dijkstra Methode ( English ) In diesem Post wird die Dijkstra Methode aus dem vorherigen Post nochmal aufgearbeitet, sodass diese eine größere Nachbarschaft nach Wegen durchsucht und somit bei mehreren möglichen Pfäden eine präziesere Lösung findet. Die wird in folgendem Bild zu dme vorherigen Post verglichen: Hier kann der Code bei MathWorks heruntergeladen werden. Quellcode Dijkstra: function [path, prev, unvis, distance, start, target] = Dijkstra_Methode(Matrix, start, target) %Matrix is the incoming image %start is the start point in a vector [a,b] where a is the column and b the %row %target is the end point similare to start %path is the matrix with ones excepted at the position of the path where it is 0 %prev are also the previous visited pixels where the algorithm took the %wrong way %unvis are all unvisited pixels %distance is the distance or weight of the pixels %open the image and you can choose with the cursor the start %and end point if you don't give ...

Matlab: Dijkstra Methode - kürzestes Weg entlang des Gradienten (kleine Nachbarschaft)

Bild
Die Dijkstra Methode ( English ) In diesem Post zeige ich wie mit Matlab am Rand von Objekten oder Bildern der Pfad gefunden werden kann. Hierfür benutzt ich die Dijkstra Methode. Ich nehme als Input ein BIld von Matlab, führe es in ein Gradientenbild über mit [G,Gdir] = imgradient(img,'sobel'); und benutze meine Funktion Dijkstra(G,p,q) : Diese ist benötigt ein Bild in double Format G , einen Startpunkt p bei dem der erste Wert der Zeilenwert und der zweite der Spaltenwert ist und das vorgegebene Ziel q dem entsprechend. Die Methode funktioniert so, dass sie alle Distanzen auf unendlich setzt und nur den Startpunkt auf 0. Alle unbesichteten Pixel haben den Wert 1. Der Algorithmus geht so lange, bis das Ziel kein unbesichteter Pixel mehr ist. Er summiert über alle Nachbarpixel und berechnet immer das Gewicht bzw. die Distanz mit function [weight] = localedgewidth(G,p,q) wobei der Wert vom Nachbarpixel von dem Maximum der Bilder abgezogen wird, dies durch die Differenz von...

Matlab: GUI Interface

Bild
Erstellen eines GUI interfaces ( English ) In diesem Beitrag zeige ich wie man mit Matlab ganz einfach ein GUI Interface mit Buttons etc. erstellt und ein Programm daraus schreibt. Hierfür muss zuerst in Matlab in die Konsule "guide" eingegeben werden, dass sich ein Fester öffnet. Hier kann man jetzt entweder schon erstellt Interfaces öffnen oder ein neues erstellen. In einem neu erstellten Interface kann ganz einfach mit den entsprechenden Buttons und anderen Objekten eine Oberfläche erstellt werden. Dies kann man speichern und ausführen woraufhin ein Matlab Code erstellt wird. Für die Programmierung ist wichtig, dass hierbei jedem Objekt ein "Tag" zugeordnet wird und benannt wird. Dies kann man mit dem "Inspector" bearbeiten, indem einfach auf ein Objekt doppelt geklickt wird. Hier können auch noch weitere Einstellungen wie Design oder "Value" oder "Name" angegeben werden: Hier kann nun mit dem grünen Pfeil des Editors der...

Matlab: alle Dateien aus Ordner darstellen

Öffnen und Darstellen aller Dateien aus einem Ordner ( English ) In diesem Post wird beschrieben, wie aus einem Ordner mit Matlab alle Dateien geöffnet und geplottet werden können. Zuerst werden alle Datein des Formats  *.txt geladen und in files gespeichert. files = dir('*.csv'); Dann werden alle Dateien in eine Variable gespeichert. Für value = 2 wird beispielsweise nur jede 2. Datei genommen. for i = 1:1:length(files)/value     fid3{i}=files(i).name; end Diese Dateien sind noch nicht sortiert und können nun sortiert werden. Hierfür muss "natsortfiles" aus Matlab-Exchange heruntergeladen werden: fid3 = natsortfiles(fid3) for i = 1:value:length(files)      fid = fopen(fid3{i});     daten = textscan(fid,'%f %f','delimiter',',','headerlines',0');     q1(:,i/value) = daten(1);     q2(:,i/value) = daten(2); end fclose(fid); Im "textscan"-Befehl wird mit 'headlines',0 die Anzahl der ...

Matlab: Farbspektrum für Plots

Bild
Farbspektren mit Matlab ( English ) In diesem Post wird beschrieben, wie mit meiner Funktion für Matlab, ein Farbspektrum erzeugt werden kann, sodass verschiedene Plots alle verschiedene Farben haben. Hierfür habe ich die Funktion geschrieben ( Download ): function [CoolSpec] = ColSpec(a,q,value,start,m,k,inv) Es kann also mit "a" die Anzahl der verschiedenen Farben im Bereich von rot über gelb zu grün zu blau und zu pink abgegeben werden. Mit dem Wert q wird der q'te Wert des Spektrums zurückgegeben. Mit "value" wird die Weite des Spektrums beschreiben also für Wert größer 1 wird sich die Farbe weniger ändern. "start" gibt den Startwert der Farbe an. Dabei ist rot (start = 0), gelb (start = 0.5), grün(start = 1), hellblau (start = 1.5-2), dunkelblau (start = 2.5) und pink (start = 3) und dann beginnts wieder von vorne. Mit "m" und "k" kann für kleinere Werte als 1 die Helligkeit der Kuven kontinuierlich verringert werden. Mi...

Matlab: optische Aufbauten

Bild
Optikenaufbauten mit Matlab ( English ) Dieser Post ist dazu da, optische Aufbauten aus Linsen, Spiegeln und anderen Optiken schön mit Matlab darzustellen. Dafür habe ich einige einzelne Funktionen geschrieben mit denen man diese infolgender Form benutzen kann ( MATLAB Dateien ): opticlense(x,y,deg,thick,dx,dy,color) opticbeamsplitter(x,y,deg, thick,dx,dy,color) opticbikonvex( x,y,deg,thick,dx,dy,color)  opticdistance(x1,y1,x2,y2,string,len,thick,color) opticline(x,y,deg,len,thick,color) opticmirror(x,y,deg,style,thick,color,len) opticslit(x,y,deg,thick,color,len) Hierbei gibt x und y die Position des optischen Elements an. So kann nun Maßstabgetreu in Matlab die Linsen positioniert werden. deg gibt den Winkel der Neigung der Optik an und dx, dy bzw. len die Länge in x, y Richtung. color bestimmt die Farbe der Optik und thick die Dicke der Linie. In opticdistance x1 , y1 sind die Startwerte und x2 , y2 die Endwerte des Abstandes, wobei mit string der Name (z.B. die E...