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

Hilfe bei Funktionensuche z. Thema Separieren

 

Lenny
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 06.09.09
Wohnort: Stuttgart
Version: ---
     Beitrag Verfasst am: 23.09.2009, 18:56     Titel: Hilfe bei Funktionensuche z. Thema Separieren
  Antworten mit Zitat      
Hallo Miteinander!

Habe euch mal ein binäres Bild gepostet, um mein Problem zu verdeutlichen.
Es verlaufen horizontale und zwei schräge Linien in verschiedenen Richtungen.
Gibt es Funktionen oder Befehle in Matlab,die mein Bild nach 0° und +- 45° Formerkennung durchgehen können ?
Mein Ziel ist diese Richtungen voneinander unterscheiden zu können. Dieses kann bildlich oder falls das nicht geht in einer anderen Art erfolgen.
Im Anschluss an allem wollte ich diese voneinander getrennten Richtungen gerne noch zählen.

Hoffe einer von euch kann mir witerhelfen ? und begeistert sich für mein Thema mit einem kleinen Quellcode oder Funktion Very Happy

Lg
Lenny

BSP.jpg
 Beschreibung:

Download
 Dateiname:  BSP.jpg
 Dateigröße:  67.33 KB
 Heruntergeladen:  631 mal
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden


LittleX
Forum-Guru

Forum-Guru


Beiträge: 494
Anmeldedatum: 14.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.09.2009, 19:11     Titel:
  Antworten mit Zitat      
Hallo,

probier doch mal zuerst das Bild mit Hilfe eines Kantenfilters wie Sobel oder Canny-Edge zu filtern. Bei Sobel kannst Du sogar mit Hilfe der entsprechenden Filtermaske die grobe Richtung bestimmen, in der Du Kanten finden willst. Mit Hilfe der Hough Transformation kann man nach Linien im Bild suchen.
Wenn Du die Image Processing Toolbox hast, kannst Du folgende Befehle verwenden: edge und hough
Wenn Du die Toolbox nicht hast, würde ich mal im Fileexchange auf der Mathworks Homepage danach suchen.

Viele Grüße,

LittleX
Private Nachricht senden Benutzer-Profile anzeigen
 
Lenny
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 06.09.09
Wohnort: Stuttgart
Version: ---
     Beitrag Verfasst am: 30.09.2009, 18:17     Titel:
  Antworten mit Zitat      
Hallo,

ersteinmal vielen Dank für deine Nachricht!
Ich habe mich in deinen Funktionen versucht schlau zu lesen, habe aber doch noch ein paar Fragen.

1) Die Sobel Funktion unterscheidet doch nur zwischen horizontalen und vertikalen Richtungen? Im Anhang habe ich ein Bild gepostet, dass mithilfe der Roberts Methode +- 45° Kanten erkennt. (gepostete Bild ist +45° als Bsp)
Hier erkennt man schön,dass 45° Bereiche in Linnien und die -45° Bereiche gepunktet dargestellt werden. Der 0° Bereich ist leider auch als Linie zu sehen.
Besteht die Möglichkeit die Roberts- und Sobel Methode miteinander zu kombinieren, so dass der 0° Bereich auch gepunktet dargestellt wird?

2) Wie entferne ich denn die weißen gepunkteten Pixel in meinem Bild?
Gibt es Funktion, die Gebiete mit Minimalpixelanzahl einfach löscht?

3)Das mit hough und den Linien klingt zwar ganz gut, aber leider bekomme ich das nicht hin Sad Möchte gerne, die 45° Linien im Bild mit anderen 45° Linien verbinden, wenn diese nur durch ein kleinen schwarzen Pixelbereich unterbrochen werden?
Hilft da sowas wie houghpeaks oder andere funktionen weiter???

4) Oder gibt es für mein Problem noch eine einfachere Lösung?

Würde mich echt über Hilfe freuen!

+45%B0.jpg
 Beschreibung:

Download
 Dateiname:  +45%B0.jpg
 Dateigröße:  41.17 KB
 Heruntergeladen:  635 mal
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
LittleX
Forum-Guru

Forum-Guru


Beiträge: 494
Anmeldedatum: 14.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.09.2009, 23:37     Titel:
  Antworten mit Zitat      
Hallo Lenny,

zu 1) Sobel gibt es genaus für diagonal, die entsprechende Filtermaske sieht dann so aus:

0 -1 -2
1 0 -1
2 1 0

und

-2 -1 0
-1 0 1
0 1 2

Welcher der Kantendetektoren am besten für Dein Problem geeignet ist, findest Du am besten durch ausprobieren raus Smile
Auch wenn die Filter bestimmte Richtungen hervorheben, wirst Du meistens noch Sachen mitbekommen, die Du nicht haben willst.

2) Zum entfernen von kleinen Objekten gibt es z.B. bwareaopen.

3) Genau, mit hougpeaks findest Du Maximas im Hough-Bild (und die Maxima entsprechen Linien. houghlines ist ebenfalls ein hilfreicher Befehl (vorallem wenn Du die Linien einzeichnen willst. Der Vorteil der Hough-Transformation ist, dass die gefundenen Linien durchbrochen sein können.

4) Ansonsten könntest Du auch mit morphologischen Operatoren (imerode, imdilate) spielen und schauen, ob Du damit weiter kommst.
Eventuell durch ein entsprechendes großes strukturierendes Element in die gewünschte Richtung alle anderen nicht passenden Bildelemente entfernen. Einfach mal ein bisschen rumspielen und gucken was passiert.

Viele Grüße,

LittleX
Private Nachricht senden Benutzer-Profile anzeigen
 
Lenny
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 06.09.09
Wohnort: Stuttgart
Version: ---
     Beitrag Verfasst am: 02.10.2009, 17:11     Titel:
  Antworten mit Zitat      
Hallo LittleX

ich hoffe du hast noch ein wenig Geduld mit mir Question

zu 1 + 2)
Da ich ja wirklich noch im Anfangsstadium von Matlab bin, schreibe ich dir
sicherhaltshalber noch mal meinen Code, ob dass so mit mit Sobel und der Filtermaske am elegantesten von mir gelöst worden ist, oder du dir vielleicht doch einen anderen Code vorgestellt hast?
Zudem habe die beiden Bilder noch einmal im Anhang gepostet!
Na ja,weisst du vielleicht, wie man noch die 0° Linien entfernen könntet, weil mit bwareaopen ich sonst noch bestimmt +- 45° Bereiche entfernen würde.

