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

Kantenerkennung

 

Lux

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.04.2014, 10:04     Titel: Kantenerkennung
  Antworten mit Zitat      
Hola,

ich hätte da mal eins, zwei Fragen und hoffe Ihr könnt mir helfen.

Im Anhang habe ich ein Plot dargestellt, der die Kanten mit edge erkennt.

Erste Frage: Gibt es eine Möglichkeit die erkannten Kanten außerhalb des Bauteils zu entfernen ?

Zweite Frage: Die inneren erkannten Kanten sind Risse, diese möchte ich nun gerne hervorheben. Gibt es die Möglichkeit diese Flächen auszufüllen und anschließend durch einen Befehl zu erkennen? Sozusagen eine Aussage zu treffen, es befinden sich Risse in dem Bauteile an den Koordinaten (x,y).

Hier auch nochmal der Code:

Code:
% Matrix zuschneiden
figure(2)
B = M(403:544,99:786);      % Bereich aus der Matrix M ausschneiden
pcolor(B);
shading flat;
colorbar
axis off

% Bereiche
figure(4)
ii=B<56;                   % Suchen aller Werte aus B die kleiner als 56 sind
B(ii)=-1000;
D = B;
pcolor(D);
shading flat;
colorbar
axis off

figure(4)
BW = edge(D,'sobel');
imshow(BW)
 


Schonmals vielen Dank für eure Hilfe =)

kanten.jpg
 Beschreibung:

Download
 Dateiname:  kanten.jpg
 Dateigröße:  14.44 KB
 Heruntergeladen:  695 mal
Verschoben: 25.04.2014, 10:22 Uhr von denny
Von Grafiken und Plots nach Bildverarbeitung


Hubertus
Forum-Meister

Forum-Meister


Beiträge: 1.034
Anmeldedatum: 08.01.09
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 25.04.2014, 12:08     Titel:
  Antworten mit Zitat      
Moin,

ich kann im Moment leider dein Bild nicht laden, aber unabhängig von einer Probe gibt es folgende Probleme. Immer wenn Störsignale die gleiche Ausdehnung von Bildsignalen haben, wird es schwierig bis unmöglich, diese automatisch zu löschen. Das ist in deinem Fall so. Bildsignale im Innern des Umrandung sind in etwa gleich groß wie Störsignale außerhalb dieser Umrandung. Da hilft auch kein Verfahren, wie z.B. edgetaper, dass von den äußeren Kanten nach innen wirkt.

Selbst wenn man versucht, Bereiche farbig zu codieren und dann die Farben wieder löscht, wird sich nichts ändern. Das alles ginge nur, wenn ein Verfahren nur in bestimmten Regionen wirksam wird. Dann könnte man aber gleich von Hand löschen.

Da die Störsignale nicht periodisch sind, hilft auch die FFT nicht weiter. Im Moment fällt mir dazu keine Lösung ein. Das heißt aber nicht, dass irgendwer nicht doch noch eine Idee hat!!

Viele Grüße - Hubertus
Private Nachricht senden Benutzer-Profile anzeigen
 
Lux

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.04.2014, 07:38     Titel:
  Antworten mit Zitat      
Schonmal Danke für deine Antwort.

Das ist ja nicht so schlimm wenn die Störsignale bleiben, wichtig ist für mich nur, die Risse innerhalb des Bauteiles.

Ich habe jetzt schon google durchsucht und nichts gefunden.

Mein Schwerpunkt liegt darin, dass Ich die Risse durch Matlab erkennen lassen will.

Kann mir diesbezüglich jemand weiterhelfen ??

Ich habe mir schon überlegt, dass Kanten image zu speichern und mit einer Bildverarbeitung weiterzuarbeiten, doch bin ich da auch noch nicht weiter gekommen.

Gruss Lux
 
Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 28.04.2014, 08:01     Titel:
  Antworten mit Zitat      
