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

Rechteck Erkennung mittels Hough

 

Knigge
Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 03.10.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.12.2014, 11:24     Titel: Rechteck Erkennung mittels Hough
  Antworten mit Zitat      
Hallo,

ich versuche mich gerade an der Bildverarbeitung für einen Ball and Plate Prüfstand. Um dies zu realisieren ist es notwendig zunächst den Bereich der Platte zu detektieren.
Dazu habe ich meine Aufnahmen, ich habe mal ein Bsp mit angehangen, in ein Digitales Bild überführt und wollte nun mittels der Hough Transformation die Linien und Winkel erkennen lassen.
Dazu hier mein Quellcode

Code:

%%
close all;
clear all;
clc;

%% Bild einlesen

BW1 = imread('BW1.png');
BW2 = imread('BW2.png');

% Bild wählen
BW = BW2;

figure()
imshow(BW)

%% Hough Transformation
[H,T,R] = hough(BW,'RhoResolution',0.5,'ThetaResolution',0.5);

figure()
subplot(2,1,1);
imshow(imadjust(mat2gray(H)),'XData',T,'YData',R,'InitialMagnification','fit');
xlabel('\theta'), ylabel('\rho');
axis on, axis normal, hold on;
colormap(hot);

% Maxima im Houghraum finden
P = houghpeaks(H,4);
plot(T(P(:,2)),R(P(:,1)),'s','color','white');
lines = houghlines(BW,T,R,P);%,'FillGap',5,'MinLength',7);

subplot(2,1,2);
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');
% Plot beginnings and ends of lines
plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow');
plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red');
end

%% Schnittpunkte ermitteln

% Funktionsparameter ermitteln y = mx+b
for i = 1:1:4
    m(i) =  (lines(i).point2(2) - lines(i).point1(2))/(lines(i).point2(1) - lines(i).point1(1));
    b(i) = lines(i).point2(2) - m(i)*lines(i).point2(1);
end

% Schmittpunkte ermitteln x=b1-b2/m2-m1 y=m2*b1-m1*b2/m2-m1
for i = 1:1:4
    if i < 4
        x(i) = (b(i)-b(i+1))/(m(i+1)-m(i));
        y(i) = (m(i+1)*b(i)-m(i)*b(i+1))/(m(i+1)-m(i));
    else
        x(i) = (b(i)-b(i-3))/(m(i-3)-m(i));
        y(i) = (m(i-3)*b(i)-m(i)*b(i-3))/(m(i-3)-m(i));
    end
end

% Eckpunkte Zeichnen
for i = 1:1:4
    viscircles([x(i),y(i)],10);
end
 


Nutze ich das BW2 klappt das auch super. Aber bei manchen Bildern, wie Beispielsweise beim BW1 findet er nur 2 Maximal, wodurch ich nur 2 Linien erhalte, was nicht reicht um alle Vier Ecken zu detektieren. Hat jemand eine Idee wo der Fehler liegt?

Aufnahme11.png
 Beschreibung:

Download
 Dateiname:  Aufnahme11.png
 Dateigröße:  286 KB
 Heruntergeladen:  552 mal
BW1.png
 Beschreibung:

Download
 Dateiname:  BW1.png
 Dateigröße:  701 Bytes
 Heruntergeladen:  516 mal
BW2.png
 Beschreibung:

Download
 Dateiname:  BW2.png
 Dateigröße:  1.05 KB
 Heruntergeladen:  542 mal
Private Nachricht senden Benutzer-Profile anzeigen


Maxx_BMT
Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 75
Anmeldedatum: 09.10.13
Wohnort: Ilmenau
Version: R2011a, R2016a
     Beitrag Verfasst am: 11.12.2014, 22:00     Titel:
  Antworten mit Zitat      
Hallo,

schau mal bei:

Code:
peaks =  houghpeaks (..., param1, val1, param2, val2)


und dann da unter Treshold, der Wert ist Standardmäßig bei
Code:
durch diese Anpassung kannst du noch etwas erreichen. Das war jetzt jetzt nur mal ein schneller Versuch, aber evtl. hilft es dir schon. Ich habe es mit 0.3 versucht.

Beste Grüße.
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 12.12.2014, 00:04     Titel:
  Antworten mit Zitat      
kleine anmerkung : peaks ist ein matlab befehl und sollte nicht als variablen name benutzt werden.
grüße winkow
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Maxx_BMT
Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 75
Anmeldedatum: 09.10.13
Wohnort: Ilmenau
Version: R2011a, R2016a
     Beitrag Verfasst am: 12.12.2014, 00:28     Titel:
  Antworten mit Zitat      
Hallo,

ach herrje du hast recht, das ist mir in der Kürze gar nicht aufgefallen ich ändere es mal noch.

Danke.

Ich meine natürlich den Befehl

Code:
houghpeaks


http://de.mathworks.com/help/images/ref/houghpeaks.html

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