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

Problem bei Hugh-Trafo

 

---c---
Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 26.11.09
Wohnort: ---
Version: 2008b
     Beitrag Verfasst am: 26.11.2009, 20:48     Titel: Problem bei Hugh-Trafo
  Antworten mit Zitat      
Hallo

ich habe eine kleine Hugh-Trafo geschrieben zur Kreismittelpunkterkennung.
Nun habe ich das Problem, dass um die Konturen keine Kreise gesetzt werden, sondern die Kontur selbst.
Meiner Meinung nach müsste der Fehler in einer Schleife liegen, ich kann aber leider keinen finden.

Code:

%% Kantendetektion
I = imresize(I,2);
I = im2bw(I,graythresh(I));
I = double(I);
kanten = edge(I,'canny');

%% Kreiskoordinaten erzeugen
w = linspace(0,2*pi,20);
r = 20;
xkreis = fix(r*cos(w));
ykreis = fix(r*sin(w));

%% Kantenkoordinaten
[koorx,koory] = find(kanten);

%% "Hugh-Trafo"
neu = zeros(size(I));

for (z=1:length(koorx))
    for (k=1:length(w))
        neu(koorx(z)+xkreis(k),koory(z)+ykreis(k))= neu(koorx(z)+xkreis(k),koory(z)+ykreis(k))+1;
    end
end

imshow(neu);


Wenn irgendwer den Fehler findet, oder mir sonst weiterhelfen kann, würde es mich sehr freuen.

Danke im Voraus

I.jpg
 Beschreibung:
Anfangsbild

Download
 Dateiname:  I.jpg
 Dateigröße:  5.14 KB
 Heruntergeladen:  789 mal
kanten.jpg
 Beschreibung:
nach Kantendetektion

Download
 Dateiname:  kanten.jpg
 Dateigröße:  10.77 KB
 Heruntergeladen:  830 mal
hugh.jpg
 Beschreibung:
nach meiner "Hugh-Trafo"

Download
 Dateiname:  hugh.jpg
 Dateigröße:  18.49 KB
 Heruntergeladen:  837 mal
Private Nachricht senden Benutzer-Profile anzeigen


Wraith720
Forum-Anfänger

Forum-Anfänger



Beiträge: 15
Anmeldedatum: 29.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.11.2009, 09:49     Titel:
  Antworten mit Zitat      
Hallo!

Auf den ersten Blick würde ich sagen, dass du in den for-Schleifen den Radius mit einbeziehen musst. Nämlich so:

Code:

%% "Hugh-Trafo"
neu = zeros(size(I));

for (z=1:length(koorx))
    for (k=1:length(w))
        neu(koorx(z)+xkreis(k),koory(z)+ykreis(k))= neu(r+xkreis(k),r+ykreis(k)) + 1;
    end
end
 

Halt r statt koorx und koory verwenden.


Probiers mal aus und gib Bescheid, ob es das war...
Grüße,
Wraith720
_________________

Dumme Fragen gibt es nicht! Dumm ist nur, wer nicht fragt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Wraith720
Forum-Anfänger

Forum-Anfänger



Beiträge: 15
Anmeldedatum: 29.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.11.2009, 10:07     Titel:
  Antworten mit Zitat      
Hallo!

Hab was vergessen... Damit der Hough-Raum richtig berechnet wird muss noch der alte Wert übernommen werden...
Sieht dann so aus:

Code:

%% "Hugh-Trafo"
neu = zeros(size(I));

for z=1:length(koorx)
    for k=1:length(w)
        neu(koorx(z)+xkreis(k),koory(z)+ykreis(k))= neu(koorx(z)+xkreis(k),koory(z)+ykreis(k)) + neu(r+xkreis(k),r+ykreis(k)) + 1;
    end
end
 


Um dann auch noch ne schöne Anzeige des Hough-Raumes zu bekommen würde ich folgendermaßen vorgehen:

Code:

ht_out = neu / max(max(neu));
figure; imshow(ht_out); title('HT-Raum');
colormap(hot);
 


Habs auch mal kurz ausprobiert und festgestellt, dass es funzt.

Grüße,
Wraith720

HT.jpg
 Beschreibung:
Hough-Raum

Download
 Dateiname:  HT.jpg
 Dateigröße:  13.77 KB
 Heruntergeladen:  805 mal

_________________

Dumme Fragen gibt es nicht! Dumm ist nur, wer nicht fragt.
Private Nachricht senden Benutzer-Profile anzeigen
 
---c---
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 26.11.09
Wohnort: ---
Version: 2008b
     Beitrag Verfasst am: 30.11.2009, 17:17     Titel:
  Antworten mit Zitat      