So wie ich das sehe, haben die Störungen außerhalb des Bauteils, die Risse und auch die Bautailkante immer eine geschlossene Kante?

Wenn ja, könntest du die Kantenverläufe für jedes geschlossene Objekt detektieren und jeweils in einer Matrix speichern.
Das größte geschlossene Objekt ist das Bauteil. (falls es immer das selbe Objekt ist, oder das Objekt sogar jedesmal gleich liegt, kann man zusätzlich noch eine "Normalmatrix" erstellen, in der man hinterlegt, wie das Bauteil ideal aussieht, dies abziehen und somit gleich nur noch risse und störungen erkennen.)
Von diesen bekannten Bauteilgrenzen aus läßt sich dann bewerten, ob ein weiteres gefundenes Objekt sich im inneren (=Riß) oder äußeren (= andere Störung) der Bautteilgrenze befindet und so entsprechend bewerten/anzeigen/einfärben...
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Private Nachricht senden Benutzer-Profile anzeigen
 
Lux

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.04.2014, 08:19     Titel:
  Antworten mit Zitat      
Die haben teilweise geschlossene Kanten, meistens fehlt nur ein Pixel, dass könnte ich aber durch verändern des Schwellwertes (56) eventuell noch beheben.

Das Bauteil ist immer das gleiche und befindet sich immer an der gleichen Stelle.

Deine Ideen finde ich ziemlich gut, da ich noch nicht so der Experte bin muss ich jetzt nochmal nachlesen, wie ich das Umsetzen kann.

Aber schonmal ganz großes Dankeschön Smile
 
Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 28.04.2014, 09:24     Titel:
  Antworten mit Zitat      
Lux hat Folgendes geschrieben:

Das Bauteil ist immer das gleiche und befindet sich immer an der gleichen Stelle.

Denn könntest du ja zusätzlich noch über mehrere Bilder mitteln, was die Bauteilgrenze angeht.
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Private Nachricht senden Benutzer-Profile anzeigen
 
Lux

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.04.2014, 10:15     Titel:
  Antworten mit Zitat      
Ich habe jetzt eine Normalmatrix erstellt und diese dann Abgezogen, somit bekomme ich nur noch die Störstellen und Risse.

Da mich nur die Risse interessieren könnte ich doch rein theoretisch, den Bereich um das Bauteil füllen und diese Matrix dann abziehen. Dadurch sollten meine Störstellen doch entfernt werden.

diff.jpg
 Beschreibung:
Differenzbild

Download
 Dateiname:  diff.jpg
 Dateigröße:  7.75 KB
 Heruntergeladen:  623 mal
normal.jpg
 Beschreibung:
Normalmatrix

Download
 Dateiname:  normal.jpg
 Dateigröße:  13.73 KB
 Heruntergeladen:  716 mal
 
Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 28.04.2014, 10:49     Titel:
  Antworten mit Zitat      
Lux hat Folgendes geschrieben:
Ich habe jetzt eine Normalmatrix erstellt und diese dann Abgezogen, somit bekomme ich nur noch die Störstellen und Risse.

Da mich nur die Risse interessieren könnte ich doch rein theoretisch, den Bereich um das Bauteil füllen und diese Matrix dann abziehen. Dadurch sollten meine Störstellen doch entfernt werden.

Ja, sollte gehen - oder was war die Frage?
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Private Nachricht senden Benutzer-Profile anzeigen
 
Lux

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.04.2014, 10:54     Titel:
  Antworten mit Zitat      
Habe es Beispielhaft versucht und es klappt.

Gibt es eine Möglichkeit mithilfe eines Befehls, alles um die Kanten zu füllen?
 
Hubertus
Forum-Meister

Forum-Meister


Beiträge: 1.034
Anmeldedatum: 08.01.09
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 28.04.2014, 12:20     Titel:
  Antworten mit Zitat      
Es ist mir zwar nicht klar, worauf es ankommt (hört sich manchmal widersprüchlich an), aber du kannst ja mal folgendes versuchen und feststellen, ob das der richtige Weg ist:

Code:
BW1=imread(Bild);
BW!=rgb2gray(BW1);
SE=strel('line',14,14);
BW2=imclose(BW1,SE);
BW3=imdilate(BW2,SE);
[L,n]=bwlabel(BW3);
RGB=label2rgb(L,'spring','c','shuffle');
figure; imshow(RGB)
stats=regionprops(L)
hold on
for i=1:length(stats)
text(stats(i).Centroid(1),stats(i).Centroid(2),num2str(i))
end


Das Ergebnis zeigt die Risse farbig markiert. Es fehlt noch ein kleiner Rest. Der Algo. zeigt, wo man noch optimieren kann.

Hubertus
Private Nachricht senden Benutzer-Profile anzeigen
 
Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 28.04.2014, 12:28     Titel:
  Antworten mit Zitat      
Lux hat Folgendes geschrieben:
Habe es Beispielhaft versucht und es klappt.

Gibt es eine Möglichkeit mithilfe eines Befehls, alles um die Kanten zu füllen?

Mir fällt spontan Watershed ein, aber das ist ehr, um die Kanten zu finden.
Du könntest evt. mit morphologischen Operatoren probieren.
Imclose könnte recht gute Dienste leisten, so du die Toolbox hast.
Code:


Damit füllst du die kleinen geschlossenen Störungen/Risse. Wenn du den Pixeln im "gefüllten" Bild dann eine andere Farbe zuweist und die Kanten drüberlegst, sollte das recht nett aussehen zur veranschaulichung.
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Private Nachricht senden Benutzer-Profile anzeigen
 
Lux
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 28.04.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.04.2014, 13:06     Titel:
  Antworten mit Zitat      
@Mmmartina

Zitat:
Lux hat Folgendes geschrieben:
Habe es Beispielhaft versucht und es klappt.

Gibt es eine Möglichkeit mithilfe eines Befehls, alles um die Kanten zu füllen?

Mir fällt spontan Watershed ein, aber das ist ehr, um die Kanten zu finden.
Du könntest evt. mit morphologischen Operatoren probieren.
Imclose könnte recht gute Dienste leisten, so du die Toolbox hast.
Code:
imclose
Funktion ohne Link?


Damit füllst du die kleinen geschlossenen Störungen/Risse. Wenn du den Pixeln im "gefüllten" Bild dann eine andere Farbe zuweist und die Kanten drüberlegst, sollte das recht nett aussehen zur veranschaulichung.


Ich habe es mit imgclose probiert, der code sieht wie folgt aus:

Code:
originalBW = imread('normal.jpg');
imshow(originalBW);

se = strel('disk',15);

closeBW = imclose(originalBW,se);
figure(2), imshow(closeBW)


Das Ergebnis ist leider nicht so gut, ab einem gewissen Punkt, färbt er auch innerhalb des Bauteils.


Deswegen habe Ich es fürs erste manuell gemacht, heisst ich habe alle 0 in der Matrix in 1 umgeschrieben Very Happy

Nachdem ich die differenz gebildet habe, habe ich mit imgclose die Risse flächig gemacht und das klappt super.

@Hubertus

Ich habe dein Code ebenfalls ausprobiert und erhalte das im Anhang abgebildete Ergebniss, was nicht ganz so schön aussieht.

goMatlab.jpg
 Beschreibung:
@Hubertus

Download
 Dateiname:  goMatlab.jpg
 Dateigröße:  20.13 KB
 Heruntergeladen:  651 mal
fill_diff2.jpg
 Beschreibung:
Risse gefüllt

Download
 Dateiname:  fill_diff2.jpg
 Dateigröße:  9.36 KB
 Heruntergeladen:  643 mal
imgclose.jpg
 Beschreibung:
First

Download
 Dateiname:  imgclose.jpg
 Dateigröße:  16.49 KB
 Heruntergeladen:  621 mal
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.