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

Implementierung der Statistical Hough Transformation

 

EliteTUM
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 70
Anmeldedatum: 21.04.11
Wohnort: München
Version: ---
     Beitrag Verfasst am: 29.07.2012, 19:47     Titel: Implementierung der Statistical Hough Transformation
  Antworten mit Zitat      
Hallo Zusammen,

ich möchte die sog. Statistical Hough Transformation mal testen, nachdem ich davon in einem Paper gelesen habe. Leider finden sich dazu keine bereits existierende Implementierungen in irgendeiner Programmiersprache. Zumindest habe ich nach längerer Suche keine gefunden.

Folgendes Paper hat aber zumindest vereinfacht zusammengetragen, wie man diese Statistical Hough Transformation berechnen würde:

Guoliang Liu, Florentin Wörgötter.....ne Detection and Tracking

Auf Seite 3 Links ist der Algorithmus beschrieben. Die Schritte 1 und 2 sind ja noch leicht umsetzbar. Bei Schritt 3 ist mir auch noch verständlich, dass man die Variable rho und theta in einem gewissen Bereich variieren soll. Wie ist ja dabei auch gegeben. Aber bei der Berechnung der Wahrscheinlichkeit p(theta, rho) komme ich nicht korrekt voran.

Und zwar Formel (4) und (5) sind für mich etwas undurchsichtig. Also in Formel 4 wird ja über alle i = [0...N] Pixel aufsummiert. Entsprechend wird in der Schleife (bzw. wenn man zwei Schleifen für Zeilen und Spalten macht!) jedesmal ein neues G_i berrechnet. Dies ist ein normales skalar. Dies wird mit dem Faktor K_theta multipliziert, welcher ein Gauss-Kernel sein soll. Also eine Normalverteilung. Aber ich berechne in Schritt 3 mit Formel(4) ja einen skalaren Wert, oder nicht? Wenn ich aber ein Skalar mit einer Wahrscheinlichkeitsverteilung mulitpliziere, erhalte ich eine skalierte Verteilung. Diese über alle Pixel aufsummiert ergibt aber immer noch eine Verteilung, oder nicht?
Wie berechne ich dies dann korrekt?

Mein Ansatz bisher:

Code:
clear all;
close all;
clc;

filename = 'testPic.png';
myImage = imread([filename]);

if size(myImage,3) == 3
    myImage = rgb2gray(myImage);
end

if ~isa(myImage,'double') && ~isa(myImage,'single')
  myImage  = im2single(myImage);
end


%% STATISTICAL HOUGH TRANSFORMATION %%
%

% STEP 1 - Calculate Orientation and Magnitude of Image Gradient

% calculate gradient
[G_xMat, G_yMat] = gradient(myImage);

% compute the magnitude
GMat = sqrt( G_xMat.*G_xMat + G_yMat.*G_yMat );

% compute the magnitude
ThetaMat = atan2(G_xMat, G_yMat);

% STEP 2 - Calculate Variances

varX = 1; % compare: Guoliang Liu, Florentin Wörgötter and Irene Markelic - Combining Statistical Hough Transform and Particle Filter for Robust Lane Detection and Tracking
varY = 1;
varThetaMat = 1./GMat.^2;

% STEP 3 - Build 2D Histogram

% get size om image
[w,h] = size(myImage);
rho_p = 0.5 * w * cos( atan( h/w ) ) + 0.5 * h * sin( atan( h/w ) );

thetaRange = -pi/2:0.5:pi/2;
rhoRange = -rho_p:50:rho_p;

row = 0;
for theta = thetaRange
    row = row + 1;
    col = 0;
    for rho = rhoRange
        col = col + 1;
       
        K_theta = 1./(varThetaMat .* sqrt(2*pi) );
       
        mySum = 0;
        for x_i = 1:w
            for y_i = 1:h
                G_i = 1 / sqrt(2*pi*(varX*cos(theta)^2+varY*sin(theta)^2)) * exp( -(rho-x_i*cos(theta) - y_i*sin(theta))^2 / (2 * (varX*cos(theta)^2+varY*sin(theta)^2) ) );
                mySum = mySum + K_theta(x_i,y_i) * G_i;
            end
        end
        p(row,col) = mySum/(w*h) ;
    end
end

mesh(double(p));


Das Bild das ich dafür verwende stammt aus dem Paper. Ich hänge es mal verkleinert an.

Kann jemand weiterhelfen?
Bin für jede Hilfe dankbar!!

testPic.png
 Beschreibung:

Download
 Dateiname:  testPic.png
 Dateigröße:  18.91 KB
 Heruntergeladen:  486 mal

_________________

- EliteTUM
_____________________________________
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.