zu 3)

Oh ja zu 3,
mit der Hough Transformation und der Hough Linien blicke ich wirklich nicht ganz durch.
Möchte so gerne die Linien mit 45° Bereichen verbinden!
Würde das mit meinen jetzigen Bildern so ganz gut gehen??
Und wenn ja würde ich natürlich über weitere Hilfe und vielleicht einen kleinen Quellcode oder Verweis auf ein ähnliches Beispiel sehr freuen!

PS: Danke für deine Hilfe!

lg

Lenny


Code:


sobelx = [0 -1 -2; 1 0 -1; 2 1 0];
SX = conv2(bw,sobelx);
figure,
imshow(SX);
B = im2bw(SX);
BW1 = bwareaopen(B,30);
figure,
imshow(BW1);


sobelx1 = [-2 -1 0; -1 0 1; 0 1 2];
SX1 = conv2(bw,sobelx1);
figure,
imshow(SX1);
BP = im2bw(SX1);
BW2 = bwareaopen(BP,30);
figure,
imshow(BW2);
 



Confused Confused [/code]

BW2.jpg
 Beschreibung:

Download
 Dateiname:  BW2.jpg
 Dateigröße:  47.92 KB
 Heruntergeladen:  587 mal
BW1.jpg
 Beschreibung:

Download
 Dateiname:  BW1.jpg
 Dateigröße:  34.6 KB
 Heruntergeladen:  622 mal
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
LittleX
Forum-Guru

Forum-Guru


Beiträge: 494
Anmeldedatum: 14.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.10.2009, 12:58     Titel:
  Antworten mit Zitat      
Hallo Lenny,

die Filterung mit conv2 passt so schon Smile
In der Image Processing Toolbox gibt es noch imfilter (dort kannst Du z.B. noch eine Randbehandlung einstellen). Das ist aber in Deinem Bespiel recht egal. Allgemein solltest Du bei Operatoren wie Sobel darauf achten, dass in der Ergebnismatrix auch negative Werten stehen können (die ebenfalls Kanten repräsentieren).

Für die Hough Transformation stören die 0 Grad Linien nicht wirklich.
Bei mir hatte Dein angehängtes Bild eine weißen Rand, den solltest Du vorher noch entfernen.

Beispiel für Hough (die Parameter müsstest Du halt selber noch vernünftig anpassen, nur mal so eine grobe Idee):

Code:

[H,T,R] = hough(BW,'RhoResolution',0.5,'Theta',-42:-0.2:-47);

P  = houghpeaks(H,20,'threshold',ceil(0.2*max(H(:))));
x = T(P(:,2)); y = R(P(:,1));

% Find lines and plot them
lines = houghlines(BW,T,R,P,'FillGap',30,'MinLength',7);

figure, imshow(BW), hold on

for k = 1:length(lines)
   xy = [lines(k).point1; lines(k).point2];
   plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');
end

 



Viele Grüße,

LittleX
Private Nachricht senden Benutzer-Profile anzeigen
 
Lenny
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 06.09.09
Wohnort: Stuttgart
Version: ---
     Beitrag Verfasst am: 05.10.2009, 19:42     Titel:
  Antworten mit Zitat      
Hallo LittleX

Danke für den Code, leider bekomme ich aber folgende Fehlermeldung Sad
Deinen Code habe ich in mein Programm kopiert und für alle Parameter
BW habe ich mein BW1 eingesetzt( halt mein aktuelles Bild)
BW1 ist bei mir ein binäres Bild,sprich eine Ergebnismatrix von 0 und 1

??? Error using ==> iptcheckinput
Function HOUGH expected its fifth input, ThetaResolution, to be a scalar.

Error in ==> hough>parseInputs at 140
iptcheckinput(theta_res, {'double'}, {'real', 'scalar', ...

Error in ==> hough at 93
[bw, rho, theta] = parseInputs(varargin{:});

Error in ==> Binaer at 74
[H,T,R] = hough(BW2,'RhoResolution',0.5,'Theta',-42:-0.2:-47.0);

Error in ==> crackcounter at 101
binaer

Lg
Lenny
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
LittleX
Forum-Guru

Forum-Guru


Beiträge: 494
Anmeldedatum: 14.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.10.2009, 20:11     Titel:
  Antworten mit Zitat      
Hallo Lenny,

das liegt an der verwendeten MATLAB Version. Ich habe das Beispiel mit 2009b erstellt und kann daher nicht nur die Auflösung angeben sondern direkt die Winkel die mich interessieren.

Ansonsten musst Du Dir nach der Peak-Erkennung die interessanten Winkel selber raussuchen.
So in der Art:

Code:

[H,T,R] = hough(BW,'RhoResolution',0.5);
P  = houghpeaks(H,50,'threshold',0.1*max(H(:)));
x = abs(T(P(:,2))); y = R(P(:,1));
idx = x > 42 & x < 47;
x = x(idx);
y = y(idx);
P = P(idx,:);

 


Viele Grüße,

LittleX
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.