WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Bildrauschen filtern, Streifen erkennen. Intensitätsverlauf

 

dasjoki
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 58
Anmeldedatum: 29.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.10.2015, 15:04     Titel: Bildrauschen filtern, Streifen erkennen. Intensitätsverlauf
  Antworten mit Zitat      
Hallo liebes Forum,
auch ich bin absoluter Matlab-Neuling und habe versucht, erstmal selbst auf die Lösung meines Problems zu kommen. Leider ohne Erfolg. Also muss auch ich jetzt mal ein neues Thema eröffnen.

Ich hab ein Bild in Matlab eingelesen und es mir zurechtgeschnitten (siehe Bild1 - Test.png). Meine Aufgabe besteht darin, die angezeigten Interferenzstreifen auszuwerten und einen Intensitätsverlauf darzustellen. Zuerst habe ich das Bild in ein Graustufenbild gewandelt. Ist das sinnvoll? Das Bild sah danach noch genauso aus wie das Original.

Code:
I = imrotate(B,270);    % Bild drehen
I=rgb2gray(I);          % Bild in Graustufen umwandeln
size(I)                 % Pixelanzahl ausgeben

figure;
imshow(I);              % Originalbild anzeigen


Ich habe versucht die Graustufen des Bildes so zu manipulieren, dass ich konkretere Abtrennungen zwischen den Streifen erhalte. Aber da das Bild insgesamt sehr dunkel ist, war die Lösung sehr verrauscht (Bild 2 - Graustufenmanipulation.png).

Code:
E = im2bw(I,1/20)     % Graustufenmanipulation in SW-Bild
figure;
imshow(E);              % manipuliertes Bild anzeigen


Danach habe ich erstmal versucht das Bild so zu filtern, dass das Rauschen unterdrückt wird. Leider ohne Erfolg. Ich habe den Medianfilter angewendet aber durch meinen geringen Kenntnissstand konnte ich keine tragenden Erfolge erzielen (Bild 3 - Medianfilter.png).

Code:
K = medfilt2(E);        % Medianfilter des SW-Bildes
figure;
imshow(K);


Wie würdet ihr das Bild filtern, um die hellen von den dunklen Streifen zu trennen? Da das Bild zum rechten Rand dunkler wird, würde mir anfangs auch ein kleinerer Bildausschnitt genügen (das Fadenkreuz links dient nur als Referenzmarke).

Zur weiteren Auswertung des Bildes wäre im Anschluss eine Detektion der Streifen nötig. Dazu habe ich von der Houghtransformation gelesen, abermals haben mich meine geringen Kenntnisse zum Aufgeben gezwungen.

Als letztes möchte ich von dem Bild den Intensitätsverlauf darstellen. Typischerweise sollte dabei eine abklingende Sinusfunktion entstehen.

Könnt ihr mir vielleicht weiter helfen?

Ich hoffe, ich habe euch nicht mit Informationen überschüttet. Ich habe die Forumregeln nach bestem Wissen und Gewissen berücksichtigt. Entschuldigt, wenn mir als Neuling trotzdem Fehler unterlaufen sind

Viele Grüße

Medianfilter.png
 Beschreibung:
Bild3

Download
 Dateiname:  Medianfilter.png
 Dateigröße:  8.78 KB
 Heruntergeladen:  428 mal
Graustufenmanipulation.png
 Beschreibung:
Bild2

Download
 Dateiname:  Graustufenmanipulation.png
 Dateigröße:  19.19 KB
 Heruntergeladen:  491 mal
Test.png
 Beschreibung:
Bild1

Download
 Dateiname:  Test.png
 Dateigröße:  68.43 KB
 Heruntergeladen:  468 mal
Private Nachricht senden Benutzer-Profile anzeigen


Anton4

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.10.2015, 07:52     Titel:
  Antworten mit Zitat      
Hallo dasjoki,

wie du beim Medianfilter schon siehst, verschlechtert sich das Ergebnis, weil die Struktur ausreißt. Zu sehen an den hellen Flächen - ohne Bildzeichnung. Eine andere Möglichkeit wären morphologische Verfahren. Dazu folgendes Beispiel:

Code:
I=imread(Bild);
se=strel('line',3,140);  % line ist winkelabhängig, daher gut für das Bild geeignet
I2=imdilate(I,se);
se20=strel('line',6,140);
I3=imopen(I2,se20);
figure; imshow(I2)
figure; imshow(I3)


Zu weiteren Funktionen gehört auch "imclose". Vl. hilft das weiter.

Anton4
 
Anton4

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.10.2015, 08:12     Titel:
  Antworten mit Zitat      
Eine Funktion habe ich noch vergessen:

Code:
x=im2bw(I40);
Y=bwperim(~x);
Seklett(bwmorph(x,'skel',Inf);
figure; imshow(Skelett)


Anton4
 
Anton4

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.10.2015, 08:14     Titel:
  Antworten mit Zitat      
Als Gast kann man nichts mehr ändern. Da ist ein Fehler, muss heißen:

Seklett=bwmorph(x,'skel',Inf);
 
dasjoki
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 58
Anmeldedatum: 29.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.10.2015, 20:17     Titel:
  Antworten mit Zitat      
Hallo,
danke für deine Antwort. So richtig hat mir das leider auch nicht weiter geholfen. Das Bild war auch danach nicht wirklich auswertbar. Einziger Vorteil war, dass es zum Rand hin nicht mehr ganz so dunkel dargestellt wurde. Verrauscht war es trotzdem sehr stark. Aber ich muss auch zugeben, dass ich Probleme habe, die Syntax zu verstehen. Erklärungen zur Syntax wären für mich ganz hilfreich.

Gibt es hier noch weitere Ideen? Am wichtigsten ist mir erstmal, die schwarzen Linien klar vom Hintergrund trennen zu können um das Rauschen und die Verschmutzungen zu eliminieren.

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
AlexHall
Forum-Anfänger

Forum-Anfänger



Beiträge: 20
Anmeldedatum: 17.04.14
Wohnort: FFB
Version: ---
     Beitrag Verfasst am: 08.11.2015, 15:58     Titel: Intensitätsverlauf
  Antworten mit Zitat      
Das Bild gibt Beugungsmuster wieder, oder? kannst Du bitte mir etwas detailierter deine Aufgabe beschreiben?
Private Nachricht senden Benutzer-Profile anzeigen
 
dasjoki
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 58
Anmeldedatum: 29.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.11.2015, 12:17     Titel:
  Antworten mit Zitat      
Hallo,
das Bild zeigt Interferenzstreifen, also Überlagerungen von Lichtwellen. Die Aufgabe besteht darin, diese (sich bewegenden) Streifen zur Referenzmarke (ganz schwarzer vertikaler Strich im Bild) hin auszuwerten, also ihre Verschiebung zu bestimmen.
Um das realisierbar zu machen, muss das Bild erstmal so gut gefiltert werden, dass man die Interferenzsignale gut erkennnt. Danach könnte man pixelweise die Verschiebung beobachten. Das wäre für meine Aufgabe aber zu ungenau. Aber zur genauern Auswertung komme ich erst, wenn ich überhaupt erstmal ein gut auswertbares Bild erhalte.
Momentan habe ich es so gelöst, dass ich das Bild auf 255 Grauwerte normiert habe und dann spaltenweise einen Mittelwertfilter gebildet habe. Das funktioniert hier ganz gut, jedoch wird dies auch immer ungenauer, sobald das Bild verdreht wird. Also wäre ein Filter, der drehlageunabhängig ist, ideal. Wenn du (oder auch gern jemand anders) ein Idee hast, gib bitte Bescheid.

Viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.