vielen Dank, ich werde es morgen mal ausprobieren.

Ich verstehe nicht ganz, warum es mit meiner Methode nicht geht.
Den Radius habe ich ja bei der Bestimmung der Kreiskoordinaten schon mit eingerechnet.
Wenn man auf xkreis und ykreis nochmal den radiuswert draufaddiert, werden die Kreise meiner Meinung nach nur um den Radius nach unten und rechts verschoben.
Beispiel: Kreis mit Mittelpunkt bei 0, r=1
xkreis=(1,0,-1,0), ykreis(0,1,0,-1)
r+xkreis=(2,1,0,1), r+ykreis(1,2,1,0)
Private Nachricht senden Benutzer-Profile anzeigen
 
Wraith720
Forum-Anfänger

Forum-Anfänger



Beiträge: 15
Anmeldedatum: 29.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2009, 09:41     Titel:
  Antworten mit Zitat      
Hallo,

nun wenn du dir deine berechneten Kreiskoordinaten anschaust, dann siehst du, dass du auch negative Koordinaten berechnet hast.
D.h. dein Kreis ist verschoben... dies kannst du ausgleichen, indem der Radius hinzuaddiert wird.

Grüße,
Wraith720
_________________

Dumme Fragen gibt es nicht! Dumm ist nur, wer nicht fragt.
Private Nachricht senden Benutzer-Profile anzeigen
 
---c---
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 26.11.09
Wohnort: ---
Version: 2008b
     Beitrag Verfasst am: 01.12.2009, 12:01     Titel:
  Antworten mit Zitat      
aber ich muss die negativen Werte doch garnicht ausgleichen, da der Mittelpunkt (der vorher bei 0 war) verschoben wird indem die Koordinaten der weißen Pixel aufaddiert werden.
Vielleicht denk ich auch grad falsch. Ich werd mir das in Ruhe nochmal überlegen.
Private Nachricht senden Benutzer-Profile anzeigen
 
---c---
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 26.11.09
Wohnort: ---
Version: 2008b
     Beitrag Verfasst am: 01.12.2009, 19:35     Titel:
  Antworten mit Zitat      
Hallo,

ich habe nun die for-Schleife (mit der Radius-Korrektur) kopiert und bei mir versucht.
Ich erhalte immer noch das selbe Ergebnis, wie vorher.
Wenn ich "plot(xkreis,ykreis)" mache, sehe ich eindeutig, dass ich Kreiskoordinaten habe. Im Hugh-Raum werden aber leider keine Kreise um die weißen Pixel gemacht, sondern wieder die Kontur selbst...
Ich hab jetzt garkeine Ahnung mehr...


p.s.: wenn man "neu(r+xkreis(k),r+ykreis(k))" aufaddiert, bedeutet das nur, dass man die Werte in der Matrix "neu", die auf einem Kreis mit Mittelpunkt bei (r,r) liegen, draufaddiert, die hier (glücklicherweise) alle 0 sind.
Private Nachricht senden Benutzer-Profile anzeigen
 
Wraith720
Forum-Anfänger

Forum-Anfänger



Beiträge: 15
Anmeldedatum: 29.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.12.2009, 18:19     Titel:
  Antworten mit Zitat      
Hm, das ist aber seltsam...
Bei mir klappt das so.
Ich hab dir mal ein Bildchen mit einem Zwischenergebnis des Hough-Raumes beigefügt. Dort siehst du, dass dort eindeutig ein Kreis auf die Kontur gezeichnet wird.

Code dazu sieht so aus:
Code:

I = imread('I.jpg');
%% Kantendetektion
I = imresize(I,2);
I = im2bw(I,graythresh(I));
I = double(I);
kanten = edge(I,'canny');

%% Kreiskoordinaten erzeugen
w = linspace(0,2*pi,360);
r = 20;
xkreis = fix(r*cos(w));
ykreis = fix(r*sin(w));

%% Kantenkoordinaten
[koorx,koory] = find(kanten);

%% "Hugh-Trafo"
neu = zeros(size(I));
for z=1:length(koorx)
    for k=1:length(w)
        neu(koorx(z)+xkreis(k),koory(z)+ykreis(k))= neu(koorx(z)+xkreis(k),koory(z)+ykreis(k)) + neu(r+xkreis(k),r+ykreis(k)) + 1;
    end
end

ht_out = neu / max(max(neu));
figure; imshow(ht_out); title('HT-Raum');
colormap(hot);
imwrite(ht_out, 'HT.jpg');
 


HR.jpg
 Beschreibung:
Hough-Raum...

