Posts

Es werden Posts vom 2016 angezeigt.

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 Gewichtung…

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 the function these values

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 maximal…

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 Code erstel…

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 Zeilen der .txt Datei gelöscht. Die…

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. Mit Werten …

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 Entfernung) eingegeben werden kan…

Theremin: Das elektrische Musikinstrument

Bild
Allgemein: (English) Ein Theremin ist ein elektrisches Musikinstrument, welches durch zwei Schwingkreise geregelt wird, indem an einem Schwingkreis eine Antenne angeschlossen ist. Durch Annäherung der Hand wird die Kapazität geändert und somit auch die Frequenz des Schwingkreises. Schlussendlich hört man die Differenz zwischen den beiden Schwingkreisen.

Aufbau: Hierfür habe ich folgende Schaltung genommen.

Die Stückliste ist wie folgt: OPV TL071 x2LM386 x1

Kondensator: 100 nF x2220 nF x247 pF x247 nF x1100 pF x110 nF x1Elko 220 u x3

Widerstand:100 k  x422 k x447 k x210 x1

Potentiometer:100k x110k x2

Sonstiges: Diode 1N4007 1BAT42 2AntenneLautsprecherUm das Theremin mit Strom zu versorgen werden entweder 2 9V-Akkus benötigt die in Reihe geschaltet sind oder sonstige 18V Spannungsdifferenz. Mit Netzteilen ist es kritisch, da diese eine richtige Erdung brauchen. Eignen könnten sich dafür diese Stecker, falls man so wie ich zwei 9V-Netzteile hat. Alles aufgebaut sieht dies dann auf dem Steckbr…

Matlab: Matlabskript

Bild
Matlabskript Da ich sehr viel mit Matlab mache, habe ich auch immer nebenher mir alles dokumentiert und die wichtigsten Befehle in eine Latexdatei zusammengefasst. Dieses Skript ist für Anfänger als auch für Fortgeschrittene. Es beginnt mit einfachen Plot- und Fit-Funktionen über 3D-Plots und Fehlergeraden.

Matlabskript

Vorschau:


Matheabitur Skript

Bild
Matheabitur-Skript Da ich dieses Jahr ziemlich viel Mathenachhilfe gegeben habe, habe ich nebenher ein Matheskript geschrieben für das Abitur mit allen relevanten Themen.

Bei irgendwelchen Fehlern oder Unklarheiten im Skript würde ich mich gerne über Komentare und Bemerkungen freuen, da ich doch nicht die Zeit hatte öfters über das Skript zu schauen und es zu perfektionieren.

Ich hoffes es hilft euch beim Lernen und Verstehen!

Matheabitur-Skript

Vorschau:


Arduino: Geräuschsensor LM393

Bild
Motivation Da ich mir ein Theremin gebaut habe, wollte ich mir mit dem Arduino-Geräuschsensor LM393 eine Art Mikrofon bauen, bzw. einen Lautstärke regeler.

Anwendung: Die Anwendung des Sensors ist ziemlich einfach. Man nimmt ein beliebiges Arduino-Board und verbindet vom Sensor VCC mit +5V, GND mit GND und OUT mit A0.


Nun wird einfach der analog Pin A0 mit analogRead(A0) ausgelesen. Der Arduino gibt abhängig von der Lautstärke entweder 26 oder 1023 als Wert an. Es kommt selten vor, dass sich ein Wert dazwischen befindet. Deswegen habe ich immer über einige Werte (500) gemittelt und dann den Durchschnitt bestimmt. Wird nun 10 Sekunden lang immer der Wert ermittelt, kann der Lautstärkeverlauf ziemlich grob bestimmt werden. Dieser ist umso genauer, über je mehr Werte gemittelt wird. Allerdings ist die Zahl der gemittelten Werte und die Werte die man pro Sekunde aufnehmen will, abhängig von der Geschwindigkeit des Computers.  In folgenden Bildern ist der Lautstärkeverlauf für den Ton c ei…

Matlab: Kegel/Pfeil in 3D

Kegel/Pfeil in 3D(English) Um einen Kegel bzw. ein Pfeil im 3D darzustellen kann die Funktion:

function arrow3D(x,y,z,x2,y2,z2,length,thick,color)

 verwendet werden. Dabei ist "x2,y2,z2" der Endwert der Pfeiles, also die Spitze und "x,y,z" der Anfang des Vektors bzw. des Pfeiles. "length" gibt die Länge des Pfeils an und "thick" die Dicke. Mit "color" kann der Pfeil gefärbt werden. Wie die Funktion angewendet wird, kann im vorherigen Post nachgelesen werden.


Hier der Quellcode:


function arrow3D(x,y,z,x2,y2,z2,length,thick,color)

if nargin<5
    scale = 1;
end
x=-x;
y=-y;
x2=-x2;
y2=-y2;

vector2=[x2;y2;z2];
vector1=[x;y;z];
vector21=[x2-x;y2-y;z2-z];

u1=[x2-x;y2-y;z2-z];
u1=1/norm(u1)*u1;
u2=[1;0;0];
val=u1(1,1);
abstand=u1-val*u2;
if abstand==zeros(3,1)
    u2=[0;1;0];
end;
%Kreuzprodukt
u3(1,1)=u1(2,1)*u2(3,1)-u1(3,1)*u2(2,1);
u3(2,1)=u1(3,1)*u2(1,1)-u1(1,1)*u2(3,1);
u3(3,1)=u1(1,1)*u2(2,1)-u1(2,1)*u2(1,1);
u3=1/norm(u3)*u3;
%
u2(…

Matlab: Punkte und Vektoren in 3D-Plots

Bild
Punkte und Vektoren in 3D-Plots(English) Diese Matlabfunktion ist für das im vorherigen Post dargestellte 3D-Gitter. Dabei kann mit folgender Funktion ein Vektor bzw. ein Punkt im 3D-Plot erstellt werden.

function punkt3D(x1,y1,z1,x2,y2,z2,sign,name,color,dx,dy,dz,true)

Dabei gibt "x1,y1,z1" dem Startpunkt des Vektors und "x2,y2,z2" dem Endpunkt. Dabei kann mit "sign" das Zeichen am Endpunkt bestimmt werden. Mit "name" wird des Punkt benannt und "color färbt die Vektor.
Ist der Name nicht an der richtigen Stelle, kann dieser mit "dx,dy,dz" entsprechend verschoben werden. Für die Variable "true = 1" wird die Projektion des Vektors auf die 3 Ebenen angeschaltet.
Als Beispiel erhält man folgendes Bild mit diesem Quellcode:

grid3D(0,2,0,2,-2,2,4,4,4);
punkt3D(0,0,0,2,2,2,'.','P(2|2|2)',colors('orange'));
punkt3D(0,0,0,1,0.5,1,'arrow','Q(1|0.5|1)',colors('brightblue'),0,0,0.4);
arr…

Matlab: 3D Plot in kartesischem Koordinatensystem

Bild
3D Grid/Gitter(English) In diesem Post stell ich mein 3D-Gitter für Matlab vor. Dieses erzeugt in Abhängigkeit verschiedener Parameter ein Gitter in Matlab. Dieses kann einfach genutzt werden, um Vektoren, Ebenen und Geraden im dreidimensionalen Darzustellen.

function grid3D(x2,x,y2,y,z2,z,amountx,amounty,amountz,arrowtrue);

dabei gibt x2,y2,z2 die Startwerte der Achse und x,y,z die Endwerte der Achse an. Die anderen Variablen sind optional. Dabei gibt amountx, amounty, amountz die Anzahl der Achsenunterteilungen an. Wenn "arrowtrue = 1" ist, dann werden Pfeile an die Achsen gezeichnet. Diese sind jedoch nur für symmetrische Gitter gut zu gebrauchen.

Hier der Quellcode:
 function grid3D(x2,x,y2,y,z2,z,amountx,amounty,amountz,arrowtrue);

if nargin<7
    amountx = 4;
    amounty = 4;
    amountz = 4;
end
if nargin<10
    arrowtrue = 0;
end

xrange = x2-x;
yrange = y2-y;
zrange = z-z2;

zq = 0:1:amountz;
yq = 0:1:amounty;
xq = 0:1:amountx;

hold on;
set(gca,'visible'…