Download
 Dateiname:  HR.jpg
 Dateigröße:  6.07 KB
 Heruntergeladen:  770 mal

_________________

Dumme Fragen gibt es nicht! Dumm ist nur, wer nicht fragt.
Private Nachricht senden Benutzer-Profile anzeigen
 
---c---
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 26.11.09
Wohnort: ---
Version: 2008b
     Beitrag Verfasst am: 02.12.2009, 23:04     Titel:
  Antworten mit Zitat      
so ich habs mal Schritt für Schritt verglichen.
"+ neu(r+xkreis(k),r+ykreis(k))" kann man weglassen, das hab ich ja schon erklärt.

Der "Fehler" liegt bei "w = linspace(0,2*pi,360);" ich habe da nur 20 Werte bestimmen lassen, du hast da 360.
Mit 360 Werten klappt es nun auch bei mir.
Ich wollte mit so wenig Werten wie möglich arbeiten, da das ganze so schnell wie möglich ablaufen soll (echtzeitfähigkeit ist gefordert, wird man aber sicher nicht erreichen...).
Nun teste ich herum, ab wieviel Werten ein Kreis gezeichent wird... sehr merkwürdig
Private Nachricht senden Benutzer-Profile anzeigen
 
Wraith720
Forum-Anfänger

Forum-Anfänger



Beiträge: 15
Anmeldedatum: 29.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.12.2009, 10:34     Titel:
  Antworten mit Zitat      
Na ja, wenigstens hats was gebracht, auch wenn es nicht das gelbe vom Ei war, was ich vorgeschlagen habe...

Grüße,
Wraith720
Private Nachricht senden Benutzer-Profile anzeigen
 
---c---
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 26.11.09
Wohnort: ---
Version: 2008b
     Beitrag Verfasst am: 06.12.2009, 22:48     Titel:
  Antworten mit Zitat      
also ich habs jetzt nochmal nach einer Pause und etwas Abstand versucht.
Doch nun funktioniert der Code von Wraith720 auch nicht mehr, vielleicht habe ich vorher auch nicht so genau hingeschaut.

Im Anhang habe ich markiert (mit einer lilanen Ellpise), wo man sieht, dass es nicht klappt.
Wenn man den Radius beim Berechnen der Kreiskoordinaten ändert und sich dann den Kreis ausgeben lässt, passt alles.
Wenn man diese Koordianten dann für die Hugh-Trafo verwendet, ändert sich nicht der Radius der Kreise, sondern der Abstand zu den Objekten.
Das kann ich mir nicht mehr erklären...
Langsam weiß ich nicht mehr weiter....

radius.jpg
 Beschreibung:
mit größerem Radius

Download
 Dateiname:  radius.jpg
 Dateigröße:  21.52 KB
 Heruntergeladen:  806 mal
360werte.jpg
 Beschreibung:
mit 360 Kreiskoordinaten

Download
 Dateiname:  360werte.jpg
 Dateigröße:  33.34 KB
 Heruntergeladen:  810 mal
20werte.jpg
 Beschreibung:
mit 20 Kreiskoordinaten

Download
 Dateiname:  20werte.jpg
 Dateigröße:  22.06 KB
 Heruntergeladen:  798 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
---c---
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 26.11.09
Wohnort: ---
Version: 2008b
     Beitrag Verfasst am: 07.12.2009, 13:02     Titel:
  Antworten mit Zitat      
ich habe gerade herausgefunden, dass ich wiedermal etwas oberflächlich war und dachte, dass Hough ohne "o" geschrieben wird.
Es gibt in der ImageProcessingToolbox bereits eine Funktion Hough(), die werde ich mal testen.
Wenn man den Namen richtig schreibt, findet man die auch.
http://www.mathworks.com/access/hel.....toolbox/images/hough.html

Die geht aber leider nur zur Detektion von Linien...
Private Nachricht senden Benutzer-Profile anzeigen
 
LittleX
Forum-Guru

Forum-Guru


Beiträge: 494
Anmeldedatum: 14.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.12.2009, 13:29     Titel:
  Antworten mit Zitat      
Hallo,

im FileExchange gibt es einige Beiträge zum Thema Hough-Transformation für Kreise.

http://www.mathworks.com/matlabcentral/fileexchange/?term=hough

Viele Grüße,

LittleX
Private Nachricht senden Benutzer-Profile anzeigen
 
---c---
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 26.11.09
Wohnort: ---
Version: 2008b
     Beitrag Verfasst am: 07.12.2009, 21:47     Titel:
  Antworten mit Zitat      
danke
ich werde mir da mal etwas zusammensuchen.
vielleicht finde ich irgendwann heraus warum mins nicht ging.
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.